From 0a9750ef9f61a12070797f3475f8f5b6b07f21b4 Mon Sep 17 00:00:00 2001 From: Russell Bryant <russell@russellbryant.com> Date: Fri, 6 Apr 2007 21:16:38 +0000 Subject: [PATCH] Merged revisions 60603 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r60603 | russell | 2007-04-06 15:58:43 -0500 (Fri, 06 Apr 2007) | 13 lines To be able to achieve the things that we would like to achieve with the Asterisk GUI project, we need a fully functional HTTP interface with access to the Asterisk manager interface. One of the things that was intended to be a part of this system, but was never actually implemented, was the ability for the GUI to be able to upload files to Asterisk. So, this commit adds this in the most minimally invasive way that we could come up with. A lot of work on minimime was done by Steve Murphy. He fixed a lot of bugs in the parser, and updated it to be thread-safe. The ability to check permissions of active manager sessions was added by Dwayne Hubbard. Then, hacking this all together and do doing the modifications necessary to the HTTP interface was done by me. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@60604 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- Makefile.moddir_rules | 2 + configs/http.conf.sample | 13 + configure | 6 +- configure.ac | 2 +- include/asterisk/autoconfig.h.in | 6 + include/asterisk/compat.h | 8 + include/asterisk/manager.h | 16 + main/Makefile | 8 +- main/http.c | 318 +- main/manager.c | 38 + main/minimime/.cvsignore | 4 + main/minimime/Doxyfile | 1098 +++++++ main/minimime/Make.conf | 7 + main/minimime/Makefile | 60 + main/minimime/mimeparser.h | 67 + main/minimime/mimeparser.l | 483 +++ main/minimime/mimeparser.tab.c | 2341 +++++++++++++++ main/minimime/mimeparser.tab.h | 112 + main/minimime/mimeparser.y | 750 +++++ main/minimime/mimeparser.yy.c | 2622 +++++++++++++++++ main/minimime/minimime.c | 245 ++ main/minimime/mm-docs/html/bug.html | 28 + main/minimime/mm-docs/html/doxygen.css | 358 +++ main/minimime/mm-docs/html/files.html | 44 + main/minimime/mm-docs/html/globals.html | 198 ++ main/minimime/mm-docs/html/globals_func.html | 198 ++ main/minimime/mm-docs/html/group__codecs.html | 243 ++ .../mm-docs/html/group__contenttype.html | 516 ++++ .../minimime/mm-docs/html/group__context.html | 465 +++ .../mm-docs/html/group__envelope.html | 172 ++ main/minimime/mm-docs/html/group__error.html | 108 + .../mm-docs/html/group__mimepart.html | 705 +++++ .../mm-docs/html/group__mimeutil.html | 22 + main/minimime/mm-docs/html/group__param.html | 273 ++ main/minimime/mm-docs/html/group__util.html | 280 ++ main/minimime/mm-docs/html/index.html | 21 + .../mm-docs/html/mimeparser_8h-source.html | 42 + .../html/mimeparser_8tab_8h-source.html | 136 + main/minimime/mm-docs/html/mm_8h-source.html | 382 +++ main/minimime/mm-docs/html/mm__codecs_8c.html | 58 + .../mm-docs/html/mm__contenttype_8c.html | 78 + .../minimime/mm-docs/html/mm__context_8c.html | 63 + .../mm-docs/html/mm__envelope_8c.html | 44 + main/minimime/mm-docs/html/mm__error_8c.html | 49 + main/minimime/mm-docs/html/mm__header_8c.html | 131 + .../mm-docs/html/mm__internal_8h-source.html | 82 + .../mm-docs/html/mm__internal_8h.html | 78 + .../mm-docs/html/mm__mem_8h-source.html | 56 + .../mm-docs/html/mm__mimepart_8c.html | 79 + .../mm-docs/html/mm__mimeutil_8c.html | 76 + main/minimime/mm-docs/html/mm__param_8c.html | 57 + main/minimime/mm-docs/html/mm__parse_8c.html | 198 ++ .../mm-docs/html/mm__queue_8h-source.html | 532 ++++ main/minimime/mm-docs/html/mm__util_8c.html | 58 + .../mm-docs/html/mm__util_8h-source.html | 74 + main/minimime/mm-docs/html/modules.html | 30 + main/minimime/mm-docs/html/pages.html | 23 + main/minimime/mm-docs/html/tabs.css | 102 + main/minimime/mm-docs/latex/Makefile | 39 + main/minimime/mm-docs/latex/bug.tex | 9 + main/minimime/mm-docs/latex/doxygen.sty | 78 + main/minimime/mm-docs/latex/files.tex | 21 + main/minimime/mm-docs/latex/group__codecs.tex | 119 + .../mm-docs/latex/group__contenttype.tex | 246 ++ .../minimime/mm-docs/latex/group__context.tex | 214 ++ .../mm-docs/latex/group__envelope.tex | 65 + main/minimime/mm-docs/latex/group__error.tex | 43 + .../mm-docs/latex/group__mimepart.tex | 333 +++ .../mm-docs/latex/group__mimeutil.tex | 2 + main/minimime/mm-docs/latex/group__param.tex | 127 + main/minimime/mm-docs/latex/group__util.tex | 128 + main/minimime/mm-docs/latex/mm__codecs_8c.tex | 41 + .../mm-docs/latex/mm__contenttype_8c.tex | 61 + .../minimime/mm-docs/latex/mm__context_8c.tex | 44 + .../mm-docs/latex/mm__envelope_8c.tex | 25 + main/minimime/mm-docs/latex/mm__error_8c.tex | 29 + main/minimime/mm-docs/latex/mm__header_8c.tex | 63 + .../mm-docs/latex/mm__internal_8h.tex | 45 + .../mm-docs/latex/mm__mimepart_8c.tex | 69 + .../mm-docs/latex/mm__mimeutil_8c.tex | 50 + main/minimime/mm-docs/latex/mm__param_8c.tex | 38 + main/minimime/mm-docs/latex/mm__parse_8c.tex | 90 + main/minimime/mm-docs/latex/mm__util_8c.tex | 38 + main/minimime/mm-docs/latex/modules.tex | 12 + main/minimime/mm-docs/latex/pages.tex | 5 + main/minimime/mm-docs/latex/refman.tex | 62 + main/minimime/mm-docs/refman.pdf | Bin 0 -> 261943 bytes main/minimime/mm.h | 368 +++ main/minimime/mm_base64.c | 210 ++ main/minimime/mm_codecs.c | 250 ++ main/minimime/mm_contenttype.c | 757 +++++ main/minimime/mm_context.c | 604 ++++ main/minimime/mm_envelope.c | 269 ++ main/minimime/mm_error.c | 123 + main/minimime/mm_header.c | 213 ++ main/minimime/mm_init.c | 65 + main/minimime/mm_internal.h | 65 + main/minimime/mm_mem.c | 171 ++ main/minimime/mm_mem.h | 32 + main/minimime/mm_mimepart.c | 657 +++++ main/minimime/mm_mimeutil.c | 136 + main/minimime/mm_param.c | 215 ++ main/minimime/mm_parse.c | 181 ++ main/minimime/mm_queue.h | 508 ++++ main/minimime/mm_util.c | 412 +++ main/minimime/mm_util.h | 50 + main/minimime/mm_warnings.c | 99 + main/minimime/mytest_files/ast_postdata | 38 + main/minimime/mytest_files/ast_postdata2 | Bin 0 -> 1737 bytes main/minimime/mytest_files/ast_postdata3.gz | Bin 0 -> 526318 bytes main/minimime/mytest_files/mytest.c | 71 + main/minimime/strlcat.c | 70 + main/minimime/strlcpy.c | 66 + main/minimime/sys/CVS/Entries | 2 + main/minimime/sys/CVS/Repository | 1 + main/minimime/sys/CVS/Root | 1 + main/minimime/sys/mm_queue.h | 503 ++++ main/minimime/test.sh | 54 + main/minimime/test/CVS/Entries | 1 + main/minimime/test/CVS/Repository | 1 + main/minimime/test/CVS/Root | 1 + main/minimime/tests/CVS/Entries | 4 + main/minimime/tests/CVS/Entries.Log | 1 + main/minimime/tests/CVS/Repository | 1 + main/minimime/tests/CVS/Root | 1 + main/minimime/tests/Makefile | 18 + main/minimime/tests/create.c | 106 + main/minimime/tests/messages/CVS/Entries | 8 + main/minimime/tests/messages/CVS/Repository | 1 + main/minimime/tests/messages/CVS/Root | 1 + main/minimime/tests/messages/test1.txt | 50 + main/minimime/tests/messages/test2.txt | 50 + main/minimime/tests/messages/test3.txt | 12 + main/minimime/tests/messages/test4.txt | 168 ++ main/minimime/tests/messages/test5.txt | 44 + main/minimime/tests/messages/test6.txt | 12 + main/minimime/tests/messages/test7.txt | 64 + main/minimime/tests/parse.c | 231 ++ main/strcompat.c | 128 + 139 files changed, 23447 insertions(+), 8 deletions(-) create mode 100644 main/minimime/.cvsignore create mode 100644 main/minimime/Doxyfile create mode 100644 main/minimime/Make.conf create mode 100644 main/minimime/Makefile create mode 100644 main/minimime/mimeparser.h create mode 100644 main/minimime/mimeparser.l create mode 100644 main/minimime/mimeparser.tab.c create mode 100644 main/minimime/mimeparser.tab.h create mode 100644 main/minimime/mimeparser.y create mode 100644 main/minimime/mimeparser.yy.c create mode 100644 main/minimime/minimime.c create mode 100644 main/minimime/mm-docs/html/bug.html create mode 100644 main/minimime/mm-docs/html/doxygen.css create mode 100644 main/minimime/mm-docs/html/files.html create mode 100644 main/minimime/mm-docs/html/globals.html create mode 100644 main/minimime/mm-docs/html/globals_func.html create mode 100644 main/minimime/mm-docs/html/group__codecs.html create mode 100644 main/minimime/mm-docs/html/group__contenttype.html create mode 100644 main/minimime/mm-docs/html/group__context.html create mode 100644 main/minimime/mm-docs/html/group__envelope.html create mode 100644 main/minimime/mm-docs/html/group__error.html create mode 100644 main/minimime/mm-docs/html/group__mimepart.html create mode 100644 main/minimime/mm-docs/html/group__mimeutil.html create mode 100644 main/minimime/mm-docs/html/group__param.html create mode 100644 main/minimime/mm-docs/html/group__util.html create mode 100644 main/minimime/mm-docs/html/index.html create mode 100644 main/minimime/mm-docs/html/mimeparser_8h-source.html create mode 100644 main/minimime/mm-docs/html/mimeparser_8tab_8h-source.html create mode 100644 main/minimime/mm-docs/html/mm_8h-source.html create mode 100644 main/minimime/mm-docs/html/mm__codecs_8c.html create mode 100644 main/minimime/mm-docs/html/mm__contenttype_8c.html create mode 100644 main/minimime/mm-docs/html/mm__context_8c.html create mode 100644 main/minimime/mm-docs/html/mm__envelope_8c.html create mode 100644 main/minimime/mm-docs/html/mm__error_8c.html create mode 100644 main/minimime/mm-docs/html/mm__header_8c.html create mode 100644 main/minimime/mm-docs/html/mm__internal_8h-source.html create mode 100644 main/minimime/mm-docs/html/mm__internal_8h.html create mode 100644 main/minimime/mm-docs/html/mm__mem_8h-source.html create mode 100644 main/minimime/mm-docs/html/mm__mimepart_8c.html create mode 100644 main/minimime/mm-docs/html/mm__mimeutil_8c.html create mode 100644 main/minimime/mm-docs/html/mm__param_8c.html create mode 100644 main/minimime/mm-docs/html/mm__parse_8c.html create mode 100644 main/minimime/mm-docs/html/mm__queue_8h-source.html create mode 100644 main/minimime/mm-docs/html/mm__util_8c.html create mode 100644 main/minimime/mm-docs/html/mm__util_8h-source.html create mode 100644 main/minimime/mm-docs/html/modules.html create mode 100644 main/minimime/mm-docs/html/pages.html create mode 100644 main/minimime/mm-docs/html/tabs.css create mode 100644 main/minimime/mm-docs/latex/Makefile create mode 100644 main/minimime/mm-docs/latex/bug.tex create mode 100644 main/minimime/mm-docs/latex/doxygen.sty create mode 100644 main/minimime/mm-docs/latex/files.tex create mode 100644 main/minimime/mm-docs/latex/group__codecs.tex create mode 100644 main/minimime/mm-docs/latex/group__contenttype.tex create mode 100644 main/minimime/mm-docs/latex/group__context.tex create mode 100644 main/minimime/mm-docs/latex/group__envelope.tex create mode 100644 main/minimime/mm-docs/latex/group__error.tex create mode 100644 main/minimime/mm-docs/latex/group__mimepart.tex create mode 100644 main/minimime/mm-docs/latex/group__mimeutil.tex create mode 100644 main/minimime/mm-docs/latex/group__param.tex create mode 100644 main/minimime/mm-docs/latex/group__util.tex create mode 100644 main/minimime/mm-docs/latex/mm__codecs_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__contenttype_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__context_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__envelope_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__error_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__header_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__internal_8h.tex create mode 100644 main/minimime/mm-docs/latex/mm__mimepart_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__mimeutil_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__param_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__parse_8c.tex create mode 100644 main/minimime/mm-docs/latex/mm__util_8c.tex create mode 100644 main/minimime/mm-docs/latex/modules.tex create mode 100644 main/minimime/mm-docs/latex/pages.tex create mode 100644 main/minimime/mm-docs/latex/refman.tex create mode 100644 main/minimime/mm-docs/refman.pdf create mode 100644 main/minimime/mm.h create mode 100644 main/minimime/mm_base64.c create mode 100644 main/minimime/mm_codecs.c create mode 100644 main/minimime/mm_contenttype.c create mode 100644 main/minimime/mm_context.c create mode 100644 main/minimime/mm_envelope.c create mode 100644 main/minimime/mm_error.c create mode 100644 main/minimime/mm_header.c create mode 100644 main/minimime/mm_init.c create mode 100644 main/minimime/mm_internal.h create mode 100644 main/minimime/mm_mem.c create mode 100644 main/minimime/mm_mem.h create mode 100644 main/minimime/mm_mimepart.c create mode 100644 main/minimime/mm_mimeutil.c create mode 100644 main/minimime/mm_param.c create mode 100644 main/minimime/mm_parse.c create mode 100644 main/minimime/mm_queue.h create mode 100644 main/minimime/mm_util.c create mode 100644 main/minimime/mm_util.h create mode 100644 main/minimime/mm_warnings.c create mode 100644 main/minimime/mytest_files/ast_postdata create mode 100644 main/minimime/mytest_files/ast_postdata2 create mode 100644 main/minimime/mytest_files/ast_postdata3.gz create mode 100644 main/minimime/mytest_files/mytest.c create mode 100644 main/minimime/strlcat.c create mode 100644 main/minimime/strlcpy.c create mode 100644 main/minimime/sys/CVS/Entries create mode 100644 main/minimime/sys/CVS/Repository create mode 100644 main/minimime/sys/CVS/Root create mode 100644 main/minimime/sys/mm_queue.h create mode 100755 main/minimime/test.sh create mode 100644 main/minimime/test/CVS/Entries create mode 100644 main/minimime/test/CVS/Repository create mode 100644 main/minimime/test/CVS/Root create mode 100644 main/minimime/tests/CVS/Entries create mode 100644 main/minimime/tests/CVS/Entries.Log create mode 100644 main/minimime/tests/CVS/Repository create mode 100644 main/minimime/tests/CVS/Root create mode 100644 main/minimime/tests/Makefile create mode 100644 main/minimime/tests/create.c create mode 100644 main/minimime/tests/messages/CVS/Entries create mode 100644 main/minimime/tests/messages/CVS/Repository create mode 100644 main/minimime/tests/messages/CVS/Root create mode 100644 main/minimime/tests/messages/test1.txt create mode 100644 main/minimime/tests/messages/test2.txt create mode 100644 main/minimime/tests/messages/test3.txt create mode 100644 main/minimime/tests/messages/test4.txt create mode 100644 main/minimime/tests/messages/test5.txt create mode 100644 main/minimime/tests/messages/test6.txt create mode 100644 main/minimime/tests/messages/test7.txt create mode 100644 main/minimime/tests/parse.c diff --git a/Makefile.moddir_rules b/Makefile.moddir_rules index d2dafe3294..1c78ebd459 100644 --- a/Makefile.moddir_rules +++ b/Makefile.moddir_rules @@ -12,7 +12,9 @@ # ifneq ($(findstring MALLOC_DEBUG,$(MENUSELECT_CFLAGS)),) + ifeq ($(findstring astmm.h,$(ASTCFLAGS)),) ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/astmm.h + endif endif ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),) diff --git a/configs/http.conf.sample b/configs/http.conf.sample index 19f96ca9ab..ebd09e79f5 100644 --- a/configs/http.conf.sample +++ b/configs/http.conf.sample @@ -48,3 +48,16 @@ bindaddr=127.0.0.1 ; To produce a certificate you can e.g. use openssl ; openssl req -new -x509 -days 365 -nodes -out /tmp/foo.pem -keyout /tmp/foo.pem ; +;prefix=asterisk + +; The post_mappings section maps URLs to real paths on the filesystem. If a +; POST is done from within an authenticated manager session to one of the +; configured POST mappings, then any files in the POST will be placed in the +; configured directory. +; +;[post_mappings] +; +; In this example, if the prefix option is set to "asterisk", then using the +; POST URL: /asterisk/uploads will put files in /var/lib/asterisk/uploads/. +;uploads = /var/lib/asterisk/uploads/ +; diff --git a/configure b/configure index 00dcbd3a41..108c6e428b 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac Revision: 58948 . +# From configure.ac Revision: 59203 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.60. # @@ -16007,7 +16007,9 @@ done -for ac_func in asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf + + +for ac_func in asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/configure.ac b/configure.ac index ddc70ed390..fe23adec17 100644 --- a/configure.ac +++ b/configure.ac @@ -275,7 +275,7 @@ AC_FUNC_STRNLEN AC_FUNC_STRTOD AC_FUNC_UTIME_NULL AC_FUNC_VPRINTF -AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf]) +AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf]) # https support (in main/http.c) uses funopen on BSD systems, # fopencookie on linux diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index e450ba93fe..ef6a76a490 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -462,6 +462,12 @@ /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H +/* Define to 1 if you have the `strlcat' function. */ +#undef HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#undef HAVE_STRLCPY + /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP diff --git a/include/asterisk/compat.h b/include/asterisk/compat.h index e02d3c7c13..838e24e472 100644 --- a/include/asterisk/compat.h +++ b/include/asterisk/compat.h @@ -61,6 +61,14 @@ int unsetenv(const char *name); int vasprintf(char **strp, const char *fmt, va_list ap); #endif +#ifndef HAVE_STRLCAT +size_t strlcat(char *dst, const char *src, size_t siz); +#endif + +#ifndef HAVE_STRLCPY +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif + #ifdef SOLARIS #define __BEGIN_DECLS #define __END_DECLS diff --git a/include/asterisk/manager.h b/include/asterisk/manager.h index 1cf03b5b56..8efcfba185 100644 --- a/include/asterisk/manager.h +++ b/include/asterisk/manager.h @@ -134,6 +134,22 @@ int ast_manager_register2( */ int ast_manager_unregister( char *action ); +/*! + * \brief Verify a session's read permissions against a permission mask. + * \param ident session identity + * \param perm permission mask to verify + * \returns 1 if the session has the permission mask capabilities, otherwise 0 + */ +int astman_verify_session_readpermissions(unsigned long ident, int perm); + +/*! + * \brief Verify a session's write permissions against a permission mask. + * \param ident session identity + * \param perm permission mask to verify + * \returns 1 if the session has the permission mask capabilities, otherwise 0 + */ +int astman_verify_session_writepermissions(unsigned long ident, int perm); + /*! External routines may send asterisk manager events this way */ /*! \param category Event category, matches manager authorization \param event Event name diff --git a/main/Makefile b/main/Makefile index 9e0f6f2356..f552fabda4 100644 --- a/main/Makefile +++ b/main/Makefile @@ -133,7 +133,10 @@ else H323LDLIBS= endif -asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) +minimime/libmmime.a: + @cd minimime && $(MAKE) libmmime.a + +asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a minimime/libmmime.a $(AST_EMBED_LDSCRIPTS) @$(CC) -c -o buildinfo.o $(ASTCFLAGS) buildinfo.c $(ECHO_PREFIX) echo " [LD] $^ -> $@" $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) @@ -145,3 +148,6 @@ clean:: @if [ -f editline/Makefile ]; then $(MAKE) -C editline distclean ; fi @$(MAKE) -C db1-ast clean @$(MAKE) -C stdtime clean + @$(MAKE) -C minimime clean + +.PHONY: minimime/libmmime.a diff --git a/main/http.c b/main/http.c index 4fbe9bded3..0dee18faaa 100644 --- a/main/http.c +++ b/main/http.c @@ -21,8 +21,9 @@ * \brief http server for AMI access * * \author Mark Spencer <markster@digium.com> - * This program implements a tiny http server supporting the "get" method - * only and was inspired by micro-httpd by Jef Poskanzer + * + * This program implements a tiny http server + * and was inspired by micro-httpd by Jef Poskanzer * * \ref AstHTTP - AMI over the http protocol */ @@ -47,6 +48,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include <fcntl.h> #include <pthread.h> +#include "minimime/mm.h" + #include "asterisk/cli.h" #include "asterisk/http.h" #include "asterisk/utils.h" @@ -55,6 +58,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/config.h" #include "asterisk/stringfields.h" #include "asterisk/version.h" +#include "asterisk/manager.h" #define MAX_PREFIX 80 #define DEFAULT_PREFIX "/asterisk" @@ -93,6 +97,14 @@ static struct server_args https_desc = { static AST_RWLIST_HEAD_STATIC(uris, ast_http_uri); /*!< list of supported handlers */ +struct ast_http_post_mapping { + AST_RWLIST_ENTRY(ast_http_post_mapping) entry; + char *from; + char *to; +}; + +static AST_RWLIST_HEAD_STATIC(post_mappings, ast_http_post_mapping); + /* all valid URIs must be prepended by the string in prefix. */ static char prefix[MAX_PREFIX]; static int enablestatic; @@ -329,6 +341,225 @@ void ast_http_uri_unlink(struct ast_http_uri *urih) AST_RWLIST_UNLOCK(&uris); } +/*! \note This assumes that the post_mappings list is locked */ +static struct ast_http_post_mapping *find_post_mapping(const char *uri) +{ + struct ast_http_post_mapping *post_map; + + if (!ast_strlen_zero(prefix) && strncmp(prefix, uri, strlen(prefix))) { + ast_log(LOG_DEBUG, "URI %s does not have prefix %s\n", uri, prefix); + return NULL; + } + + uri += strlen(prefix); + if (*uri == '/') + uri++; + + AST_RWLIST_TRAVERSE(&post_mappings, post_map, entry) { + if (!strcmp(uri, post_map->from)) + return post_map; + } + + return NULL; +} + +static int get_filename(struct mm_mimepart *part, char *fn, size_t fn_len) +{ + const char *filename; + + filename = mm_content_getdispositionparambyname(part->type, "filename"); + + if (ast_strlen_zero(filename)) + return -1; + + ast_copy_string(fn, filename, fn_len); + + return 0; +} + +static void post_raw(struct mm_mimepart *part, const char *post_dir, const char *fn) +{ + char filename[PATH_MAX]; + FILE *f; + const char *body; + size_t body_len; + + snprintf(filename, sizeof(filename), "%s/%s", post_dir, fn); + + if (option_debug) + ast_log(LOG_DEBUG, "Posting raw data to %s\n", filename); + + if (!(f = fopen(filename, "w"))) { + ast_log(LOG_WARNING, "Unable to open %s for writing file from a POST!\n", filename); + return; + } + + if (!(body = mm_mimepart_getbody(part, 0))) { + if (option_debug) + ast_log(LOG_DEBUG, "Couldn't get the mimepart body\n"); + fclose(f); + return; + } + body_len = mm_mimepart_getlength(part); + + if (option_debug) + ast_log(LOG_DEBUG, "Body length is %ld\n", body_len); + + fwrite(body, 1, body_len, f); + + fclose(f); +} + +static struct ast_str *handle_post(struct server_instance *ser, char *uri, + int *status, char **title, int *contentlength, struct ast_variable *headers, + struct ast_variable *cookies) +{ + char buf; + FILE *f; + size_t res; + struct ast_variable *var; + int content_len = 0; + MM_CTX *ctx; + int mm_res, i; + struct ast_http_post_mapping *post_map; + const char *post_dir; + unsigned long ident = 0; + + for (var = cookies; var; var = var->next) { + if (strcasecmp(var->name, "mansession_id")) + continue; + + if (sscanf(var->value, "%lx", &ident) != 1) { + *status = 400; + *title = ast_strdup("Bad Request"); + return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request."); + } + + if (!astman_verify_session_writepermissions(ident, EVENT_FLAG_CONFIG)) { + *status = 401; + *title = ast_strdup("Unauthorized"); + return ast_http_error(401, "Unauthorized", NULL, "You are not authorized to make this request."); + } + + break; + } + if (!var) { + *status = 401; + *title = ast_strdup("Unauthorized"); + return ast_http_error(401, "Unauthorized", NULL, "You are not authorized to make this request."); + } + + if (!(f = tmpfile())) + return NULL; + + for (var = headers; var; var = var->next) { + if (!strcasecmp(var->name, "Content-Length")) { + if ((sscanf(var->value, "%u", &content_len)) != 1) { + ast_log(LOG_ERROR, "Invalid Content-Length in POST request!\n"); + fclose(f); + return NULL; + } + if (option_debug) + ast_log(LOG_DEBUG, "Got a Content-Length of %d\n", content_len); + } else if (!strcasecmp(var->name, "Content-Type")) + fprintf(f, "Content-Type: %s\r\n\r\n", var->value); + } + + while ((res = fread(&buf, 1, 1, ser->f))) { + fwrite(&buf, 1, 1, f); + content_len--; + if (!content_len) + break; + } + + if (fseek(f, SEEK_SET, 0)) { + if (option_debug) + ast_log(LOG_DEBUG, "Failed to seek temp file back to beginning.\n"); + fclose(f); + return NULL; + } + + AST_RWLIST_RDLOCK(&post_mappings); + if (!(post_map = find_post_mapping(uri))) { + if (option_debug) + ast_log(LOG_DEBUG, "%s is not a valid URI for POST\n", uri); + AST_RWLIST_UNLOCK(&post_mappings); + fclose(f); + *status = 404; + *title = ast_strdup("Not Found"); + return ast_http_error(404, "Not Found", NULL, "The requested URL was not found on this server."); + } + post_dir = ast_strdupa(post_map->to); + post_map = NULL; + AST_RWLIST_UNLOCK(&post_mappings); + + if (option_debug) + ast_log(LOG_DEBUG, "Going to post files to dir %s\n", post_dir); + + if (!(ctx = mm_context_new())) { + fclose(f); + return NULL; + } + + mm_res = mm_parse_fileptr(ctx, f, MM_PARSE_LOOSE, 0); + fclose(f); + if (mm_res == -1) { + ast_log(LOG_ERROR, "Error parsing MIME data\n"); + mm_context_free(ctx); + *status = 400; + *title = ast_strdup("Bad Request"); + return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request."); + } + + mm_res = mm_context_countparts(ctx); + if (!mm_res) { + ast_log(LOG_ERROR, "Invalid MIME data, found no parts!\n"); + mm_context_free(ctx); + *status = 400; + *title = ast_strdup("Bad Request"); + return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request."); + } + + if (option_debug) { + if (mm_context_iscomposite(ctx)) + ast_log(LOG_DEBUG, "Found %d MIME parts\n", mm_res - 1); + else + ast_log(LOG_DEBUG, "We have a flat (not multi-part) message\n"); + } + + for (i = 1; i < mm_res; i++) { + struct mm_mimepart *part; + char fn[PATH_MAX]; + + if (!(part = mm_context_getpart(ctx, i))) { + if (option_debug) + ast_log(LOG_DEBUG, "Failed to get mime part num %d\n", i); + continue; + } + + if (get_filename(part, fn, sizeof(fn))) { + if (option_debug) + ast_log(LOG_DEBUG, "Failed to retrieve a filename for part num %d\n", i); + continue; + } + + if (!part->type) { + if (option_debug) + ast_log(LOG_DEBUG, "This part has no content struct?\n"); + continue; + } + + /* XXX This assumes the MIME part body is not encoded! */ + post_raw(part, post_dir, fn); + } + + mm_context_free(ctx); + + *status = 200; + *title = ast_strdup("OK"); + return ast_http_error(200, "OK", NULL, "File successfully uploaded."); +} + static struct ast_str *handle_uri(struct sockaddr_in *sin, char *uri, int *status, char **title, int *contentlength, struct ast_variable **cookies) { char *c; @@ -520,7 +751,7 @@ static void *httpd_helper_thread(void *data) char buf[4096]; char cookie[4096]; struct server_instance *ser = data; - struct ast_variable *var, *prev=NULL, *vars=NULL; + struct ast_variable *var, *prev=NULL, *vars=NULL, *headers = NULL; char *uri, *title=NULL; int status = 200, contentlength = 0; struct ast_str *out = NULL; @@ -549,8 +780,23 @@ static void *httpd_helper_thread(void *data) ast_trim_blanks(cookie); if (ast_strlen_zero(cookie)) break; - if (strncasecmp(cookie, "Cookie: ", 8)) + if (strncasecmp(cookie, "Cookie: ", 8)) { + char *name, *value; + + value = ast_strdupa(cookie); + name = strsep(&value, ":"); + if (!value) + continue; + value = ast_skip_blanks(value); + if (ast_strlen_zero(value)) + continue; + var = ast_variable_new(name, value); + if (!var) + continue; + var->next = headers; + headers = var; continue; + } /* TODO - The cookie parsing code below seems to work in IE6 and FireFox 1.5. However, it is not entirely @@ -596,6 +842,8 @@ static void *httpd_helper_thread(void *data) if (!*uri) out = ast_http_error(400, "Bad Request", NULL, "Invalid Request"); + else if (!strcasecmp(buf, "post")) + out = handle_post(ser, uri, &status, &title, &contentlength, headers, vars); else if (strcasecmp(buf, "get")) out = ast_http_error(501, "Not Implemented", NULL, "Attempt to use unimplemented / unsupported method"); @@ -851,6 +1099,47 @@ static void add_redirect(const char *value) AST_RWLIST_UNLOCK(&uri_redirects); } +static void destroy_post_mapping(struct ast_http_post_mapping *post_map) +{ + if (post_map->from) + free(post_map->from); + if (post_map->to) + free(post_map->to); + free(post_map); +} + +static void destroy_post_mappings(void) +{ + struct ast_http_post_mapping *post_map; + + AST_RWLIST_WRLOCK(&post_mappings); + while ((post_map = AST_RWLIST_REMOVE_HEAD(&post_mappings, entry))) + destroy_post_mapping(post_map); + AST_RWLIST_UNLOCK(&post_mappings); +} + +static void add_post_mapping(const char *from, const char *to) +{ + struct ast_http_post_mapping *post_map; + + if (!(post_map = ast_calloc(1, sizeof(*post_map)))) + return; + + if (!(post_map->from = ast_strdup(from))) { + destroy_post_mapping(post_map); + return; + } + + if (!(post_map->to = ast_strdup(to))) { + destroy_post_mapping(post_map); + return; + } + + AST_RWLIST_WRLOCK(&post_mappings); + AST_RWLIST_INSERT_TAIL(&post_mappings, post_map, entry); + AST_RWLIST_UNLOCK(&post_mappings); +} + static int __ast_http_load(int reload) { struct ast_config *cfg; @@ -869,6 +1158,7 @@ static int __ast_http_load(int reload) memset(&https_desc.sin, 0, sizeof(https_desc.sin)); https_desc.sin.sin_port = htons(8089); + strcpy(newprefix, DEFAULT_PREFIX); http_tls_cfg.enabled = 0; @@ -884,6 +1174,8 @@ static int __ast_http_load(int reload) free(redirect); AST_RWLIST_UNLOCK(&uri_redirects); + destroy_post_mappings(); + cfg = ast_config_load("http.conf"); if (cfg) { v = ast_variable_browse(cfg, "general"); @@ -931,6 +1223,10 @@ static int __ast_http_load(int reload) ast_log(LOG_WARNING, "Ignoring unknown option '%s' in http.conf\n", v->name); } } + + for (v = ast_variable_browse(cfg, "post_mappings"); v; v = v->next) + add_post_mapping(v->name, v->value); + ast_config_destroy(cfg); } if (!have_sslbindaddr) @@ -943,6 +1239,7 @@ static int __ast_http_load(int reload) server_start(&http_desc); if (ssl_setup(https_desc.tls_cfg)) server_start(&https_desc); + return 0; } @@ -950,6 +1247,7 @@ static int handle_show_http(int fd, int argc, char *argv[]) { struct ast_http_uri *urih; struct http_uri_redirect *redirect; + struct ast_http_post_mapping *post_map; if (argc != 3) return RESULT_SHOWUSAGE; @@ -986,6 +1284,14 @@ static int handle_show_http(int fd, int argc, char *argv[]) ast_cli(fd, " None.\n"); AST_RWLIST_UNLOCK(&uri_redirects); + + ast_cli(fd, "\nPOST mappings:\n"); + AST_RWLIST_RDLOCK(&post_mappings); + AST_LIST_TRAVERSE(&post_mappings, post_map, entry) + ast_cli(fd, "%s/%s => %s\n", prefix, post_map->from, post_map->to); + ast_cli(fd, "%s\n", AST_LIST_EMPTY(&post_mappings) ? "None.\n" : ""); + AST_RWLIST_UNLOCK(&post_mappings); + return RESULT_SUCCESS; } @@ -1006,8 +1312,12 @@ static struct ast_cli_entry cli_http[] = { int ast_http_init(void) { + mm_library_init(); + mm_codec_registerdefaultcodecs(); + ast_http_uri_link(&statusuri); ast_http_uri_link(&staticuri); ast_cli_register_multiple(cli_http, sizeof(cli_http) / sizeof(struct ast_cli_entry)); + return __ast_http_load(0); } diff --git a/main/manager.c b/main/manager.c index 116b77a37b..891df4c827 100644 --- a/main/manager.c +++ b/main/manager.c @@ -2592,6 +2592,44 @@ static struct mansession *find_session(unsigned long ident) return s; } +int astman_verify_session_readpermissions(unsigned long ident, int perm) +{ + int result = 0; + struct mansession *s; + + AST_LIST_LOCK(&sessions); + AST_LIST_TRAVERSE(&sessions, s, list) { + ast_mutex_lock(&s->__lock); + if ((s->managerid == ident) && (s->readperm & perm)) { + result = 1; + ast_mutex_unlock(&s->__lock); + break; + } + ast_mutex_unlock(&s->__lock); + } + AST_LIST_UNLOCK(&sessions); + return result; +} + +int astman_verify_session_writepermissions(unsigned long ident, int perm) +{ + int result = 0; + struct mansession *s; + + AST_LIST_LOCK(&sessions); + AST_LIST_TRAVERSE(&sessions, s, list) { + ast_mutex_lock(&s->__lock); + if ((s->managerid == ident) && (s->writeperm & perm)) { + result = 1; + ast_mutex_unlock(&s->__lock); + break; + } + ast_mutex_unlock(&s->__lock); + } + AST_LIST_UNLOCK(&sessions); + return result; +} + /* * convert to xml with various conversion: * mode & 1 -> lowercase; diff --git a/main/minimime/.cvsignore b/main/minimime/.cvsignore new file mode 100644 index 0000000000..f5e1bf873b --- /dev/null +++ b/main/minimime/.cvsignore @@ -0,0 +1,4 @@ +minimime +*.so.* +*.o +*.swp diff --git a/main/minimime/Doxyfile b/main/minimime/Doxyfile new file mode 100644 index 0000000000..5ad5e11ec7 --- /dev/null +++ b/main/minimime/Doxyfile @@ -0,0 +1,1098 @@ +# Doxyfile 1.3.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = MiniMIME + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = mm-docs + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is used +# as the annotated text. Otherwise, the brief description is used as-is. If left +# blank, the following values are used ("$name" is automatically replaced with the +# name of the entity): "The $name class" "The $name widget" "The $name file" +# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. It is allowed to use relative paths in the argument list. + +STRIP_FROM_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superseded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/main/minimime/Make.conf b/main/minimime/Make.conf new file mode 100644 index 0000000000..de149932a0 --- /dev/null +++ b/main/minimime/Make.conf @@ -0,0 +1,7 @@ +CC=gcc +PREFIX=/usr +LIBNAME=libmmime.so.0.0 +HAVE_STRLCAT= +HAVE_STRLCPY= +INSTALL=/usr/bin/install +HAVE_DEBUG=1 diff --git a/main/minimime/Makefile b/main/minimime/Makefile new file mode 100644 index 0000000000..4351afd2f0 --- /dev/null +++ b/main/minimime/Makefile @@ -0,0 +1,60 @@ +# +# Asterisk -- A telephony toolkit for Linux. +# +# Makefile for resource modules +# +# Copyright (C) 2007, Digium, Inc. +# +# This program is free software, distributed under the terms of +# the GNU General Public License +# + +-include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps + +include $(ASTTOPDIR)/Makefile.moddir_rules + +LIBMMIME:=libmmime.a +MM_SRCS= \ + mimeparser.tab.c \ + mimeparser.yy.c \ + mm_init.c \ + mm_base64.c \ + mm_codecs.c \ + mm_contenttype.c \ + mm_context.c \ + mm_envelope.c \ + mm_error.c \ + mm_header.c \ + mm_mem.c \ + mm_mimepart.c \ + mm_mimeutil.c \ + mm_param.c \ + mm_parse.c \ + mm_util.c + +MM_OBJS:=$(MM_SRCS:%.c=%.o) +MM_HDRS:=mm.h mm_util.h + +ASTCFLAGS:=$(filter-out -Werror -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes,$(ASTCFLAGS)) + +all: $(LIBMMIME) + +$(LIBMMIME): $(MM_OBJS) + $(ECHO_PREFIX) echo " [AR] $^ -> $@" + $(CMD_PREFIX) $(AR) cr $@ $^ + $(CMD_PREFIX) $(RANLIB) $@ + +#mimeparser.yy.c: mimeparser.l +# flex -Pmimeparser_yy -omimeparser.yy.c mimeparser.l + +#mimeparser.tab.c: mimeparser.y +# bison -d -pmimeparser_yy -omimeparser.tab.c mimeparser.y + +clean:: + rm -f $(LIBMMIME) *.o + +.PHONY: clean all + +ifneq ($(wildcard .*.d),) + include .*.d +endif diff --git a/main/minimime/mimeparser.h b/main/minimime/mimeparser.h new file mode 100644 index 0000000000..3d8da816f7 --- /dev/null +++ b/main/minimime/mimeparser.h @@ -0,0 +1,67 @@ +#ifndef _MIMEPARSER_H_INCLUDED +#define _MIMEPARSER_H_INCLUDED + +#include "mm.h" + +struct s_position +{ + size_t opaque_start; + size_t start; + size_t end; +}; + +struct lexer_state +{ + int header_state; + int lineno; + size_t current_pos; + int condition; + + int is_envelope; + + size_t message_len; + size_t buffer_length; + + /* temporary marker variables */ + size_t body_opaque_start; + size_t body_start; + size_t body_end; + size_t preamble_start; + size_t preamble_end; + size_t postamble_start; + size_t postamble_end; + + char *boundary_string; + char *endboundary_string; + char *message_buffer; +}; + + +struct parser_state +{ + MM_CTX *ctx; + struct mm_mimepart *envelope; + struct mm_mimepart *temppart; + struct mm_mimepart *current_mimepart; + struct mm_content *ctype; + int parsemode; + int have_contenttype; + int debug; + int mime_parts; + struct lexer_state lstate; +}; + + +#include "mimeparser.tab.h" + +/** + * Prototypes for functions used by the parser routines + */ +int count_lines(char *); +int dprintf2(struct parser_state *, const char *, ...); +int mimeparser_yyparse(struct parser_state *, void *); +int mimeparser_yylex(YYSTYPE *, void *); +int mimeparser_yyerror(struct parser_state *, void *, const char *); + + +#endif /* ! _MIMEPARSER_H_INCLUDED */ diff --git a/main/minimime/mimeparser.l b/main/minimime/mimeparser.l new file mode 100644 index 0000000000..d45295f131 --- /dev/null +++ b/main/minimime/mimeparser.l @@ -0,0 +1,483 @@ +%{ +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/** + * This is a lexer file for parsing MIME compatible messages. It is intended + * to satisfy at least RFC 2045 (Format of Internet Message Bodies). It still + * has quite a few problems: + * + * - The parsing could probably be done in a more elegant way + * - I don't know what performance impact REJECT has on the parser + */ +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> + +#include "mimeparser.h" +#include "mimeparser.tab.h" + +#define NAMEOF(v) #v +/* BC() is a debug wrapper for lex' BEGIN() macro */ +#define BC(x) do { \ + struct lexer_state *lstate = yyget_extra(yyscanner); \ + BEGIN(x); \ + lstate->condition = x; \ +} while(0); + +#define ZERO(x) memset(x, '\0', sizeof(x)) + +#define PREALLOC_BUFFER 100000 +#undef YY_BUF_SIZE +#define YY_BUF_SIZE 65536 + +enum header_states +{ + STATE_MAIL = 0, + STATE_CTYPE, + STATE_CDISP, + STATE_CENC, + STATE_MIME +}; + + + +%} + +%option reentrant +%option yylineno +%option bison-bridge + +%s headers +%s header +%s headervalue +%s tspecialvalue +%s comment +%s body +%s postamble +%s preamble +%s boundary +%s endboundary +%s endoffile + +STRING [a-zA-Z0-9\-\.\_] +TSPECIAL [a-zA-Z0-9)(<>@,;:/\-.=_\+'? ] +TSPECIAL_LITE [a-zA-Z0-9)(<>@,-._+'?\[\]] + +%% + +<INITIAL,headers>^[a-zA-Z]+[a-zA-Z0-9\-\_]* { + yylval_param->string=strdup(yytext); + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; + BC(header); + + /* Depending on what header we are processing, we enter a different + * state and return a different value. + */ + if (!strcasecmp(yytext, "Content-Type")) { + lstate->header_state = STATE_CTYPE; + return CONTENTTYPE_HEADER; + } else if (!strcasecmp(yytext, "Content-Transfer-Encoding")) { + lstate->header_state = STATE_CENC; + return CONTENTENCODING_HEADER; + } else if (!strcasecmp(yytext, "Content-Disposition")) { + lstate->header_state = STATE_CDISP; + return CONTENTDISPOSITION_HEADER; + } else if (!strcasecmp(yytext, "MIME-Version")) { + lstate->header_state = STATE_MAIL; + return MIMEVERSION_HEADER; + } else { + lstate->header_state = STATE_MAIL; + return MAIL_HEADER; + } +} + +<INITIAL,headers>. { + struct lexer_state *lstate = yyget_extra(yyscanner); + /* dprintf2("Unknown header char: %c\n", *yytext); */ + lstate->current_pos += yyleng; + return ANY; +} + +<headers>^(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->lineno++; + + lstate->current_pos += yyleng; + + /* This marks the end of headers. Depending on whether we are in the + * envelope currently we need to parse either a body or the preamble + * now. + */ + if (lstate->is_envelope == 0 || lstate->boundary_string == NULL) { + BC(body); + lstate->body_start = lstate->current_pos; + } else { + lstate->is_envelope = 0; + lstate->preamble_start = lstate->current_pos; + BC(preamble); + } + + return ENDOFHEADERS; +} + +<header>\: { + struct lexer_state *lstate = yyget_extra(yyscanner); + BC(headervalue); + lstate->current_pos += yyleng; + return COLON; +} + +<header>(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + BC(headers); + /* dprintf2("Invalid header, returning EOL\n"); */ + lstate->current_pos += yyleng; + return EOL; +} + +<headervalue>(\n|\r\n)[\ \t]+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + +<headervalue>.+|(.+(\n|\r\n)[\ \t]+.+)+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + if (lstate->header_state != STATE_MAIL && lstate->header_state != STATE_CENC) { + REJECT; + } + lstate->current_pos += yyleng; + while (*yytext && isspace(*yytext)) yytext++; + /* Do we actually have a header value? */ + if (*yytext == '\0') { + yylval_param->string = strdup(""); + } else { + yylval_param->string=strdup(yytext); + lstate->lineno += count_lines(yytext); + } + return WORD; +} + +<headervalue,tspecialvalue>(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + /* marks the end of one header line */ + lstate->lineno++; + BC(headers); + lstate->current_pos += yyleng; + return EOL; +} + +<headervalue>;|;(\r\n|\n)[\ \t]+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->lineno += count_lines(yytext); + lstate->current_pos += yyleng; + return SEMICOLON; +} + +<headervalue>\= { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; + return EQUAL; +} + +<headervalue>\" { + struct lexer_state *lstate = yyget_extra(yyscanner); + BC(tspecialvalue); + lstate->current_pos += yyleng; + return *yytext; +} + +<headervalue>{STRING}+|{TSPECIAL_LITE}+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + yylval_param->string=strdup(yytext); + lstate->lineno += count_lines(yytext); + lstate->current_pos += yyleng; + return WORD; +} + +<headervalue>[\ |\t]+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + +<tspecialvalue>{TSPECIAL}+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->lineno += count_lines(yytext); + yylval_param->string=strdup(yytext); + lstate->current_pos += yyleng; + return TSPECIAL; +} + +<tspecialvalue>\" { + struct lexer_state *lstate = yyget_extra(yyscanner); + BC(headervalue); + lstate->current_pos += yyleng; + return *yytext; +} + +<body>^\-\-{TSPECIAL}+\-\- { + struct lexer_state *lstate = yyget_extra(yyscanner); + /** + * Make sure we only catch matching boundaries, and not other lines + * that begin and end with two dashes. If we have catched a valid + * end boundary, which actually ends a body, we save the current + * position, put the token back on the input stream and let the + * endboundary condition parse the actual token. + */ + if (lstate->endboundary_string != NULL) { + if (strcmp(lstate->endboundary_string, yytext)) { + /* dprintf2("YYTEXT != end_boundary: '%s'\n", yytext); */ + REJECT; + } else { + lstate->current_pos += yyleng; + /* dprintf2("YYTEXT == lstate->end_boundary: '%s'\n", yytext); */ + if (lstate->body_start) { + yylval_param->position.opaque_start = + lstate->body_opaque_start; + yylval_param->position.start = lstate->body_start; + yylval_param->position.end = lstate->current_pos - yyleng; + lstate->body_opaque_start = 0; + lstate->body_start = 0; + lstate->body_end = 0; + yyless(0); + BC(endboundary); + return BODY; + } + } + } else { + } + + REJECT; +} + +<body,preamble>^\-\-{TSPECIAL}+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + /** + * Make sure we only catch matching boundaries, and not other lines + * that begin with two dashes. + */ + if (lstate->boundary_string != NULL) { + if (strcmp(lstate->boundary_string, yytext)) { + /* dprintf2("YYTEXT != boundary: '%s'\n", yytext);*/ + REJECT; + } else { + /* dprintf2("YYTEXT == boundary: '%s'\n", yytext);*/ + if (lstate->body_start) { + yylval_param->position.opaque_start = lstate->body_opaque_start; + yylval_param->position.start = lstate->body_start; + yylval_param->position.end = lstate->current_pos; + lstate->body_opaque_start = 0; + lstate->body_start = 0; + lstate->body_end = 0; + yyless(0); + BC(boundary); + return BODY; + } else if (lstate->preamble_start) { + yylval_param->position.start = lstate->preamble_start; + yylval_param->position.end = lstate->current_pos; + lstate->preamble_start = lstate->preamble_end = 0; + yyless(0); + BC(boundary); + return PREAMBLE; + } else { + BC(boundary); + yylval_param->string = strdup(yytext); + lstate->current_pos += yyleng; + return(BOUNDARY); + } + } + } else { + } + + REJECT; +} + +<body>(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; + lstate->lineno++; +} + +<body>\r { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; + /* dprintf2("stray CR in body...\n"); */ +} + +<body>[^\r\n]+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + +<body><<EOF>> { + struct lexer_state *lstate = yyget_extra(yyscanner); + if (lstate->boundary_string == NULL && lstate->body_start) { + yylval_param->position.opaque_start = 0; + yylval_param->position.start = lstate->body_start; + yylval_param->position.end = lstate->current_pos; + lstate->body_start = 0; + return BODY; + } else if (lstate->body_start) { + return POSTAMBLE; + } + yyterminate(); +} + +<preamble,postamble>(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + /* dprintf2("Preamble CR/LF at line %d\n", lineno); */ + lstate->lineno++; + lstate->current_pos += yyleng; +} + +<boundary>[^\r\n]+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + yylval_param->string = strdup(yytext); + lstate->current_pos += yyleng; + return BOUNDARY; +} + +<endboundary>[^\r\n]+ { + struct lexer_state *lstate = yyget_extra(yyscanner); + yylval_param->string = strdup(yytext); + lstate->current_pos += yyleng; + return ENDBOUNDARY; +} + +<boundary>(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + BC(headers); + lstate->lineno++; + lstate->current_pos += yyleng; + lstate->body_opaque_start = lstate->current_pos; + return EOL; +} + +<endboundary>(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + BC(postamble); + lstate->lineno++; + lstate->current_pos += yyleng; +} + +<preamble>. { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + + +<postamble>. { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + +(\r\n|\n) { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->lineno++; + lstate->current_pos += yyleng; + return EOL; +} + +. { + struct lexer_state *lstate = yyget_extra(yyscanner); + lstate->current_pos += yyleng; + return((int)*yytext); +} + + +%% + +void reset_lexer_state(void *yyscanner, struct parser_state *pstate) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + struct lexer_state *lstate = &(pstate->lstate); + + yyset_extra((void*)lstate, yyscanner); + BEGIN(0); + lstate->header_state = STATE_MAIL; + lstate->lineno = 0; + lstate->current_pos = 1; + lstate->condition = 0; + + lstate->is_envelope = 1; + + lstate->message_len = 0; + lstate->buffer_length = 0; + + /* temporary marker variables */ + lstate->body_opaque_start = 0; + lstate->body_start = 0; + lstate->body_end = 0; + lstate->preamble_start = 0; + lstate->preamble_end = 0; + lstate->postamble_start = 0; + lstate->postamble_end = 0; +} + +void +PARSER_setbuffer(char *string, yyscan_t scanner) +{ + struct lexer_state *lstate = yyget_extra(scanner); + lstate->message_buffer = string; + yy_scan_string(string, scanner); +} + +void +PARSER_setfp(FILE *fp, yyscan_t yyscanner) +{ + /* looks like a bug in bison 2.2a -- the wrong code is generated for yyset_in !! */ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yyin_r = fp; + + if (0) { + /* This is just to make a compiler warning go away */ + yyunput(0, NULL, yyscanner); + } +} + +/** + * Counts how many lines a given string represents in the message (in case of + * folded header values, for example, or a message body). + */ +int +count_lines(char *txt) +{ + char *o; + int line; + + line = 0; + + for (o = txt; *o != '\0'; o++) + if (*o == '\n') + line++; + + return line; +} diff --git a/main/minimime/mimeparser.tab.c b/main/minimime/mimeparser.tab.c new file mode 100644 index 0000000000..509fa4d2da --- /dev/null +++ b/main/minimime/mimeparser.tab.c @@ -0,0 +1,2341 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse mimeparser_yyparse +#define yylex mimeparser_yylex +#define yyerror mimeparser_yyerror +#define yylval mimeparser_yylval +#define yychar mimeparser_yychar +#define yydebug mimeparser_yydebug +#define yynerrs mimeparser_yynerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ANY = 258, + COLON = 259, + DASH = 260, + DQUOTE = 261, + ENDOFHEADERS = 262, + EOL = 263, + EOM = 264, + EQUAL = 265, + MIMEVERSION_HEADER = 266, + SEMICOLON = 267, + CONTENTDISPOSITION_HEADER = 268, + CONTENTENCODING_HEADER = 269, + CONTENTTYPE_HEADER = 270, + MAIL_HEADER = 271, + HEADERVALUE = 272, + BOUNDARY = 273, + ENDBOUNDARY = 274, + CONTENTTYPE_VALUE = 275, + TSPECIAL = 276, + WORD = 277, + BODY = 278, + PREAMBLE = 279, + POSTAMBLE = 280 + }; +#endif +/* Tokens. */ +#define ANY 258 +#define COLON 259 +#define DASH 260 +#define DQUOTE 261 +#define ENDOFHEADERS 262 +#define EOL 263 +#define EOM 264 +#define EQUAL 265 +#define MIMEVERSION_HEADER 266 +#define SEMICOLON 267 +#define CONTENTDISPOSITION_HEADER 268 +#define CONTENTENCODING_HEADER 269 +#define CONTENTTYPE_HEADER 270 +#define MAIL_HEADER 271 +#define HEADERVALUE 272 +#define BOUNDARY 273 +#define ENDBOUNDARY 274 +#define CONTENTTYPE_VALUE 275 +#define TSPECIAL 276 +#define WORD 277 +#define BODY 278 +#define PREAMBLE 279 +#define POSTAMBLE 280 + + + + +/* Copy the first part of user declarations. */ +#line 1 "mimeparser.y" + +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/** + * These are the grammatic definitions in yacc syntax to parse MIME conform + * messages. + * + * TODO: + * - honour parse flags passed to us (partly done) + * - parse Content-Disposition header (partly done) + * - parse Content-Encoding header + */ +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> +#include <errno.h> + +#include "mimeparser.h" +#include "mm.h" +#include "mm_internal.h" + +int set_boundary(char *,struct parser_state *); +int mimeparser_yywrap(void); +void reset_environ(struct parser_state *pstate); +int PARSER_initialize(struct parser_state *pstate, void *yyscanner); + +typedef void *yyscan_t; + +static char *PARSE_readmessagepart(size_t, size_t, size_t, size_t *,yyscan_t, struct parser_state *); +FILE *mimeparser_yyget_in (yyscan_t yyscanner ); + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 69 "mimeparser.y" +{ + int number; + char *string; + struct s_position position; +} +/* Line 193 of yacc.c. */ +#line 222 "mimeparser.tab.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 235 "mimeparser.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 26 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 61 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 28 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 29 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 50 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 83 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 280 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 27, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 26, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 5, 7, 8, 15, 18, 21, 23, + 25, 27, 28, 30, 31, 34, 36, 40, 42, 44, + 46, 48, 50, 52, 57, 61, 66, 72, 77, 83, + 85, 90, 95, 98, 101, 103, 107, 111, 114, 116, + 120, 123, 125, 129, 133, 135, 137, 141, 143, 146, + 148 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 29, 0, -1, 30, -1, 32, -1, -1, 33, 34, + 31, 36, 55, 35, -1, 33, 56, -1, 38, 33, + -1, 53, -1, 38, -1, 24, -1, -1, 25, -1, + -1, 36, 37, -1, 37, -1, 54, 33, 56, -1, + 39, -1, 40, -1, 41, -1, 43, -1, 44, -1, + 45, -1, 16, 4, 22, 8, -1, 16, 4, 8, + -1, 15, 4, 47, 8, -1, 15, 4, 47, 48, + 8, -1, 13, 4, 42, 8, -1, 13, 4, 42, + 49, 8, -1, 22, -1, 14, 4, 22, 8, -1, + 11, 4, 22, 8, -1, 46, 8, -1, 46, 3, + -1, 3, -1, 22, 26, 22, -1, 12, 50, 48, + -1, 12, 50, -1, 12, -1, 12, 51, 49, -1, + 12, 51, -1, 12, -1, 22, 10, 52, -1, 22, + 10, 52, -1, 22, -1, 21, -1, 27, 21, 27, + -1, 7, -1, 18, 8, -1, 19, -1, 23, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 114, 114, 116, 121, 120, 133, 141, 143, 167, + 171, 186, 190, 193, 197, 199, 203, 218, 220, 230, + 232, 234, 236, 250, 257, 276, 284, 294, 300, 308, + 331, 338, 345, 349, 351, 355, 364, 366, 368, 382, + 384, 386, 400, 431, 445, 451, 466, 474, 481, 500, + 519 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "ANY", "COLON", "DASH", "DQUOTE", + "ENDOFHEADERS", "EOL", "EOM", "EQUAL", "MIMEVERSION_HEADER", "SEMICOLON", + "CONTENTDISPOSITION_HEADER", "CONTENTENCODING_HEADER", + "CONTENTTYPE_HEADER", "MAIL_HEADER", "HEADERVALUE", "BOUNDARY", + "ENDBOUNDARY", "CONTENTTYPE_VALUE", "TSPECIAL", "WORD", "BODY", + "PREAMBLE", "POSTAMBLE", "'/'", "'\"'", "$accept", "message", + "multipart_message", "@1", "singlepart_message", "headers", "preamble", + "postamble", "mimeparts", "mimepart", "header", "mail_header", + "contenttype_header", "contentdisposition_header", "content_disposition", + "contentencoding_header", "mimeversion_header", "invalid_header", "any", + "mimetype", "contenttype_parameters", "content_disposition_parameters", + "contenttype_parameter", "content_disposition_parameter", + "contenttype_parameter_value", "end_headers", "boundary", "endboundary", + "body", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 47, 34 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 28, 29, 29, 31, 30, 32, 33, 33, 33, + 34, 34, 35, 35, 36, 36, 37, 38, 38, 38, + 38, 38, 38, 39, 39, 40, 40, 41, 41, 42, + 43, 44, 45, 46, 46, 47, 48, 48, 48, 49, + 49, 49, 50, 51, 52, 52, 52, 53, 54, 55, + 56 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 1, 0, 6, 2, 2, 1, 1, + 1, 0, 1, 0, 2, 1, 3, 1, 1, 1, + 1, 1, 1, 4, 3, 4, 5, 4, 5, 1, + 4, 4, 2, 2, 1, 3, 3, 2, 1, 3, + 2, 1, 3, 3, 1, 1, 3, 1, 2, 1, + 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 0, 34, 47, 0, 0, 0, 0, 0, 0, 2, + 3, 11, 9, 17, 18, 19, 20, 21, 22, 0, + 8, 0, 0, 0, 0, 0, 1, 50, 10, 4, + 6, 7, 33, 32, 0, 29, 0, 0, 0, 0, + 24, 0, 0, 31, 27, 41, 0, 30, 0, 25, + 38, 0, 23, 0, 0, 15, 0, 0, 40, 28, + 35, 0, 37, 26, 48, 49, 14, 13, 0, 0, + 39, 0, 36, 12, 5, 16, 45, 44, 0, 43, + 42, 0, 46 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 8, 9, 42, 10, 11, 29, 74, 54, 55, + 12, 13, 14, 15, 36, 16, 17, 18, 19, 39, + 51, 46, 62, 58, 79, 20, 56, 67, 30 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -20 +static const yytype_int8 yypact[] = +{ + 3, -20, -20, 17, 21, 22, 23, 24, 5, -20, + -20, -11, 3, -20, -20, -20, -20, -20, -20, 1, + -20, 7, 8, 9, 10, -7, -20, -20, -20, -20, + -20, -20, -20, -20, 25, -20, -1, 26, 11, 12, + -20, 27, 18, -20, -20, 16, 31, -20, 19, -20, + 20, 32, -20, 35, 4, -20, 3, 36, 33, -20, + -20, 37, 38, -20, -20, -20, -20, 28, 29, -19, + -20, -19, -20, -20, -20, -20, -20, -20, 30, -20, + -20, 34, -20 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -20, -20, -20, -20, -20, -12, -20, -20, -20, -6, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -13, -4, -20, -20, -16, -20, -20, -20, -10 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 31, 40, 76, 77, 32, 26, 1, 44, 78, 33, + 2, 45, 27, 28, 3, 41, 4, 5, 6, 7, + 49, 21, 53, 65, 50, 22, 23, 24, 25, 34, + 35, 37, 38, 43, 47, 52, 53, 48, 57, 59, + 63, 60, 61, 64, 68, 45, 69, 71, 66, 72, + 50, 81, 27, 73, 70, 80, 0, 0, 75, 0, + 0, 82 +}; + +static const yytype_int8 yycheck[] = +{ + 12, 8, 21, 22, 3, 0, 3, 8, 27, 8, + 7, 12, 23, 24, 11, 22, 13, 14, 15, 16, + 8, 4, 18, 19, 12, 4, 4, 4, 4, 22, + 22, 22, 22, 8, 8, 8, 18, 26, 22, 8, + 8, 22, 22, 8, 56, 12, 10, 10, 54, 62, + 12, 21, 23, 25, 58, 71, -1, -1, 68, -1, + -1, 27 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 3, 7, 11, 13, 14, 15, 16, 29, 30, + 32, 33, 38, 39, 40, 41, 43, 44, 45, 46, + 53, 4, 4, 4, 4, 4, 0, 23, 24, 34, + 56, 33, 3, 8, 22, 22, 42, 22, 22, 47, + 8, 22, 31, 8, 8, 12, 49, 8, 26, 8, + 12, 48, 8, 18, 36, 37, 54, 22, 51, 8, + 22, 22, 50, 8, 8, 19, 37, 55, 33, 10, + 49, 10, 48, 25, 35, 56, 21, 22, 27, 52, + 52, 21, 27 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pstate, yyscanner, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, yyscanner) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, pstate, yyscanner); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_state *pstate, void *yyscanner) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep, pstate, yyscanner) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + struct parser_state *pstate; + void *yyscanner; +#endif +{ + if (!yyvaluep) + return; + YYUSE (pstate); + YYUSE (yyscanner); +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_state *pstate, void *yyscanner) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep, pstate, yyscanner) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + struct parser_state *pstate; + void *yyscanner; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, pstate, yyscanner); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_state *pstate, void *yyscanner) +#else +static void +yy_reduce_print (yyvsp, yyrule, pstate, yyscanner) + YYSTYPE *yyvsp; + int yyrule; + struct parser_state *pstate; + void *yyscanner; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , pstate, yyscanner); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule, pstate, yyscanner); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_state *pstate, void *yyscanner) +#else +static void +yydestruct (yymsg, yytype, yyvaluep, pstate, yyscanner) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; + struct parser_state *pstate; + void *yyscanner; +#endif +{ + YYUSE (yyvaluep); + YYUSE (pstate); + YYUSE (yyscanner); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (struct parser_state *pstate, void *yyscanner); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (struct parser_state *pstate, void *yyscanner) +#else +int +yyparse (pstate, yyscanner) + struct parser_state *pstate; + void *yyscanner; +#endif +#endif +{ + /* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 4: +#line 121 "mimeparser.y" + { + mm_context_attachpart(pstate->ctx, pstate->current_mimepart); + pstate->current_mimepart = mm_mimepart_new(); + pstate->have_contenttype = 0; + } + break; + + case 5: +#line 127 "mimeparser.y" + { + dprintf2(pstate,"This was a multipart message\n"); + } + break; + + case 6: +#line 134 "mimeparser.y" + { + dprintf2(pstate,"This was a single part message\n"); + mm_context_attachpart(pstate->ctx, pstate->current_mimepart); + } + break; + + case 8: +#line 144 "mimeparser.y" + { + /* If we did not find a Content-Type header for the current + * MIME part (or envelope), we create one and attach it. + * According to the RFC, a type of "text/plain" and a + * charset of "us-ascii" can be assumed. + */ + struct mm_content *ct; + struct mm_param *param; + + if (!pstate->have_contenttype) { + ct = mm_content_new(); + mm_content_settype(ct, "text/plain"); + + param = mm_param_new(); + param->name = xstrdup("charset"); + param->value = xstrdup("us-ascii"); + + mm_content_attachtypeparam(ct, param); + mm_mimepart_attachcontenttype(pstate->current_mimepart, ct); + } + pstate->have_contenttype = 0; + } + break; + + case 10: +#line 172 "mimeparser.y" + { + char *preamble; + size_t offset; + + if ((yyvsp[(1) - (1)].position).start != (yyvsp[(1) - (1)].position).end) { + preamble = PARSE_readmessagepart(0, (yyvsp[(1) - (1)].position).start, (yyvsp[(1) - (1)].position).end, + &offset,yyscanner,pstate); + if (preamble == NULL) { + return(-1); + } + pstate->ctx->preamble = preamble; + dprintf2(pstate,"PREAMBLE:\n%s\n", preamble); + } + } + break; + + case 12: +#line 191 "mimeparser.y" + { + } + break; + + case 16: +#line 204 "mimeparser.y" + { + + if (mm_context_attachpart(pstate->ctx, pstate->current_mimepart) == -1) { + mm_errno = MM_ERROR_ERRNO; + return(-1); + } + + pstate->temppart = mm_mimepart_new(); + pstate->current_mimepart = pstate->temppart; + pstate->mime_parts++; + } + break; + + case 18: +#line 221 "mimeparser.y" + { + pstate->have_contenttype = 1; + if (mm_content_iscomposite(pstate->envelope->type)) { + pstate->ctx->messagetype = MM_MSGTYPE_MULTIPART; + } else { + pstate->ctx->messagetype = MM_MSGTYPE_FLAT; + } + } + break; + + case 22: +#line 237 "mimeparser.y" + { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("invalid header encountered"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + } + break; + + case 23: +#line 251 "mimeparser.y" + { + struct mm_mimeheader *hdr; + hdr = mm_mimeheader_generate((yyvsp[(1) - (4)].string), (yyvsp[(3) - (4)].string)); + mm_mimepart_attachheader(pstate->current_mimepart, hdr); + } + break; + + case 24: +#line 258 "mimeparser.y" + { + struct mm_mimeheader *hdr; + + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid header encountered"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + + hdr = mm_mimeheader_generate((yyvsp[(1) - (3)].string), xstrdup("")); + mm_mimepart_attachheader(pstate->current_mimepart, hdr); + } + break; + + case 25: +#line 277 "mimeparser.y" + { + mm_content_settype(pstate->ctype, "%s", (yyvsp[(3) - (4)].string)); + mm_mimepart_attachcontenttype(pstate->current_mimepart, pstate->ctype); + dprintf2(pstate,"Content-Type -> %s\n", (yyvsp[(3) - (4)].string)); + pstate->ctype = mm_content_new(); + } + break; + + case 26: +#line 285 "mimeparser.y" + { + mm_content_settype(pstate->ctype, "%s", (yyvsp[(3) - (5)].string)); + mm_mimepart_attachcontenttype(pstate->current_mimepart, pstate->ctype); + dprintf2(pstate,"Content-Type (P) -> %s\n", (yyvsp[(3) - (5)].string)); + pstate->ctype = mm_content_new(); + } + break; + + case 27: +#line 295 "mimeparser.y" + { + dprintf2(pstate,"Content-Disposition -> %s\n", (yyvsp[(3) - (4)].string)); + pstate->ctype->disposition_type = xstrdup((yyvsp[(3) - (4)].string)); + } + break; + + case 28: +#line 301 "mimeparser.y" + { + dprintf2(pstate,"Content-Disposition (P) -> %s; params\n", (yyvsp[(3) - (5)].string)); + pstate->ctype->disposition_type = xstrdup((yyvsp[(3) - (5)].string)); + } + break; + + case 29: +#line 309 "mimeparser.y" + { + /* + * According to RFC 2183, the content disposition value may + * only be "inline", "attachment" or an extension token. We + * catch invalid values here if we are not in loose parsing + * mode. + */ + if (strcasecmp((yyvsp[(1) - (1)].string), "inline") && strcasecmp((yyvsp[(1) - (1)].string), "attachment") + && strncasecmp((yyvsp[(1) - (1)].string), "X-", 2)) { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid content-disposition"); + return(-1); + } + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + (yyval.string) = (yyvsp[(1) - (1)].string); + } + break; + + case 30: +#line 332 "mimeparser.y" + { + dprintf2(pstate,"Content-Transfer-Encoding -> %s\n", (yyvsp[(3) - (4)].string)); + } + break; + + case 31: +#line 339 "mimeparser.y" + { + dprintf2(pstate,"MIME-Version -> '%s'\n", (yyvsp[(3) - (4)].string)); + } + break; + + case 35: +#line 356 "mimeparser.y" + { + char type[255]; + snprintf(type, sizeof(type), "%s/%s", (yyvsp[(1) - (3)].string), (yyvsp[(3) - (3)].string)); + (yyval.string) = type; + } + break; + + case 38: +#line 369 "mimeparser.y" + { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid Content-Type header"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + } + break; + + case 41: +#line 387 "mimeparser.y" + { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid Content-Disposition header"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + } + break; + + case 42: +#line 401 "mimeparser.y" + { + struct mm_param *param; + param = mm_param_new(); + + dprintf2(pstate,"Param: '%s', Value: '%s'\n", (yyvsp[(1) - (3)].string), (yyvsp[(3) - (3)].string)); + + /* Catch an eventual boundary identifier */ + if (!strcasecmp((yyvsp[(1) - (3)].string), "boundary")) { + if (pstate->lstate.boundary_string == NULL) { + set_boundary((yyvsp[(3) - (3)].string),pstate); + } else { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("duplicate boundary " + "found"); + return -1; + } else { + /* TODO: attach MM_WARNING_DUPPARAM */ + } + } + } + + param->name = xstrdup((yyvsp[(1) - (3)].string)); + param->value = xstrdup((yyvsp[(3) - (3)].string)); + + mm_content_attachtypeparam(pstate->ctype, param); + } + break; + + case 43: +#line 432 "mimeparser.y" + { + struct mm_param *param; + param = mm_param_new(); + + param->name = xstrdup((yyvsp[(1) - (3)].string)); + param->value = xstrdup((yyvsp[(3) - (3)].string)); + + mm_content_attachdispositionparam(pstate->ctype, param); + + } + break; + + case 44: +#line 446 "mimeparser.y" + { + dprintf2(pstate,"contenttype_param_val: WORD=%s\n", (yyvsp[(1) - (1)].string)); + (yyval.string) = (yyvsp[(1) - (1)].string); + } + break; + + case 45: +#line 452 "mimeparser.y" + { + dprintf2(pstate,"contenttype_param_val: TSPECIAL\n"); + /* For broken MIME implementation */ + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("tspecial without quotes"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVAL */ + } + (yyval.string) = (yyvsp[(1) - (1)].string); + } + break; + + case 46: +#line 467 "mimeparser.y" + { + dprintf2(pstate,"contenttype_param_val: \"TSPECIAL\"\n" ); + (yyval.string) = (yyvsp[(2) - (3)].string); + } + break; + + case 47: +#line 475 "mimeparser.y" + { + dprintf2(pstate,"End of headers at line %d\n", pstate->lstate.lineno); + } + break; + + case 48: +#line 482 "mimeparser.y" + { + if (pstate->lstate.boundary_string == NULL) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + if (strcmp(pstate->lstate.boundary_string, (yyvsp[(1) - (2)].string))) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("invalid boundary: '%s' (%d)", (yyvsp[(1) - (2)].string), strlen((yyvsp[(1) - (2)].string))); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + dprintf2(pstate,"New MIME part... (%s)\n", (yyvsp[(1) - (2)].string)); + } + break; + + case 49: +#line 501 "mimeparser.y" + { + if (pstate->lstate.endboundary_string == NULL) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + if (strcmp(pstate->lstate.endboundary_string, (yyvsp[(1) - (1)].string))) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("invalid end boundary: %s", (yyvsp[(1) - (1)].string)); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + dprintf2(pstate,"End of MIME message\n"); + } + break; + + case 50: +#line 520 "mimeparser.y" + { + char *body; + size_t offset; + + dprintf2(pstate,"BODY (%d/%d), SIZE %d\n", (yyvsp[(1) - (1)].position).start, (yyvsp[(1) - (1)].position).end, (yyvsp[(1) - (1)].position).end - (yyvsp[(1) - (1)].position).start); + + body = PARSE_readmessagepart((yyvsp[(1) - (1)].position).opaque_start, (yyvsp[(1) - (1)].position).start, (yyvsp[(1) - (1)].position).end, + &offset,yyscanner,pstate); + + if (body == NULL) { + return(-1); + } + pstate->current_mimepart->opaque_body = body; + pstate->current_mimepart->body = body + offset; + pstate->current_mimepart->opaque_length = (yyvsp[(1) - (1)].position).end - (yyvsp[(1) - (1)].position).start - 2 + offset; + pstate->current_mimepart->length = pstate->current_mimepart->opaque_length - offset; + } + break; + + +/* Line 1267 of yacc.c. */ +#line 1915 "mimeparser.tab.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (pstate, yyscanner, YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (pstate, yyscanner, yymsg); + } + else + { + yyerror (pstate, yyscanner, YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, pstate, yyscanner); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, pstate, yyscanner); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (pstate, yyscanner, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, pstate, yyscanner); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, pstate, yyscanner); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 539 "mimeparser.y" + + +/* + * This function gets the specified part from the currently parsed message. + */ +static char * +PARSE_readmessagepart(size_t opaque_start, size_t real_start, size_t end, + size_t *offset, yyscan_t yyscanner, struct parser_state *pstate) +{ + size_t body_size; + size_t current; + size_t start; + char *body; + + /* calculate start and offset markers for the opaque and + * header stripped body message. + */ + if (opaque_start > 0) { + /* Multipart message */ + if (real_start) { + if (real_start < opaque_start) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency (S:%d/O:%d)", + real_start, + opaque_start); + return(NULL); + } + start = opaque_start; + *offset = real_start - start; + /* Flat message */ + } else { + start = opaque_start; + *offset = 0; + } + } else { + start = real_start; + *offset = 0; + } + + /* The next three cases should NOT happen anytime */ + if (end <= start) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency,2"); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + if (start < *offset) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency, S:%d,O:%d,L:%d", start, offset, pstate->lstate.lineno); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + if (start < 0 || end < 0) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency,4"); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + + /* XXX: do we want to enforce a maximum body size? make it a + * parser option? */ + + /* Read in the body message */ + body_size = end - start; + + if (body_size < 1) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("size of body cannot be < 1"); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + + body = (char *)malloc(body_size + 1); + if (body == NULL) { + mm_errno = MM_ERROR_ERRNO; + return(NULL); + } + + /* Get the message body either from a stream or a memory + * buffer. + */ + if (mimeparser_yyget_in(yyscanner) != NULL) { + FILE *x = mimeparser_yyget_in(yyscanner); + current = ftell(x); + fseek(x, start - 1, SEEK_SET); + fread(body, body_size - 1, 1, x); + fseek(x, current, SEEK_SET); + } else if (pstate->lstate.message_buffer != NULL) { + strlcpy(body, pstate->lstate.message_buffer + start - 1, body_size); + } + + return(body); + +} + +int +yyerror(struct parser_state *pstate, void *yyscanner, const char *str) +{ + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("%s", str); + mm_error_setlineno(pstate->lstate.lineno); + return -1; +} + +int +mimeparser_yywrap(void) +{ + return 1; +} + +/** + * Sets the boundary value for the current message + */ +int +set_boundary(char *str, struct parser_state *pstate) +{ + size_t blen; + + blen = strlen(str); + + pstate->lstate.boundary_string = (char *)malloc(blen + 3); + pstate->lstate.endboundary_string = (char *)malloc(blen + 5); + + if (pstate->lstate.boundary_string == NULL || pstate->lstate.endboundary_string == NULL) { + if (pstate->lstate.boundary_string != NULL) { + free(pstate->lstate.boundary_string); + } + if (pstate->lstate.endboundary_string != NULL) { + free(pstate->lstate.endboundary_string); + } + return -1; + } + + pstate->ctx->boundary = xstrdup(str); + + snprintf(pstate->lstate.boundary_string, blen + 3, "--%s", str); + snprintf(pstate->lstate.endboundary_string, blen + 5, "--%s--", str); + + return 0; +} + +/** + * Debug printf() + */ +int +dprintf2(struct parser_state *pstate, const char *fmt, ...) +{ + va_list ap; + char *msg; + if (pstate->debug == 0) return 1; + + va_start(ap, fmt); + vasprintf(&msg, fmt, ap); + va_end(ap); + + fprintf(stderr, "%s", msg); + free(msg); + + return 0; + +} + +void reset_environ(struct parser_state *pstate) +{ + pstate->lstate.lineno = 0; + pstate->lstate.boundary_string = NULL; + pstate->lstate.endboundary_string = NULL; + pstate->lstate.message_buffer = NULL; + pstate->mime_parts = 0; + pstate->debug = 0; + pstate->envelope = NULL; + pstate->temppart = NULL; + pstate->ctype = NULL; + pstate->current_mimepart = NULL; + + pstate->have_contenttype = 0; +} +/** + * Initializes the parser engine. + */ +int +PARSER_initialize(struct parser_state *pstate, void *yyscanner) +{ + void reset_lexer_state(void *yyscanner, struct parser_state *); +#if 0 + if (pstate->ctx != NULL) { + xfree(pstate->ctx); + pstate->ctx = NULL; + } + if (pstate->envelope != NULL) { + xfree(pstate->envelope); + pstate->envelope = NULL; + } + if (pstate->ctype != NULL) { + xfree(pstate->ctype); + pstate->ctype = NULL; + } +#endif + /* yydebug = 1; */ + reset_environ(pstate); + reset_lexer_state(yyscanner,pstate); + + pstate->envelope = mm_mimepart_new(); + pstate->current_mimepart = pstate->envelope; + pstate->ctype = mm_content_new(); + + pstate->have_contenttype = 0; + + return 1; +} + + + diff --git a/main/minimime/mimeparser.tab.h b/main/minimime/mimeparser.tab.h new file mode 100644 index 0000000000..6cf3f22a24 --- /dev/null +++ b/main/minimime/mimeparser.tab.h @@ -0,0 +1,112 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ANY = 258, + COLON = 259, + DASH = 260, + DQUOTE = 261, + ENDOFHEADERS = 262, + EOL = 263, + EOM = 264, + EQUAL = 265, + MIMEVERSION_HEADER = 266, + SEMICOLON = 267, + CONTENTDISPOSITION_HEADER = 268, + CONTENTENCODING_HEADER = 269, + CONTENTTYPE_HEADER = 270, + MAIL_HEADER = 271, + HEADERVALUE = 272, + BOUNDARY = 273, + ENDBOUNDARY = 274, + CONTENTTYPE_VALUE = 275, + TSPECIAL = 276, + WORD = 277, + BODY = 278, + PREAMBLE = 279, + POSTAMBLE = 280 + }; +#endif +/* Tokens. */ +#define ANY 258 +#define COLON 259 +#define DASH 260 +#define DQUOTE 261 +#define ENDOFHEADERS 262 +#define EOL 263 +#define EOM 264 +#define EQUAL 265 +#define MIMEVERSION_HEADER 266 +#define SEMICOLON 267 +#define CONTENTDISPOSITION_HEADER 268 +#define CONTENTENCODING_HEADER 269 +#define CONTENTTYPE_HEADER 270 +#define MAIL_HEADER 271 +#define HEADERVALUE 272 +#define BOUNDARY 273 +#define ENDBOUNDARY 274 +#define CONTENTTYPE_VALUE 275 +#define TSPECIAL 276 +#define WORD 277 +#define BODY 278 +#define PREAMBLE 279 +#define POSTAMBLE 280 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 69 "mimeparser.y" +{ + int number; + char *string; + struct s_position position; +} +/* Line 1529 of yacc.c. */ +#line 105 "mimeparser.tab.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + diff --git a/main/minimime/mimeparser.y b/main/minimime/mimeparser.y new file mode 100644 index 0000000000..18f409f359 --- /dev/null +++ b/main/minimime/mimeparser.y @@ -0,0 +1,750 @@ +%{ +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/** + * These are the grammatic definitions in yacc syntax to parse MIME conform + * messages. + * + * TODO: + * - honour parse flags passed to us (partly done) + * - parse Content-Disposition header (partly done) + * - parse Content-Encoding header + */ +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> +#include <errno.h> + +#include "mimeparser.h" +#include "mm.h" +#include "mm_internal.h" + +int set_boundary(char *,struct parser_state *); +int mimeparser_yywrap(void); +void reset_environ(struct parser_state *pstate); +int PARSER_initialize(struct parser_state *pstate, void *yyscanner); + +typedef void *yyscan_t; + +static char *PARSE_readmessagepart(size_t, size_t, size_t, size_t *,yyscan_t, struct parser_state *); +FILE *mimeparser_yyget_in (yyscan_t yyscanner ); + +%} + +%pure-parser +%parse-param {struct parser_state *pstate} +%parse-param {void *yyscanner} +%lex-param {void *yyscanner} + +%union +{ + int number; + char *string; + struct s_position position; +} + +%token ANY +%token COLON +%token DASH +%token DQUOTE +%token ENDOFHEADERS +%token EOL +%token EOM +%token EQUAL +%token MIMEVERSION_HEADER +%token SEMICOLON + +%token <string> CONTENTDISPOSITION_HEADER +%token <string> CONTENTENCODING_HEADER +%token <string> CONTENTTYPE_HEADER +%token <string> MAIL_HEADER +%token <string> HEADERVALUE +%token <string> BOUNDARY +%token <string> ENDBOUNDARY +%token <string> CONTENTTYPE_VALUE +%token <string> TSPECIAL +%token <string> WORD + +%token <position> BODY +%token <position> PREAMBLE +%token <position> POSTAMBLE + +%type <string> content_disposition +%type <string> contenttype_parameter_value +%type <string> mimetype +%type <string> body + +%start message + +%% + +/* This is a parser for a MIME-conform message, which is in either single + * part or multi part format. + */ +message : + multipart_message + | + singlepart_message + ; + +multipart_message: + headers preamble + { + mm_context_attachpart(pstate->ctx, pstate->current_mimepart); + pstate->current_mimepart = mm_mimepart_new(); + pstate->have_contenttype = 0; + } + mimeparts endboundary postamble + { + dprintf2(pstate,"This was a multipart message\n"); + } + ; + +singlepart_message: + headers body + { + dprintf2(pstate,"This was a single part message\n"); + mm_context_attachpart(pstate->ctx, pstate->current_mimepart); + } + ; + +headers : + header headers + | + end_headers + { + /* If we did not find a Content-Type header for the current + * MIME part (or envelope), we create one and attach it. + * According to the RFC, a type of "text/plain" and a + * charset of "us-ascii" can be assumed. + */ + struct mm_content *ct; + struct mm_param *param; + + if (!pstate->have_contenttype) { + ct = mm_content_new(); + mm_content_settype(ct, "text/plain"); + + param = mm_param_new(); + param->name = xstrdup("charset"); + param->value = xstrdup("us-ascii"); + + mm_content_attachtypeparam(ct, param); + mm_mimepart_attachcontenttype(pstate->current_mimepart, ct); + } + pstate->have_contenttype = 0; + } + | + header + ; + +preamble: + PREAMBLE + { + char *preamble; + size_t offset; + + if ($1.start != $1.end) { + preamble = PARSE_readmessagepart(0, $1.start, $1.end, + &offset,yyscanner,pstate); + if (preamble == NULL) { + return(-1); + } + pstate->ctx->preamble = preamble; + dprintf2(pstate,"PREAMBLE:\n%s\n", preamble); + } + } + | + ; + +postamble: + POSTAMBLE + { + } + | + ; + +mimeparts: + mimeparts mimepart + | + mimepart + ; + +mimepart: + boundary headers body + { + + if (mm_context_attachpart(pstate->ctx, pstate->current_mimepart) == -1) { + mm_errno = MM_ERROR_ERRNO; + return(-1); + } + + pstate->temppart = mm_mimepart_new(); + pstate->current_mimepart = pstate->temppart; + pstate->mime_parts++; + } + ; + +header : + mail_header + | + contenttype_header + { + pstate->have_contenttype = 1; + if (mm_content_iscomposite(pstate->envelope->type)) { + pstate->ctx->messagetype = MM_MSGTYPE_MULTIPART; + } else { + pstate->ctx->messagetype = MM_MSGTYPE_FLAT; + } + } + | + contentdisposition_header + | + contentencoding_header + | + mimeversion_header + | + invalid_header + { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("invalid header encountered"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + } + ; + +mail_header: + MAIL_HEADER COLON WORD EOL + { + struct mm_mimeheader *hdr; + hdr = mm_mimeheader_generate($1, $3); + mm_mimepart_attachheader(pstate->current_mimepart, hdr); + } + | + MAIL_HEADER COLON EOL + { + struct mm_mimeheader *hdr; + + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid header encountered"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + + hdr = mm_mimeheader_generate($1, xstrdup("")); + mm_mimepart_attachheader(pstate->current_mimepart, hdr); + } + ; + +contenttype_header: + CONTENTTYPE_HEADER COLON mimetype EOL + { + mm_content_settype(pstate->ctype, "%s", $3); + mm_mimepart_attachcontenttype(pstate->current_mimepart, pstate->ctype); + dprintf2(pstate,"Content-Type -> %s\n", $3); + pstate->ctype = mm_content_new(); + } + | + CONTENTTYPE_HEADER COLON mimetype contenttype_parameters EOL + { + mm_content_settype(pstate->ctype, "%s", $3); + mm_mimepart_attachcontenttype(pstate->current_mimepart, pstate->ctype); + dprintf2(pstate,"Content-Type (P) -> %s\n", $3); + pstate->ctype = mm_content_new(); + } + ; + +contentdisposition_header: + CONTENTDISPOSITION_HEADER COLON content_disposition EOL + { + dprintf2(pstate,"Content-Disposition -> %s\n", $3); + pstate->ctype->disposition_type = xstrdup($3); + } + | + CONTENTDISPOSITION_HEADER COLON content_disposition content_disposition_parameters EOL + { + dprintf2(pstate,"Content-Disposition (P) -> %s; params\n", $3); + pstate->ctype->disposition_type = xstrdup($3); + } + ; + +content_disposition: + WORD + { + /* + * According to RFC 2183, the content disposition value may + * only be "inline", "attachment" or an extension token. We + * catch invalid values here if we are not in loose parsing + * mode. + */ + if (strcasecmp($1, "inline") && strcasecmp($1, "attachment") + && strncasecmp($1, "X-", 2)) { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid content-disposition"); + return(-1); + } + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + $$ = $1; + } + ; + +contentencoding_header: + CONTENTENCODING_HEADER COLON WORD EOL + { + dprintf2(pstate,"Content-Transfer-Encoding -> %s\n", $3); + } + ; + +mimeversion_header: + MIMEVERSION_HEADER COLON WORD EOL + { + dprintf2(pstate,"MIME-Version -> '%s'\n", $3); + } + ; + +invalid_header: + any EOL + ; + +any: + any ANY + | + ANY + ; + +mimetype: + WORD '/' WORD + { + char type[255]; + snprintf(type, sizeof(type), "%s/%s", $1, $3); + $$ = type; + } + ; + +contenttype_parameters: + SEMICOLON contenttype_parameter contenttype_parameters + | + SEMICOLON contenttype_parameter + | + SEMICOLON + { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid Content-Type header"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + } + ; + +content_disposition_parameters: + SEMICOLON content_disposition_parameter content_disposition_parameters + | + SEMICOLON content_disposition_parameter + | + SEMICOLON + { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("invalid Content-Disposition header"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVHDR */ + } + } + ; + +contenttype_parameter: + WORD EQUAL contenttype_parameter_value + { + struct mm_param *param; + param = mm_param_new(); + + dprintf2(pstate,"Param: '%s', Value: '%s'\n", $1, $3); + + /* Catch an eventual boundary identifier */ + if (!strcasecmp($1, "boundary")) { + if (pstate->lstate.boundary_string == NULL) { + set_boundary($3,pstate); + } else { + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("duplicate boundary " + "found"); + return -1; + } else { + /* TODO: attach MM_WARNING_DUPPARAM */ + } + } + } + + param->name = xstrdup($1); + param->value = xstrdup($3); + + mm_content_attachtypeparam(pstate->ctype, param); + } + ; + +content_disposition_parameter: + WORD EQUAL contenttype_parameter_value + { + struct mm_param *param; + param = mm_param_new(); + + param->name = xstrdup($1); + param->value = xstrdup($3); + + mm_content_attachdispositionparam(pstate->ctype, param); + + } + ; + +contenttype_parameter_value: + WORD + { + dprintf2(pstate,"contenttype_param_val: WORD=%s\n", $1); + $$ = $1; + } + | + TSPECIAL + { + dprintf2(pstate,"contenttype_param_val: TSPECIAL\n"); + /* For broken MIME implementation */ + if (pstate->parsemode != MM_PARSE_LOOSE) { + mm_errno = MM_ERROR_MIME; + mm_error_setmsg("tspecial without quotes"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } else { + /* TODO: attach MM_WARNING_INVAL */ + } + $$ = $1; + } + | + '"' TSPECIAL '"' + { + dprintf2(pstate,"contenttype_param_val: \"TSPECIAL\"\n" ); + $$ = $2; + } + ; + +end_headers : + ENDOFHEADERS + { + dprintf2(pstate,"End of headers at line %d\n", pstate->lstate.lineno); + } + ; + +boundary : + BOUNDARY EOL + { + if (pstate->lstate.boundary_string == NULL) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + if (strcmp(pstate->lstate.boundary_string, $1)) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("invalid boundary: '%s' (%d)", $1, strlen($1)); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + dprintf2(pstate,"New MIME part... (%s)\n", $1); + } + ; + +endboundary : + ENDBOUNDARY + { + if (pstate->lstate.endboundary_string == NULL) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency"); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + if (strcmp(pstate->lstate.endboundary_string, $1)) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("invalid end boundary: %s", $1); + mm_error_setlineno(pstate->lstate.lineno); + return(-1); + } + dprintf2(pstate,"End of MIME message\n"); + } + ; + +body: + BODY + { + char *body; + size_t offset; + + dprintf2(pstate,"BODY (%d/%d), SIZE %d\n", $1.start, $1.end, $1.end - $1.start); + + body = PARSE_readmessagepart($1.opaque_start, $1.start, $1.end, + &offset,yyscanner,pstate); + + if (body == NULL) { + return(-1); + } + pstate->current_mimepart->opaque_body = body; + pstate->current_mimepart->body = body + offset; + pstate->current_mimepart->opaque_length = $1.end - $1.start - 2 + offset; + pstate->current_mimepart->length = pstate->current_mimepart->opaque_length - offset; + } + ; + +%% + +/* + * This function gets the specified part from the currently parsed message. + */ +static char * +PARSE_readmessagepart(size_t opaque_start, size_t real_start, size_t end, + size_t *offset, yyscan_t yyscanner, struct parser_state *pstate) +{ + size_t body_size; + size_t current; + size_t start; + char *body; + + /* calculate start and offset markers for the opaque and + * header stripped body message. + */ + if (opaque_start > 0) { + /* Multipart message */ + if (real_start) { + if (real_start < opaque_start) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency (S:%d/O:%d)", + real_start, + opaque_start); + return(NULL); + } + start = opaque_start; + *offset = real_start - start; + /* Flat message */ + } else { + start = opaque_start; + *offset = 0; + } + } else { + start = real_start; + *offset = 0; + } + + /* The next three cases should NOT happen anytime */ + if (end <= start) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency,2"); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + if (start < *offset) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency, S:%d,O:%d,L:%d", start, offset, pstate->lstate.lineno); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + if (start < 0 || end < 0) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("internal incosistency,4"); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + + /* XXX: do we want to enforce a maximum body size? make it a + * parser option? */ + + /* Read in the body message */ + body_size = end - start; + + if (body_size < 1) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("size of body cannot be < 1"); + mm_error_setlineno(pstate->lstate.lineno); + return(NULL); + } + + body = (char *)malloc(body_size + 1); + if (body == NULL) { + mm_errno = MM_ERROR_ERRNO; + return(NULL); + } + + /* Get the message body either from a stream or a memory + * buffer. + */ + if (mimeparser_yyget_in(yyscanner) != NULL) { + FILE *x = mimeparser_yyget_in(yyscanner); + current = ftell(x); + fseek(x, start - 1, SEEK_SET); + fread(body, body_size - 1, 1, x); + fseek(x, current, SEEK_SET); + } else if (pstate->lstate.message_buffer != NULL) { + strlcpy(body, pstate->lstate.message_buffer + start - 1, body_size); + } + + return(body); + +} + +int +yyerror(struct parser_state *pstate, void *yyscanner, const char *str) +{ + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("%s", str); + mm_error_setlineno(pstate->lstate.lineno); + return -1; +} + +int +mimeparser_yywrap(void) +{ + return 1; +} + +/** + * Sets the boundary value for the current message + */ +int +set_boundary(char *str, struct parser_state *pstate) +{ + size_t blen; + + blen = strlen(str); + + pstate->lstate.boundary_string = (char *)malloc(blen + 3); + pstate->lstate.endboundary_string = (char *)malloc(blen + 5); + + if (pstate->lstate.boundary_string == NULL || pstate->lstate.endboundary_string == NULL) { + if (pstate->lstate.boundary_string != NULL) { + free(pstate->lstate.boundary_string); + } + if (pstate->lstate.endboundary_string != NULL) { + free(pstate->lstate.endboundary_string); + } + return -1; + } + + pstate->ctx->boundary = xstrdup(str); + + snprintf(pstate->lstate.boundary_string, blen + 3, "--%s", str); + snprintf(pstate->lstate.endboundary_string, blen + 5, "--%s--", str); + + return 0; +} + +/** + * Debug printf() + */ +int +dprintf2(struct parser_state *pstate, const char *fmt, ...) +{ + va_list ap; + char *msg; + if (pstate->debug == 0) return 1; + + va_start(ap, fmt); + vasprintf(&msg, fmt, ap); + va_end(ap); + + fprintf(stderr, "%s", msg); + free(msg); + + return 0; + +} + +void reset_environ(struct parser_state *pstate) +{ + pstate->lstate.lineno = 0; + pstate->lstate.boundary_string = NULL; + pstate->lstate.endboundary_string = NULL; + pstate->lstate.message_buffer = NULL; + pstate->mime_parts = 0; + pstate->debug = 0; + pstate->envelope = NULL; + pstate->temppart = NULL; + pstate->ctype = NULL; + pstate->current_mimepart = NULL; + + pstate->have_contenttype = 0; +} +/** + * Initializes the parser engine. + */ +int +PARSER_initialize(struct parser_state *pstate, void *yyscanner) +{ + void reset_lexer_state(void *yyscanner, struct parser_state *); +#if 0 + if (pstate->ctx != NULL) { + xfree(pstate->ctx); + pstate->ctx = NULL; + } + if (pstate->envelope != NULL) { + xfree(pstate->envelope); + pstate->envelope = NULL; + } + if (pstate->ctype != NULL) { + xfree(pstate->ctype); + pstate->ctype = NULL; + } +#endif + /* yydebug = 1; */ + reset_environ(pstate); + reset_lexer_state(yyscanner,pstate); + + pstate->envelope = mm_mimepart_new(); + pstate->current_mimepart = pstate->envelope; + pstate->ctype = mm_content_new(); + + pstate->have_contenttype = 0; + + return 1; +} + + diff --git a/main/minimime/mimeparser.yy.c b/main/minimime/mimeparser.yy.c new file mode 100644 index 0000000000..40d6bd9fa9 --- /dev/null +++ b/main/minimime/mimeparser.yy.c @@ -0,0 +1,2622 @@ +#line 2 "mimeparser.yy.c" + +#line 4 "mimeparser.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include <inttypes.h> +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +int mimeparser_yylex_init (yyscan_t* scanner); + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE mimeparser_yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires + * access to the local variable yy_act. Since yyless() is a macro, it would break + * existing scanners that call yyless() from OUTSIDE mimeparser_yylex. + * One obvious solution it to make yy_act a global. I tried that, and saw + * a 5% performance hit in a non-yylineno scanner, because yy_act is + * normally declared as a register variable-- so it is not worth it. + */ + #define YY_LESS_LINENO(n) \ + do { \ + int yyl;\ + for ( yyl = n; yyl < yyleng; ++yyl )\ + if ( yytext[yyl] == '\n' )\ + --yylineno;\ + }while(0) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via mimeparser_yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void mimeparser_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void mimeparser_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE mimeparser_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void mimeparser_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void mimeparser_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void mimeparser_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void mimeparser_yypop_buffer_state (yyscan_t yyscanner ); + +static void mimeparser_yyensure_buffer_stack (yyscan_t yyscanner ); +static void mimeparser_yy_load_buffer_state (yyscan_t yyscanner ); +static void mimeparser_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER mimeparser_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE mimeparser_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE mimeparser_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE mimeparser_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *mimeparser_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *mimeparser_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void mimeparser_yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer mimeparser_yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + mimeparser_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + mimeparser_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + mimeparser_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + mimeparser_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 30 +#define YY_END_OF_BUFFER 31 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_acclist[179] = + { 0, + 31, 2, 29, 30, 28, 30, 2, 29, 30, 1, + 2, 29, 30, 3, 28, 30, 2, 29, 30, 29, + 30, 5, 28, 30, 29, 30, 4, 29, 30, 7, + 29, 30, 7, 13, 29, 30, 8, 28, 30, 7, + 29, 30, 7, 11, 29, 30, 7, 12, 29, 30, + 7, 12, 29, 30, 7, 9, 29, 30, 7, 10, + 29, 30, 8, 28, 30, 29, 30, 14, 29, 30, + 15, 29, 30, 29, 30, 20, 29, 30, 18, 28, + 30, 19, 29, 30, 20, 29, 30, 27, 29, 30, + 21, 28, 30, 27, 29, 30, 26, 29, 30, 26, + + 29, 30, 26, 29, 30, 22, 29, 30, 24, 28, + 30, 29, 30, 23, 29, 30, 25, 28, 30, 29, + 30, 28, 1, 1, 3, 28, 5, 28, 7, 7, + 7, 13, 6, 8, 28, 7, 12, 7, 12, 7, + 8, 28, 14, 20, 18, 28, 20, 21, 28, 22, + 24, 28, 23, 25, 28, 6, 9, 17, 20, 17, + 7, 7, 6, 7, 7, 9, 17, 20, 7, 7, + 6, 7, 7, 9, 16, 17, 20, 7 + } ; + +static yyconst flex_int16_t yy_accept[112] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 5, 7, 10, 14, + 17, 20, 22, 25, 27, 30, 33, 37, 40, 43, + 47, 51, 55, 59, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, + 109, 112, 114, 117, 120, 122, 123, 124, 125, 127, + 129, 130, 130, 131, 133, 134, 136, 138, 140, 140, + 141, 143, 144, 145, 147, 148, 150, 150, 151, 153, + 154, 156, 156, 156, 157, 158, 158, 160, 161, 162, + + 163, 165, 167, 169, 170, 171, 173, 175, 178, 179, + 179 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 1, 6, 1, 1, 1, 1, 7, 7, + 7, 1, 7, 7, 8, 9, 10, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 12, 13, 7, + 14, 7, 7, 7, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 16, 1, 16, 1, 11, 1, 15, 15, 15, 15, + + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 1, 17, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[18] = + { 0, + 1, 1, 2, 3, 4, 1, 4, 5, 4, 4, + 5, 4, 4, 4, 5, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[128] = + { 0, + 0, 2, 4, 15, 28, 38, 50, 0, 67, 0, + 6, 8, 10, 82, 12, 17, 19, 88, 21, 23, + 25, 30, 32, 34, 228, 253, 253, 224, 208, 253, + 219, 253, 253, 165, 253, 40, 95, 43, 43, 84, + 110, 119, 90, 98, 253, 155, 0, 253, 153, 0, + 253, 148, 131, 253, 253, 132, 253, 128, 116, 0, + 253, 119, 0, 253, 108, 253, 0, 80, 253, 253, + 100, 103, 103, 0, 118, 127, 0, 0, 131, 106, + 253, 0, 0, 253, 136, 253, 0, 0, 253, 0, + 253, 138, 139, 143, 144, 145, 153, 0, 0, 155, + + 160, 161, 81, 112, 169, 162, 173, 41, 173, 253, + 178, 183, 188, 193, 198, 203, 208, 34, 213, 215, + 220, 225, 230, 235, 237, 242, 247 + } ; + +static yyconst flex_int16_t yy_def[128] = + { 0, + 111, 111, 111, 111, 112, 112, 110, 7, 110, 9, + 112, 112, 113, 113, 114, 114, 115, 115, 116, 116, + 117, 117, 112, 112, 110, 110, 110, 110, 118, 110, + 110, 110, 110, 110, 110, 119, 119, 110, 119, 119, + 119, 41, 119, 119, 110, 110, 120, 110, 110, 121, + 110, 110, 121, 110, 110, 110, 110, 110, 110, 122, + 110, 110, 123, 110, 110, 110, 118, 118, 110, 110, + 119, 110, 119, 37, 110, 110, 41, 42, 110, 119, + 110, 120, 121, 110, 124, 110, 125, 122, 110, 123, + 110, 126, 110, 126, 126, 110, 124, 125, 127, 127, + + 127, 127, 97, 127, 127, 105, 105, 97, 127, 0, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110 + } ; + +static yyconst flex_int16_t yy_nxt[271] = + { 0, + 110, 110, 27, 28, 27, 28, 27, 28, 27, 49, + 27, 49, 51, 52, 55, 56, 29, 30, 31, 55, + 56, 55, 58, 61, 62, 61, 62, 64, 65, 29, + 33, 34, 64, 65, 27, 49, 27, 49, 67, 35, + 33, 34, 72, 73, 75, 76, 73, 75, 108, 35, + 36, 37, 38, 39, 37, 40, 41, 42, 42, 36, + 42, 36, 43, 44, 42, 41, 37, 32, 32, 45, + 46, 47, 48, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 32, 32, 51, 52, 72, 73, 108, 53, + 55, 58, 79, 80, 68, 59, 74, 72, 73, 74, + + 72, 73, 72, 73, 92, 93, 73, 92, 96, 73, + 91, 74, 72, 73, 72, 109, 77, 77, 77, 75, + 77, 89, 75, 87, 77, 77, 78, 78, 94, 78, + 86, 94, 95, 78, 86, 95, 83, 83, 85, 100, + 92, 83, 100, 92, 101, 102, 95, 101, 102, 95, + 84, 83, 83, 83, 83, 66, 105, 81, 83, 105, + 103, 106, 107, 106, 106, 107, 106, 70, 83, 83, + 105, 72, 109, 105, 107, 93, 109, 107, 26, 26, + 26, 26, 26, 32, 32, 32, 32, 32, 50, 50, + 50, 50, 50, 54, 54, 54, 54, 54, 57, 57, + + 57, 57, 57, 60, 60, 60, 60, 60, 63, 63, + 63, 63, 63, 71, 71, 71, 71, 71, 82, 82, + 83, 69, 68, 83, 83, 88, 66, 110, 88, 88, + 90, 110, 110, 90, 90, 97, 110, 110, 97, 97, + 98, 98, 99, 110, 99, 99, 99, 104, 110, 104, + 104, 104, 25, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 + } ; + +static yyconst flex_int16_t yy_chk[271] = + { 0, + 0, 0, 1, 1, 2, 2, 3, 3, 11, 11, + 12, 12, 13, 13, 15, 15, 2, 4, 4, 16, + 16, 17, 17, 19, 19, 20, 20, 21, 21, 4, + 5, 5, 22, 22, 23, 23, 24, 24, 118, 5, + 6, 6, 36, 36, 38, 39, 39, 38, 108, 6, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 14, 14, 40, 40, 103, 14, + 18, 18, 43, 43, 68, 18, 37, 37, 37, 37, + + 44, 44, 71, 71, 72, 73, 73, 72, 80, 80, + 65, 37, 41, 41, 104, 104, 41, 41, 41, 75, + 41, 62, 75, 59, 41, 41, 42, 42, 76, 42, + 58, 76, 79, 42, 56, 79, 85, 85, 53, 92, + 93, 85, 92, 93, 94, 95, 96, 94, 95, 96, + 52, 85, 85, 97, 97, 49, 100, 46, 97, 100, + 97, 101, 102, 106, 101, 102, 106, 34, 97, 97, + 105, 105, 105, 105, 107, 109, 109, 107, 111, 111, + 111, 111, 111, 112, 112, 112, 112, 112, 113, 113, + 113, 113, 113, 114, 114, 114, 114, 114, 115, 115, + + 115, 115, 115, 116, 116, 116, 116, 116, 117, 117, + 117, 117, 117, 119, 119, 119, 119, 119, 120, 120, + 121, 31, 29, 121, 121, 122, 28, 25, 122, 122, + 123, 0, 0, 123, 123, 124, 0, 0, 124, 124, + 125, 125, 126, 0, 126, 126, 126, 127, 0, 127, + 127, 127, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 + } ; + +/* Table of booleans, true if rule could match eol. */ +static yyconst flex_int32_t yy_rule_can_match_eol[31] = + { 0, +0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, }; + +#define REJECT \ +{ \ +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ \ +yy_cp = yyg->yy_full_match; /* restore poss. backed-over text */ \ +++yyg->yy_lp; \ +goto find_rule; \ +} + +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "mimeparser.l" +#line 2 "mimeparser.l" +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/** + * This is a lexer file for parsing MIME compatible messages. It is intended + * to satisfy at least RFC 2045 (Format of Internet Message Bodies). It still + * has quite a few problems: + * + * - The parsing could probably be done in a more elegant way + * - I don't know what performance impact REJECT has on the parser + */ +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> + +#include "mimeparser.h" +#include "mimeparser.tab.h" + +#define NAMEOF(v) #v +/* BC() is a debug wrapper for lex' BEGIN() macro */ +#define BC(x) do { \ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); \ + BEGIN(x); \ + lstate->condition = x; \ +} while(0); + +#define ZERO(x) memset(x, '\0', sizeof(x)) + +#define PREALLOC_BUFFER 100000 +#undef YY_BUF_SIZE +#define YY_BUF_SIZE 65536 + +enum header_states +{ + STATE_MAIL = 0, + STATE_CTYPE, + STATE_CDISP, + STATE_CENC, + STATE_MIME +}; + + + + + + + + + + + + + + +#line 658 "mimeparser.yy.c" + +#define INITIAL 0 +#define headers 1 +#define header 2 +#define headervalue 3 +#define tspecialvalue 4 +#define comment 5 +#define body 6 +#define postamble 7 +#define preamble 8 +#define boundary 9 +#define endboundary 10 +#define endoffile 11 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include <unistd.h> +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + yy_state_type *yy_state_buf; + yy_state_type *yy_state_ptr; + char *yy_full_match; + int yy_lp; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + YYSTYPE * yylval_r; + + }; /* end struct yyguts_t */ + +static int yy_init_globals (yyscan_t yyscanner ); + + /* This must go here because YYSTYPE and YYLTYPE are included + * from bison output in section 1.*/ + # define yylval yyg->yylval_r + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int mimeparser_yylex_destroy (yyscan_t yyscanner ); + +int mimeparser_yyget_debug (yyscan_t yyscanner ); + +void mimeparser_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE mimeparser_yyget_extra (yyscan_t yyscanner ); + +void mimeparser_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *mimeparser_yyget_in (yyscan_t yyscanner ); + +void mimeparser_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *mimeparser_yyget_out (yyscan_t yyscanner ); + +void mimeparser_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int mimeparser_yyget_leng (yyscan_t yyscanner ); + +char *mimeparser_yyget_text (yyscan_t yyscanner ); + +int mimeparser_yyget_lineno (yyscan_t yyscanner ); + +void mimeparser_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +YYSTYPE * mimeparser_yyget_lval (yyscan_t yyscanner ); + +void mimeparser_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int mimeparser_yywrap (yyscan_t yyscanner ); +#else +extern int mimeparser_yywrap (yyscan_t yyscanner ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int mimeparser_yylex \ + (YYSTYPE * yylval_param ,yyscan_t yyscanner); + +#define YY_DECL int mimeparser_yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 94 "mimeparser.l" + + +#line 909 "mimeparser.yy.c" + + yylval = yylval_param; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + /* Create the reject buffer large enough to save one state per allowed character. */ + if ( ! yyg->yy_state_buf ) + yyg->yy_state_buf = (yy_state_type *)mimeparser_yyalloc(YY_STATE_BUF_SIZE ,yyscanner); + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + mimeparser_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + mimeparser_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + mimeparser_yy_load_buffer_state(yyscanner ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + yyg->yy_state_ptr = yyg->yy_state_buf; + *yyg->yy_state_ptr++ = yy_current_state; + +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 111 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yyg->yy_state_ptr++ = yy_current_state; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 253 ); + +yy_find_action: + yy_current_state = *--yyg->yy_state_ptr; + yyg->yy_lp = yy_accept[yy_current_state]; +find_rule: /* we branch to this label when backing up */ + for ( ; ; ) /* until we find what rule we matched */ + { + if ( yyg->yy_lp && yyg->yy_lp < yy_accept[yy_current_state + 1] ) + { + yy_act = yy_acclist[yyg->yy_lp]; + { + yyg->yy_full_match = yy_cp; + break; + } + } + --yy_cp; + yy_current_state = *--yyg->yy_state_ptr; + yyg->yy_lp = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + { + int yyl; + for ( yyl = 0; yyl < yyleng; ++yyl ) + if ( yytext[yyl] == '\n' ) + + do{ yylineno++; + yycolumn=0; + }while(0) +; + } + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +YY_RULE_SETUP +#line 96 "mimeparser.l" +{ + yylval_param->string=strdup(yytext); + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; + BC(header); + + /* Depending on what header we are processing, we enter a different + * state and return a different value. + */ + if (!strcasecmp(yytext, "Content-Type")) { + lstate->header_state = STATE_CTYPE; + return CONTENTTYPE_HEADER; + } else if (!strcasecmp(yytext, "Content-Transfer-Encoding")) { + lstate->header_state = STATE_CENC; + return CONTENTENCODING_HEADER; + } else if (!strcasecmp(yytext, "Content-Disposition")) { + lstate->header_state = STATE_CDISP; + return CONTENTDISPOSITION_HEADER; + } else if (!strcasecmp(yytext, "MIME-Version")) { + lstate->header_state = STATE_MAIL; + return MIMEVERSION_HEADER; + } else { + lstate->header_state = STATE_MAIL; + return MAIL_HEADER; + } +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 123 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + /* dprintf2("Unknown header char: %c\n", *yytext); */ + lstate->current_pos += yyleng; + return ANY; +} + YY_BREAK +case 3: +/* rule 3 can match eol */ +YY_RULE_SETUP +#line 130 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->lineno++; + + lstate->current_pos += yyleng; + + /* This marks the end of headers. Depending on whether we are in the + * envelope currently we need to parse either a body or the preamble + * now. + */ + if (lstate->is_envelope == 0 || lstate->boundary_string == NULL) { + BC(body); + lstate->body_start = lstate->current_pos; + } else { + lstate->is_envelope = 0; + lstate->preamble_start = lstate->current_pos; + BC(preamble); + } + + return ENDOFHEADERS; +} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 152 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + BC(headervalue); + lstate->current_pos += yyleng; + return COLON; +} + YY_BREAK +case 5: +/* rule 5 can match eol */ +YY_RULE_SETUP +#line 159 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + BC(headers); + /* dprintf2("Invalid header, returning EOL\n"); */ + lstate->current_pos += yyleng; + return EOL; +} + YY_BREAK +case 6: +/* rule 6 can match eol */ +YY_RULE_SETUP +#line 167 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 172 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + if (lstate->header_state != STATE_MAIL && lstate->header_state != STATE_CENC) { + REJECT; + } + lstate->current_pos += yyleng; + while (*yytext && isspace(*yytext)) yytext++; + /* Do we actually have a header value? */ + if (*yytext == '\0') { + yylval_param->string = strdup(""); + } else { + yylval_param->string=strdup(yytext); + lstate->lineno += count_lines(yytext); + } + return WORD; +} + YY_BREAK +case 8: +/* rule 8 can match eol */ +YY_RULE_SETUP +#line 189 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + /* marks the end of one header line */ + lstate->lineno++; + BC(headers); + lstate->current_pos += yyleng; + return EOL; +} + YY_BREAK +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 198 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->lineno += count_lines(yytext); + lstate->current_pos += yyleng; + return SEMICOLON; +} + YY_BREAK +case 10: +YY_RULE_SETUP +#line 205 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; + return EQUAL; +} + YY_BREAK +case 11: +YY_RULE_SETUP +#line 211 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + BC(tspecialvalue); + lstate->current_pos += yyleng; + return *yytext; +} + YY_BREAK +case 12: +YY_RULE_SETUP +#line 218 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + yylval_param->string=strdup(yytext); + lstate->lineno += count_lines(yytext); + lstate->current_pos += yyleng; + return WORD; +} + YY_BREAK +case 13: +YY_RULE_SETUP +#line 226 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + YY_BREAK +case 14: +YY_RULE_SETUP +#line 231 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->lineno += count_lines(yytext); + yylval_param->string=strdup(yytext); + lstate->current_pos += yyleng; + return TSPECIAL; +} + YY_BREAK +case 15: +YY_RULE_SETUP +#line 239 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + BC(headervalue); + lstate->current_pos += yyleng; + return *yytext; +} + YY_BREAK +case 16: +YY_RULE_SETUP +#line 246 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + /** + * Make sure we only catch matching boundaries, and not other lines + * that begin and end with two dashes. If we have catched a valid + * end boundary, which actually ends a body, we save the current + * position, put the token back on the input stream and let the + * endboundary condition parse the actual token. + */ + if (lstate->endboundary_string != NULL) { + if (strcmp(lstate->endboundary_string, yytext)) { + /* dprintf2("YYTEXT != end_boundary: '%s'\n", yytext); */ + REJECT; + } else { + lstate->current_pos += yyleng; + /* dprintf2("YYTEXT == lstate->end_boundary: '%s'\n", yytext); */ + if (lstate->body_start) { + yylval_param->position.opaque_start = + lstate->body_opaque_start; + yylval_param->position.start = lstate->body_start; + yylval_param->position.end = lstate->current_pos - yyleng; + lstate->body_opaque_start = 0; + lstate->body_start = 0; + lstate->body_end = 0; + yyless(0); + BC(endboundary); + return BODY; + } + } + } else { + } + + REJECT; +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 281 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + /** + * Make sure we only catch matching boundaries, and not other lines + * that begin with two dashes. + */ + if (lstate->boundary_string != NULL) { + if (strcmp(lstate->boundary_string, yytext)) { + /* dprintf2("YYTEXT != boundary: '%s'\n", yytext);*/ + REJECT; + } else { + /* dprintf2("YYTEXT == boundary: '%s'\n", yytext);*/ + if (lstate->body_start) { + yylval_param->position.opaque_start = lstate->body_opaque_start; + yylval_param->position.start = lstate->body_start; + yylval_param->position.end = lstate->current_pos; + lstate->body_opaque_start = 0; + lstate->body_start = 0; + lstate->body_end = 0; + yyless(0); + BC(boundary); + return BODY; + } else if (lstate->preamble_start) { + yylval_param->position.start = lstate->preamble_start; + yylval_param->position.end = lstate->current_pos; + lstate->preamble_start = lstate->preamble_end = 0; + yyless(0); + BC(boundary); + return PREAMBLE; + } else { + BC(boundary); + yylval_param->string = strdup(yytext); + lstate->current_pos += yyleng; + return(BOUNDARY); + } + } + } else { + } + + REJECT; +} + YY_BREAK +case 18: +/* rule 18 can match eol */ +YY_RULE_SETUP +#line 323 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; + lstate->lineno++; +} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 329 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; + /* dprintf2("stray CR in body...\n"); */ +} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 335 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + YY_BREAK +case YY_STATE_EOF(body): +#line 340 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + if (lstate->boundary_string == NULL && lstate->body_start) { + yylval_param->position.opaque_start = 0; + yylval_param->position.start = lstate->body_start; + yylval_param->position.end = lstate->current_pos; + lstate->body_start = 0; + return BODY; + } else if (lstate->body_start) { + return POSTAMBLE; + } + yyterminate(); +} + YY_BREAK +case 21: +/* rule 21 can match eol */ +YY_RULE_SETUP +#line 354 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + /* dprintf2("Preamble CR/LF at line %d\n", lineno); */ + lstate->lineno++; + lstate->current_pos += yyleng; +} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 361 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + yylval_param->string = strdup(yytext); + lstate->current_pos += yyleng; + return BOUNDARY; +} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 368 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + yylval_param->string = strdup(yytext); + lstate->current_pos += yyleng; + return ENDBOUNDARY; +} + YY_BREAK +case 24: +/* rule 24 can match eol */ +YY_RULE_SETUP +#line 375 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + BC(headers); + lstate->lineno++; + lstate->current_pos += yyleng; + lstate->body_opaque_start = lstate->current_pos; + return EOL; +} + YY_BREAK +case 25: +/* rule 25 can match eol */ +YY_RULE_SETUP +#line 384 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + BC(postamble); + lstate->lineno++; + lstate->current_pos += yyleng; +} + YY_BREAK +case 26: +YY_RULE_SETUP +#line 391 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + YY_BREAK +case 27: +YY_RULE_SETUP +#line 397 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; +} + YY_BREAK +case 28: +/* rule 28 can match eol */ +YY_RULE_SETUP +#line 402 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->lineno++; + lstate->current_pos += yyleng; + return EOL; +} + YY_BREAK +case 29: +YY_RULE_SETUP +#line 409 "mimeparser.l" +{ + struct lexer_state *lstate = mimeparser_yyget_extra(yyscanner); + lstate->current_pos += yyleng; + return((int)*yytext); +} + YY_BREAK +case 30: +YY_RULE_SETUP +#line 416 "mimeparser.l" +ECHO; + YY_BREAK +#line 1437 "mimeparser.yy.c" + case YY_STATE_EOF(INITIAL): + case YY_STATE_EOF(headers): + case YY_STATE_EOF(header): + case YY_STATE_EOF(headervalue): + case YY_STATE_EOF(tspecialvalue): + case YY_STATE_EOF(comment): + case YY_STATE_EOF(postamble): + case YY_STATE_EOF(preamble): + case YY_STATE_EOF(boundary): + case YY_STATE_EOF(endboundary): + case YY_STATE_EOF(endoffile): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * mimeparser_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( mimeparser_yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of mimeparser_yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + YY_FATAL_ERROR( +"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + mimeparser_yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + yyg->yy_state_ptr = yyg->yy_state_buf; + *yyg->yy_state_ptr++ = yy_current_state; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 111 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yyg->yy_state_ptr++ = yy_current_state; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + + register YY_CHAR yy_c = 1; + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 111 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 110); + if ( ! yy_is_jam ) + *yyg->yy_state_ptr++ = yy_current_state; + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner) +{ + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = yyg->yy_n_chars + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + if ( c == '\n' ){ + --yylineno; + } + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + mimeparser_yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( mimeparser_yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol ) + + do{ yylineno++; + yycolumn=0; + }while(0) +; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void mimeparser_yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + mimeparser_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + mimeparser_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + mimeparser_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + mimeparser_yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void mimeparser_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * mimeparser_yypop_buffer_state(); + * mimeparser_yypush_buffer_state(new_buffer); + */ + mimeparser_yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + mimeparser_yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (mimeparser_yywrap()) processing, but the only time this flag + * is looked at is after mimeparser_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void mimeparser_yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE mimeparser_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) mimeparser_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in mimeparser_yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) mimeparser_yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in mimeparser_yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + mimeparser_yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with mimeparser_yy_create_buffer() + * @param yyscanner The scanner object. + */ + void mimeparser_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + mimeparser_yyfree((void *) b->yy_ch_buf ,yyscanner ); + + mimeparser_yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a mimeparser_yyrestart() or at EOF. + */ + static void mimeparser_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + mimeparser_yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then mimeparser_yy_init_buffer was _probably_ + * called from mimeparser_yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void mimeparser_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + mimeparser_yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void mimeparser_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + mimeparser_yyensure_buffer_stack(yyscanner); + + /* This block is copied from mimeparser_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from mimeparser_yy_switch_to_buffer. */ + mimeparser_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void mimeparser_yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + mimeparser_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + mimeparser_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void mimeparser_yyensure_buffer_stack (yyscan_t yyscanner) +{ + int num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)mimeparser_yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)mimeparser_yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE mimeparser_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) mimeparser_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in mimeparser_yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + mimeparser_yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to mimeparser_yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * mimeparser_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE mimeparser_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) +{ + + return mimeparser_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to mimeparser_yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE mimeparser_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) mimeparser_yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in mimeparser_yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = mimeparser_yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in mimeparser_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE mimeparser_yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int mimeparser_yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int mimeparser_yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *mimeparser_yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *mimeparser_yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int mimeparser_yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *mimeparser_yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void mimeparser_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void mimeparser_yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "mimeparser_yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param line_number + * @param yyscanner The scanner object. + */ +void mimeparser_yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "mimeparser_yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see mimeparser_yy_switch_to_buffer + */ +void mimeparser_yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void mimeparser_yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int mimeparser_yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void mimeparser_yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +YYSTYPE * mimeparser_yyget_lval (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yylval; +} + +void mimeparser_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yylval = yylval_param; +} + +/* User-visible API */ + +/* mimeparser_yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int mimeparser_yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) mimeparser_yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from mimeparser_yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + + yyg->yy_state_buf = 0; + yyg->yy_state_ptr = 0; + yyg->yy_full_match = 0; + yyg->yy_lp = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * mimeparser_yylex_init() + */ + return 0; +} + +/* mimeparser_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int mimeparser_yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + mimeparser_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + mimeparser_yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + mimeparser_yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + mimeparser_yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + mimeparser_yyfree ( yyg->yy_state_buf , yyscanner); + yyg->yy_state_buf = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * mimeparser_yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + mimeparser_yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *mimeparser_yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + return (void *) malloc( size ); +} + +void *mimeparser_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void mimeparser_yyfree (void * ptr , yyscan_t yyscanner) +{ + free( (char *) ptr ); /* see mimeparser_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 416 "mimeparser.l" + + + +void reset_lexer_state(void *yyscanner, struct parser_state *pstate) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + struct lexer_state *lstate = &(pstate->lstate); + + mimeparser_yyset_extra((void*)lstate,yyscanner); + BEGIN(0); + lstate->header_state = STATE_MAIL; + lstate->lineno = 0; + lstate->current_pos = 1; + lstate->condition = 0; + + lstate->is_envelope = 1; + + lstate->message_len = 0; + lstate->buffer_length = 0; + + /* temporary marker variables */ + lstate->body_opaque_start = 0; + lstate->body_start = 0; + lstate->body_end = 0; + lstate->preamble_start = 0; + lstate->preamble_end = 0; + lstate->postamble_start = 0; + lstate->postamble_end = 0; +} + +void +PARSER_setbuffer(char *string, yyscan_t scanner) +{ + struct lexer_state *lstate = mimeparser_yyget_extra(scanner); + lstate->message_buffer = string; + mimeparser_yy_scan_string(string,scanner); +} + +void +PARSER_setfp(FILE *fp, yyscan_t yyscanner) +{ + /* looks like a bug in bison 2.2a -- the wrong code is generated for mimeparser_yyset_in !! */ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yyin_r = fp; + + if (0) { + /* This is just to make a compiler warning go away */ + yyunput(0, NULL, yyscanner); + } +} + +/** + * Counts how many lines a given string represents in the message (in case of + * folded header values, for example, or a message body). + */ +int +count_lines(char *txt) +{ + char *o; + int line; + + line = 0; + + for (o = txt; *o != '\0'; o++) + if (*o == '\n') + line++; + + return line; +} + diff --git a/main/minimime/minimime.c b/main/minimime/minimime.c new file mode 100644 index 0000000000..f96b62fb11 --- /dev/null +++ b/main/minimime/minimime.c @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * MiniMIME test program + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <getopt.h> +#include <err.h> + +#include "mm.h" + +void +usage(void) +{ + fprintf(stderr, + "MiniMIME test suite\n" + "Usage: ./minimime [-m] <filename>\n\n" + " -m : use memory based scanning\n\n" + ); + exit(1); +} + +int +main(int argc, char **argv) +{ + MM_CTX *ctx; + struct mm_mimeheader *header, *lastheader; + struct mm_warning *lastwarning; + struct mm_mimepart *part; + struct mm_content *ct; + int parts, i; + struct stat st; + int fd; + char *buf; + int scan_mode = 0; + + lastheader = NULL; + + while ((i = getopt(argc, argv, "m")) != -1) { + switch(i) { + case 'm': + scan_mode = 1; + break; + default: + usage(); + } + } + + argc -= optind; + argv += optind; + + if (argc < 1) { + usage(); + } + +#ifdef __HAVE_LEAK_DETECTION + /* Initialize memory leak detection if compiled in */ + MM_leakd_init(); +#endif + + /* Initialize MiniMIME library */ + mm_library_init(); + + /* Register all default codecs (base64/qp) */ + mm_codec_registerdefaultcodecs(); + + do { + /* Create a new context */ + ctx = mm_context_new(); + + /* Parse a file into our context */ + if (scan_mode == 0) { + i = mm_parse_file(ctx, argv[0], MM_PARSE_LOOSE, 0); + } else { + if (stat(argv[0], &st) == -1) { + err(1, "stat"); + } + + if ((fd = open(argv[0], O_RDONLY)) == -1) { + err(1, "open"); + } + + buf = (char *)malloc(st.st_size); + if (buf == NULL) { + err(1, "malloc"); + } + + if (read(fd, buf, st.st_size) != st.st_size) { + err(1, "read"); + } + + close(fd); + buf[st.st_size] = '\0'; + + i = mm_parse_mem(ctx, buf, MM_PARSE_LOOSE, 0); + } + + if (i == -1 || mm_errno != MM_ERROR_NONE) { + printf("ERROR: %s at line %d\n", mm_error_string(), mm_error_lineno()); + exit(1); + } + + /* Get the number of MIME parts */ + parts = mm_context_countparts(ctx); + if (parts == 0) { + printf("ERROR: got zero MIME parts, huh\n"); + exit(1); + } else { + if (mm_context_iscomposite(ctx)) { + printf("Got %d MIME parts\n", parts - 1); + } else { + printf("Flat message (not multipart)\n"); + } + } + + /* Get the main MIME part */ + part = mm_context_getpart(ctx, 0); + if (part == NULL) { + fprintf(stderr, "Could not get envelope part\n"); + exit(1); + } + + printf("Printing envelope headers:\n"); + /* Print all headers */ + if (mm_mimepart_headers_start(part, &lastheader) == -1) { + fprintf(stderr, "No headers in envelope\n"); + exit(1); + } + while ((header = mm_mimepart_headers_next(part, &lastheader)) != NULL) { + printf("%s: %s\n", header->name, header->value); + } + + printf("%s\n", mm_content_tostring(part->type)); + printf("\n"); + + ct = part->type; + assert(ct != NULL); + + if (mm_context_iscomposite(ctx) == 0) { + printf("Printing body part for FLAT message:\n"); + part = mm_context_getpart(ctx, 0); + printf("%s", part->body); + } + + /* Loop through all MIME parts beginning with 1 */ + for (i = 1; i < mm_context_countparts(ctx); i++) { + char *decoded; + + printf("Printing headers for MIME part %d\n", i); + + /* Get the current MIME entity */ + part = mm_context_getpart(ctx, i); + if (part == NULL) { + fprintf(stderr, "Should have %d parts but " + "couldn't retrieve part %d", + mm_context_countparts(ctx), i); + exit(1); + } + + /* Print all headers */ + if (mm_mimepart_headers_start(part, &lastheader) == -1) { + printf("Ups no headers\n"); + } + while ((header = mm_mimepart_headers_next(part, &lastheader)) != NULL) { + printf("%s: %s\n", header->name, header->value); + } + + printf("Part Type: %s\n", mm_content_tostring(part->type)); + + /* Print MIME part body */ + printf("\nPrinting message BODY:\n%s\n", (char *)part->opaque_body); + decoded = mm_mimepart_decode(part); + if (decoded != NULL) { + printf("DECODED:\n%s\n", decoded); + free(decoded); + } + } + + /* Print out all warnings that we might have received */ + if (mm_context_haswarnings(ctx) > 0) { + lastwarning = NULL; + fprintf(stderr, "WARNINGS:\n"); +#if 0 + while ((warning = mm_warning_next(ctx, &lastwarning)) + != NULL) { + fprintf(stderr, " -> %s\n", warning->message); + } +#endif + } + + printf("ENVELOPE:\n"); + + do { + char *env; + size_t env_len; + + mm_context_flatten(ctx, &env, &env_len, 0); + printf("%s", env); + + } while (0); + + mm_context_free(ctx); + ctx = NULL; + +#ifdef __HAVE_LEAK_DETECTION + MM_leakd_printallocated(); +#endif + + } while (0); + + return 0; +} diff --git a/main/minimime/mm-docs/html/bug.html b/main/minimime/mm-docs/html/bug.html new file mode 100644 index 0000000000..61f89acc88 --- /dev/null +++ b/main/minimime/mm-docs/html/bug.html @@ -0,0 +1,28 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Bug List</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1><a class="anchor" name="bug">Bug List</a></h1><a class="anchor" name="_bug000001"></a> <dl> +<dt>Global <a class="el" href="group__contenttype.html#g7bab273d117c6c0cacad20361d8fb1c8">mm_content_setmaintype</a> </dt> +<dd>The xfree() call could lead to undesirable results. Do we really need it? </dd> +</dl> +<p> +<a class="anchor" name="_bug000002"></a> <dl> +<dt>Global <a class="el" href="group__contenttype.html#g14b0738410d566ad2312405946f22212">mm_content_setsubtype</a> </dt> +<dd>The xfree() call could lead to undesirable results. Do we really need it? </dd> +</dl> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/doxygen.css b/main/minimime/mm-docs/html/doxygen.css new file mode 100644 index 0000000000..c7db1a8a04 --- /dev/null +++ b/main/minimime/mm-docs/html/doxygen.css @@ -0,0 +1,358 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +.directory { font-size: 9pt; font-weight: bold; } +.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } +.directory > h3 { margin-top: 0; } +.directory p { margin: 0px; white-space: nowrap; } +.directory div { display: none; margin: 0px; } +.directory img { vertical-align: -30%; } diff --git a/main/minimime/mm-docs/html/files.html b/main/minimime/mm-docs/html/files.html new file mode 100644 index 0000000000..df53367c9e --- /dev/null +++ b/main/minimime/mm-docs/html/files.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: File Index</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li id="current"><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>MiniMIME File List</h1>Here is a list of all documented files with brief descriptions:<table> + <tr><td class="indexkey"><b>mimeparser.h</b> <a href="mimeparser_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><b>mimeparser.tab.h</b> <a href="mimeparser_8tab_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><b>mm.h</b> <a href="mm_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__codecs_8c.html">mm_codecs.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__contenttype_8c.html">mm_contenttype.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__context_8c.html">mm_context.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__envelope_8c.html">mm_envelope.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__error_8c.html">mm_error.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__header_8c.html">mm_header.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__internal_8h.html">mm_internal.h</a> <a href="mm__internal_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><b>mm_mem.h</b> <a href="mm__mem_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__mimepart_8c.html">mm_mimepart.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__mimeutil_8c.html">mm_mimeutil.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__param_8c.html">mm_param.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__parse_8c.html">mm_parse.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><b>mm_queue.h</b> <a href="mm__queue_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><a class="el" href="mm__util_8c.html">mm_util.c</a></td><td class="indexvalue"></td></tr> + <tr><td class="indexkey"><b>mm_util.h</b> <a href="mm__util_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr> +</table> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/globals.html b/main/minimime/mm-docs/html/globals.html new file mode 100644 index 0000000000..b8a90462cf --- /dev/null +++ b/main/minimime/mm-docs/html/globals.html @@ -0,0 +1,198 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Data Fields</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li id="current"><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li id="current"><a href="globals.html"><span>All</span></a></li> + <li><a href="globals_func.html"><span>Functions</span></a></li> + </ul> +</div> +<div class="tabs"> + <ul> + <li><a href="#index_m"><span>m</span></a></li> + <li><a href="#index_x"><span>x</span></a></li> + </ul> +</div> + +<p> +Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +<p> +<h3><a class="anchor" name="index_m">- m -</a></h3><ul> +<li>mm_addchars() +: <a class="el" href="group__util.html#g0747d4b4e33644263e6d73d2d8d4818b">mm_util.c</a> +<li>mm_codec_hasdecoder() +: <a class="el" href="group__codecs.html#g6ccb0f7a1d7c870dc3dae04f31d6ccca">mm_codecs.c</a> +<li>mm_codec_hasencoder() +: <a class="el" href="group__codecs.html#g50ff257b794ceaec7aedf9ae18bfcc57">mm_codecs.c</a> +<li>mm_codec_isregistered() +: <a class="el" href="group__codecs.html#g9e19f6343128fd7e4ec57c3d55049b55">mm_codecs.c</a> +<li>mm_codec_register() +: <a class="el" href="group__codecs.html#gf97a7311c909888ed9f6f14d6f1bf397">mm_codecs.c</a> +<li>mm_codec_registerdefaultcodecs() +: <a class="el" href="group__codecs.html#gf39e72460fb85f5ca41f6e270a68aacc">mm_codecs.c</a> +<li>mm_codec_unregister() +: <a class="el" href="group__codecs.html#g0c71696bc70f834386193e3c7a0e2ca4">mm_codecs.c</a> +<li>mm_codec_unregisterall() +: <a class="el" href="group__codecs.html#g7c9e6538f84c368be2b56a3c9ba702be">mm_codecs.c</a> +<li>mm_content_attachparam() +: <a class="el" href="group__contenttype.html#g080b7ed798ed497dcd635a6bab86962f">mm_contenttype.c</a> +<li>mm_content_free() +: <a class="el" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_contenttype.c</a> +<li>mm_content_getencoding() +: <a class="el" href="group__contenttype.html#gbff87e581cd04db16e91245e9e9de67d">mm_contenttype.c</a> +<li>mm_content_getmaintype() +: <a class="el" href="group__contenttype.html#gb213081017abf6bc7e601c6bf4214924">mm_contenttype.c</a> +<li>mm_content_getparambyname() +: <a class="el" href="group__contenttype.html#g451441ee557ab5ef29477f3dc8330bf6">mm_contenttype.c</a> +<li>mm_content_getsubtype() +: <a class="el" href="group__contenttype.html#g97f77ef40c14cd0fb397bad358ee5d49">mm_contenttype.c</a> +<li>mm_content_iscomposite() +: <a class="el" href="group__contenttype.html#ga7fa479f27e73dea57257421d8fc9fc5">mm_contenttype.c</a> +<li>mm_content_isvalidencoding() +: <a class="el" href="group__contenttype.html#gb724b5979182fa272fe4fd1b72b395d5">mm_contenttype.c</a> +<li>mm_content_new() +: <a class="el" href="group__contenttype.html#g3880ac74a20b4a9f610a4159568e1801">mm_contenttype.c</a> +<li>mm_content_paramstostring() +: <a class="el" href="group__contenttype.html#g792e7d33fbb30e0123408bcef9d3204c">mm_contenttype.c</a> +<li>mm_content_setencoding() +: <a class="el" href="group__contenttype.html#gea945e48ac5cca846715543634b9afe4">mm_contenttype.c</a> +<li>mm_content_setmaintype() +: <a class="el" href="group__contenttype.html#g7bab273d117c6c0cacad20361d8fb1c8">mm_contenttype.c</a> +<li>mm_content_setsubtype() +: <a class="el" href="group__contenttype.html#g14b0738410d566ad2312405946f22212">mm_contenttype.c</a> +<li>mm_content_tostring() +: <a class="el" href="group__contenttype.html#g18a99c95e35a76f13a77a83c4231e738">mm_contenttype.c</a> +<li>mm_context_attachpart() +: <a class="el" href="group__context.html#gec3ca486a61b392ff68774242086768e">mm_context.c</a> +<li>mm_context_attachpart_after() +: <a class="el" href="group__context.html#g73a3dd187053aeabca4836dc28a6c468">mm_context.c</a> +<li>mm_context_countparts() +: <a class="el" href="group__context.html#gf5bb032ad1c481d31d7b1b0710939712">mm_context.c</a> +<li>mm_context_deletepart() +: <a class="el" href="group__context.html#g53d20c33a401539ef1ffa45f3dddb983">mm_context.c</a> +<li>mm_context_flatten() +: <a class="el" href="group__context.html#g5288136ab923605f6508c09359ae5772">mm_context.c</a> +<li>mm_context_free() +: <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context.c</a> +<li>mm_context_generateboundary() +: <a class="el" href="group__context.html#g9710e485f51167099d90f0d659979068">mm_context.c</a> +<li>mm_context_getpart() +: <a class="el" href="group__context.html#g57fea229675f3e56a77eb40bb8193ee3">mm_context.c</a> +<li>mm_context_haswarnings() +: <a class="el" href="group__context.html#g8733dee7d83d3205349a7ee4ee5b2750">mm_context.c</a> +<li>mm_context_iscomposite() +: <a class="el" href="group__context.html#g1e73cadba4acd3ef9dd148dd0c2c3e70">mm_context.c</a> +<li>mm_context_new() +: <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context.c</a> +<li>mm_context_setpreamble() +: <a class="el" href="group__context.html#gc0e7cc297516618d4773830a1988fc8d">mm_context.c</a> +<li>mm_envelope_getheaders() +: <a class="el" href="group__envelope.html#g38f1164142cedfc3253b068a81f85563">mm_envelope.c</a> +<li>mm_envelope_getrecipients() +: <a class="el" href="group__envelope.html#ge63da17c56867ca2406a4eaf73230baf">mm_envelope.c</a> +<li>mm_envelope_setheader() +: <a class="el" href="group__envelope.html#gb2c43c1645e42ae0860c902ce1dda788">mm_envelope.c</a> +<li>mm_error_init() +: <a class="el" href="group__error.html#g69de7c9bee1d535593a55807590de543">mm_error.c</a> +<li>mm_error_setmsg() +: <a class="el" href="group__error.html#g92006c97728639d8f32f5bc4c6e2a47f">mm_error.c</a> +<li>mm_error_string() +: <a class="el" href="group__error.html#g8654857a3ac349b87d798902912371a3">mm_error.c</a> +<li>mm_mimeheader_free() +: <a class="el" href="mm__header_8c.html#61e3e62728f720ac381196ec59303064">mm_header.c</a> +<li>mm_mimeheader_generate() +: <a class="el" href="mm__header_8c.html#07a7f7dcebc91aa86f5478e1d84341a1">mm_header.c</a> +<li>mm_mimeheader_new() +: <a class="el" href="mm__header_8c.html#2f2c5f2f640111caf3096ed46b5986a4">mm_header.c</a> +<li>mm_mimepart_attachcontenttype() +: <a class="el" href="group__mimepart.html#g01822bc93b4741af75b5379384354e37">mm_mimepart.c</a> +<li>mm_mimepart_attachheader() +: <a class="el" href="group__mimepart.html#g46a674ff6b9873c0c45fa4eb5d94fd62">mm_mimepart.c</a> +<li>mm_mimepart_countheaderbyname() +: <a class="el" href="group__mimepart.html#gf89da502ac54306994bdb452448a8026">mm_mimepart.c</a> +<li>mm_mimepart_countheaders() +: <a class="el" href="group__mimepart.html#g44c78abfb0535312bcb427a2cd220026">mm_mimepart.c</a> +<li>mm_mimepart_decode() +: <a class="el" href="group__mimepart.html#g4551bf4460e5d165bbcd9f32d4f625de">mm_mimepart.c</a> +<li>mm_mimepart_flatten() +: <a class="el" href="group__mimepart.html#gf19d3ace5ae174b3eaa35f9ddbe6e216">mm_mimepart.c</a> +<li>mm_mimepart_free() +: <a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart.c</a> +<li>mm_mimepart_fromfile() +: <a class="el" href="group__mimepart.html#ged8112012a337371ae8093adb1ab6d27">mm_mimepart.c</a> +<li>mm_mimepart_getbody() +: <a class="el" href="group__mimepart.html#g52dc9f27a2801e4f6abb1effd2ed838d">mm_mimepart.c</a> +<li>mm_mimepart_getheaderbyname() +: <a class="el" href="group__mimepart.html#ga3ca298eaa82f4ef3ea731511ac84e53">mm_mimepart.c</a> +<li>mm_mimepart_getheadervalue() +: <a class="el" href="group__mimepart.html#g779f11f7a6a54f83763b5ef6ff87e48f">mm_mimepart.c</a> +<li>mm_mimepart_getlength() +: <a class="el" href="group__mimepart.html#gf8ccae1737dc4b9b91958fe448da677f">mm_mimepart.c</a> +<li>mm_mimepart_gettype() +: <a class="el" href="group__mimepart.html#g210e2ceee56f8349f6778006da87d080">mm_mimepart.c</a> +<li>mm_mimepart_headers_next() +: <a class="el" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart.c</a> +<li>mm_mimepart_headers_start() +: <a class="el" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart.c</a> +<li>mm_mimepart_new() +: <a class="el" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart.c</a> +<li>mm_mimepart_setbody() +: <a class="el" href="group__mimepart.html#gd1def098c00edc546b03e98e9ff8b27a">mm_mimepart.c</a> +<li>mm_mimepart_setdefaultcontenttype() +: <a class="el" href="group__mimepart.html#g164bb39a266559574c252f11266809ff">mm_mimepart.c</a> +<li>mm_mimeutil_gendate() +: <a class="el" href="mm__mimeutil_8c.html#a7b7f63b42dfa7a7f907b615aa4cd057">mm_mimeutil.c</a> +<li>mm_param_free() +: <a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param.c</a> +<li>mm_param_generate() +: <a class="el" href="group__param.html#gd3970def45b8bede334f4b89a41dec15">mm_param.c</a> +<li>mm_param_getname() +: <a class="el" href="group__param.html#g0e0ddccf47a2b1e0ad5bcc52c7b39753">mm_param.c</a> +<li>mm_param_getvalue() +: <a class="el" href="group__param.html#g3c6f8cddd409de3000c31584e140561e">mm_param.c</a> +<li>mm_param_new() +: <a class="el" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param.c</a> +<li>mm_param_setname() +: <a class="el" href="group__param.html#g2a266c63c7e89cf829b2af8e995e55e8">mm_param.c</a> +<li>mm_param_setvalue() +: <a class="el" href="group__param.html#gca3e636ab5700462eb32ca5bc19e4cc6">mm_param.c</a> +<li>mm_parse_file() +: <a class="el" href="mm__parse_8c.html#cc9f623682b05f330c46e72e4e9d66cc">mm_parse.c</a> +<li>mm_parse_mem() +: <a class="el" href="mm__parse_8c.html#58c960b6017f13d4e4ec5f09b3c38495">mm_parse.c</a> +<li>mm_stripchars() +: <a class="el" href="group__util.html#gf62be7dd21e545f8db72f3c9e3b6a3c3">mm_util.c</a> +<li>mm_uncomment() +: <a class="el" href="group__util.html#g49c016ff4cfd02f1b019c4dce5aac357">mm_util.c</a> +<li>mm_unquote() +: <a class="el" href="group__util.html#gf0f89a29a634f6f1f833abb1e214a6b1">mm_util.c</a> +</ul> +<h3><a class="anchor" name="index_x">- x -</a></h3><ul> +<li>xmalloc() +: <a class="el" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">mm_util.c</a> +<li>xrealloc() +: <a class="el" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">mm_util.c</a> +<li>xstrsep() +: <a class="el" href="group__util.html#g3ae25483c8a42f6562f2a916a511228f">mm_util.c</a> +</ul> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/globals_func.html b/main/minimime/mm-docs/html/globals_func.html new file mode 100644 index 0000000000..7794fda651 --- /dev/null +++ b/main/minimime/mm-docs/html/globals_func.html @@ -0,0 +1,198 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Data Fields</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li id="current"><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="globals.html"><span>All</span></a></li> + <li id="current"><a href="globals_func.html"><span>Functions</span></a></li> + </ul> +</div> +<div class="tabs"> + <ul> + <li><a href="#index_m"><span>m</span></a></li> + <li><a href="#index_x"><span>x</span></a></li> + </ul> +</div> + +<p> + +<p> +<h3><a class="anchor" name="index_m">- m -</a></h3><ul> +<li>mm_addchars() +: <a class="el" href="group__util.html#g0747d4b4e33644263e6d73d2d8d4818b">mm_util.c</a> +<li>mm_codec_hasdecoder() +: <a class="el" href="group__codecs.html#g6ccb0f7a1d7c870dc3dae04f31d6ccca">mm_codecs.c</a> +<li>mm_codec_hasencoder() +: <a class="el" href="group__codecs.html#g50ff257b794ceaec7aedf9ae18bfcc57">mm_codecs.c</a> +<li>mm_codec_isregistered() +: <a class="el" href="group__codecs.html#g9e19f6343128fd7e4ec57c3d55049b55">mm_codecs.c</a> +<li>mm_codec_register() +: <a class="el" href="group__codecs.html#gf97a7311c909888ed9f6f14d6f1bf397">mm_codecs.c</a> +<li>mm_codec_registerdefaultcodecs() +: <a class="el" href="group__codecs.html#gf39e72460fb85f5ca41f6e270a68aacc">mm_codecs.c</a> +<li>mm_codec_unregister() +: <a class="el" href="group__codecs.html#g0c71696bc70f834386193e3c7a0e2ca4">mm_codecs.c</a> +<li>mm_codec_unregisterall() +: <a class="el" href="group__codecs.html#g7c9e6538f84c368be2b56a3c9ba702be">mm_codecs.c</a> +<li>mm_content_attachparam() +: <a class="el" href="group__contenttype.html#g080b7ed798ed497dcd635a6bab86962f">mm_contenttype.c</a> +<li>mm_content_free() +: <a class="el" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_contenttype.c</a> +<li>mm_content_getencoding() +: <a class="el" href="group__contenttype.html#gbff87e581cd04db16e91245e9e9de67d">mm_contenttype.c</a> +<li>mm_content_getmaintype() +: <a class="el" href="group__contenttype.html#gb213081017abf6bc7e601c6bf4214924">mm_contenttype.c</a> +<li>mm_content_getparambyname() +: <a class="el" href="group__contenttype.html#g451441ee557ab5ef29477f3dc8330bf6">mm_contenttype.c</a> +<li>mm_content_getsubtype() +: <a class="el" href="group__contenttype.html#g97f77ef40c14cd0fb397bad358ee5d49">mm_contenttype.c</a> +<li>mm_content_iscomposite() +: <a class="el" href="group__contenttype.html#ga7fa479f27e73dea57257421d8fc9fc5">mm_contenttype.c</a> +<li>mm_content_isvalidencoding() +: <a class="el" href="group__contenttype.html#gb724b5979182fa272fe4fd1b72b395d5">mm_contenttype.c</a> +<li>mm_content_new() +: <a class="el" href="group__contenttype.html#g3880ac74a20b4a9f610a4159568e1801">mm_contenttype.c</a> +<li>mm_content_paramstostring() +: <a class="el" href="group__contenttype.html#g792e7d33fbb30e0123408bcef9d3204c">mm_contenttype.c</a> +<li>mm_content_setencoding() +: <a class="el" href="group__contenttype.html#gea945e48ac5cca846715543634b9afe4">mm_contenttype.c</a> +<li>mm_content_setmaintype() +: <a class="el" href="group__contenttype.html#g7bab273d117c6c0cacad20361d8fb1c8">mm_contenttype.c</a> +<li>mm_content_setsubtype() +: <a class="el" href="group__contenttype.html#g14b0738410d566ad2312405946f22212">mm_contenttype.c</a> +<li>mm_content_tostring() +: <a class="el" href="group__contenttype.html#g18a99c95e35a76f13a77a83c4231e738">mm_contenttype.c</a> +<li>mm_context_attachpart() +: <a class="el" href="group__context.html#gec3ca486a61b392ff68774242086768e">mm_context.c</a> +<li>mm_context_attachpart_after() +: <a class="el" href="group__context.html#g73a3dd187053aeabca4836dc28a6c468">mm_context.c</a> +<li>mm_context_countparts() +: <a class="el" href="group__context.html#gf5bb032ad1c481d31d7b1b0710939712">mm_context.c</a> +<li>mm_context_deletepart() +: <a class="el" href="group__context.html#g53d20c33a401539ef1ffa45f3dddb983">mm_context.c</a> +<li>mm_context_flatten() +: <a class="el" href="group__context.html#g5288136ab923605f6508c09359ae5772">mm_context.c</a> +<li>mm_context_free() +: <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context.c</a> +<li>mm_context_generateboundary() +: <a class="el" href="group__context.html#g9710e485f51167099d90f0d659979068">mm_context.c</a> +<li>mm_context_getpart() +: <a class="el" href="group__context.html#g57fea229675f3e56a77eb40bb8193ee3">mm_context.c</a> +<li>mm_context_haswarnings() +: <a class="el" href="group__context.html#g8733dee7d83d3205349a7ee4ee5b2750">mm_context.c</a> +<li>mm_context_iscomposite() +: <a class="el" href="group__context.html#g1e73cadba4acd3ef9dd148dd0c2c3e70">mm_context.c</a> +<li>mm_context_new() +: <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context.c</a> +<li>mm_context_setpreamble() +: <a class="el" href="group__context.html#gc0e7cc297516618d4773830a1988fc8d">mm_context.c</a> +<li>mm_envelope_getheaders() +: <a class="el" href="group__envelope.html#g38f1164142cedfc3253b068a81f85563">mm_envelope.c</a> +<li>mm_envelope_getrecipients() +: <a class="el" href="group__envelope.html#ge63da17c56867ca2406a4eaf73230baf">mm_envelope.c</a> +<li>mm_envelope_setheader() +: <a class="el" href="group__envelope.html#gb2c43c1645e42ae0860c902ce1dda788">mm_envelope.c</a> +<li>mm_error_init() +: <a class="el" href="group__error.html#g69de7c9bee1d535593a55807590de543">mm_error.c</a> +<li>mm_error_setmsg() +: <a class="el" href="group__error.html#g92006c97728639d8f32f5bc4c6e2a47f">mm_error.c</a> +<li>mm_error_string() +: <a class="el" href="group__error.html#g8654857a3ac349b87d798902912371a3">mm_error.c</a> +<li>mm_mimeheader_free() +: <a class="el" href="mm__header_8c.html#61e3e62728f720ac381196ec59303064">mm_header.c</a> +<li>mm_mimeheader_generate() +: <a class="el" href="mm__header_8c.html#07a7f7dcebc91aa86f5478e1d84341a1">mm_header.c</a> +<li>mm_mimeheader_new() +: <a class="el" href="mm__header_8c.html#2f2c5f2f640111caf3096ed46b5986a4">mm_header.c</a> +<li>mm_mimepart_attachcontenttype() +: <a class="el" href="group__mimepart.html#g01822bc93b4741af75b5379384354e37">mm_mimepart.c</a> +<li>mm_mimepart_attachheader() +: <a class="el" href="group__mimepart.html#g46a674ff6b9873c0c45fa4eb5d94fd62">mm_mimepart.c</a> +<li>mm_mimepart_countheaderbyname() +: <a class="el" href="group__mimepart.html#gf89da502ac54306994bdb452448a8026">mm_mimepart.c</a> +<li>mm_mimepart_countheaders() +: <a class="el" href="group__mimepart.html#g44c78abfb0535312bcb427a2cd220026">mm_mimepart.c</a> +<li>mm_mimepart_decode() +: <a class="el" href="group__mimepart.html#g4551bf4460e5d165bbcd9f32d4f625de">mm_mimepart.c</a> +<li>mm_mimepart_flatten() +: <a class="el" href="group__mimepart.html#gf19d3ace5ae174b3eaa35f9ddbe6e216">mm_mimepart.c</a> +<li>mm_mimepart_free() +: <a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart.c</a> +<li>mm_mimepart_fromfile() +: <a class="el" href="group__mimepart.html#ged8112012a337371ae8093adb1ab6d27">mm_mimepart.c</a> +<li>mm_mimepart_getbody() +: <a class="el" href="group__mimepart.html#g52dc9f27a2801e4f6abb1effd2ed838d">mm_mimepart.c</a> +<li>mm_mimepart_getheaderbyname() +: <a class="el" href="group__mimepart.html#ga3ca298eaa82f4ef3ea731511ac84e53">mm_mimepart.c</a> +<li>mm_mimepart_getheadervalue() +: <a class="el" href="group__mimepart.html#g779f11f7a6a54f83763b5ef6ff87e48f">mm_mimepart.c</a> +<li>mm_mimepart_getlength() +: <a class="el" href="group__mimepart.html#gf8ccae1737dc4b9b91958fe448da677f">mm_mimepart.c</a> +<li>mm_mimepart_gettype() +: <a class="el" href="group__mimepart.html#g210e2ceee56f8349f6778006da87d080">mm_mimepart.c</a> +<li>mm_mimepart_headers_next() +: <a class="el" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart.c</a> +<li>mm_mimepart_headers_start() +: <a class="el" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart.c</a> +<li>mm_mimepart_new() +: <a class="el" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart.c</a> +<li>mm_mimepart_setbody() +: <a class="el" href="group__mimepart.html#gd1def098c00edc546b03e98e9ff8b27a">mm_mimepart.c</a> +<li>mm_mimepart_setdefaultcontenttype() +: <a class="el" href="group__mimepart.html#g164bb39a266559574c252f11266809ff">mm_mimepart.c</a> +<li>mm_mimeutil_gendate() +: <a class="el" href="mm__mimeutil_8c.html#a7b7f63b42dfa7a7f907b615aa4cd057">mm_mimeutil.c</a> +<li>mm_param_free() +: <a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param.c</a> +<li>mm_param_generate() +: <a class="el" href="group__param.html#gd3970def45b8bede334f4b89a41dec15">mm_param.c</a> +<li>mm_param_getname() +: <a class="el" href="group__param.html#g0e0ddccf47a2b1e0ad5bcc52c7b39753">mm_param.c</a> +<li>mm_param_getvalue() +: <a class="el" href="group__param.html#g3c6f8cddd409de3000c31584e140561e">mm_param.c</a> +<li>mm_param_new() +: <a class="el" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param.c</a> +<li>mm_param_setname() +: <a class="el" href="group__param.html#g2a266c63c7e89cf829b2af8e995e55e8">mm_param.c</a> +<li>mm_param_setvalue() +: <a class="el" href="group__param.html#gca3e636ab5700462eb32ca5bc19e4cc6">mm_param.c</a> +<li>mm_parse_file() +: <a class="el" href="mm__parse_8c.html#cc9f623682b05f330c46e72e4e9d66cc">mm_parse.c</a> +<li>mm_parse_mem() +: <a class="el" href="mm__parse_8c.html#58c960b6017f13d4e4ec5f09b3c38495">mm_parse.c</a> +<li>mm_stripchars() +: <a class="el" href="group__util.html#gf62be7dd21e545f8db72f3c9e3b6a3c3">mm_util.c</a> +<li>mm_uncomment() +: <a class="el" href="group__util.html#g49c016ff4cfd02f1b019c4dce5aac357">mm_util.c</a> +<li>mm_unquote() +: <a class="el" href="group__util.html#gf0f89a29a634f6f1f833abb1e214a6b1">mm_util.c</a> +</ul> +<h3><a class="anchor" name="index_x">- x -</a></h3><ul> +<li>xmalloc() +: <a class="el" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">mm_util.c</a> +<li>xrealloc() +: <a class="el" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">mm_util.c</a> +<li>xstrsep() +: <a class="el" href="group__util.html#g3ae25483c8a42f6562f2a916a511228f">mm_util.c</a> +</ul> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__codecs.html b/main/minimime/mm-docs/html/group__codecs.html new file mode 100644 index 0000000000..a803cd67c0 --- /dev/null +++ b/main/minimime/mm-docs/html/group__codecs.html @@ -0,0 +1,243 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Manipulating MiniMIME codecs</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>Manipulating MiniMIME codecs</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Codec manipulation</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g6ccb0f7a1d7c870dc3dae04f31d6ccca">mm_codec_hasdecoder</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g50ff257b794ceaec7aedf9ae18bfcc57">mm_codec_hasencoder</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g9e19f6343128fd7e4ec57c3d55049b55">mm_codec_isregistered</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#gf97a7311c909888ed9f6f14d6f1bf397">mm_codec_register</a> (const char *encoding, char *(*encoder)(char *data, u_int32_t i), char *(*decoder)(char *data))</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g0c71696bc70f834386193e3c7a0e2ca4">mm_codec_unregister</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g7c9e6538f84c368be2b56a3c9ba702be">mm_codec_unregisterall</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#gf39e72460fb85f5ca41f6e270a68aacc">mm_codec_registerdefaultcodecs</a> (void)</td></tr> + +</table> +<hr><h2>Function Documentation</h2> +<a class="anchor" name="g6ccb0f7a1d7c870dc3dae04f31d6ccca"></a><!-- doxytag: member="mm_codecs.c::mm_codec_hasdecoder" ref="g6ccb0f7a1d7c870dc3dae04f31d6ccca" args="(const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_codec_hasdecoder </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Looks up whether a context has an decoder installed for a given encoding<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>The encoding specifier to look up </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if a decoder is installed or 0 if not </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g50ff257b794ceaec7aedf9ae18bfcc57"></a><!-- doxytag: member="mm_codecs.c::mm_codec_hasencoder" ref="g50ff257b794ceaec7aedf9ae18bfcc57" args="(const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_codec_hasencoder </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Looks up whether a context has an encoder installed for a given encoding<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>The encoding specifier to look up </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if an encoder is installed or 0 if not </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g9e19f6343128fd7e4ec57c3d55049b55"></a><!-- doxytag: member="mm_codecs.c::mm_codec_isregistered" ref="g9e19f6343128fd7e4ec57c3d55049b55" args="(const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_codec_isregistered </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Looks up whether a codec for a given encoding is installed to a context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>The encoding specifier to look up </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if a codec was found or 0 if not </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gf97a7311c909888ed9f6f14d6f1bf397"></a><!-- doxytag: member="mm_codecs.c::mm_codec_register" ref="gf97a7311c909888ed9f6f14d6f1bf397" args="(const char *encoding, char *(*encoder)(char *data, u_int32_t i), char *(*decoder)(char *data))" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_codec_register </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char *(*)(char *data, u_int32_t i) </td> + <td class="paramname"> <em>encoder</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char *(*)(char *data) </td> + <td class="paramname"> <em>decoder</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Registers a codec with the MiniMIME library<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>The encoding specifier for which to register the codec </td></tr> + <tr><td valign="top"></td><td valign="top"><em>encoder</em> </td><td>The encoder function for this encoding </td></tr> + <tr><td valign="top"></td><td valign="top"><em>decoder</em> </td><td>The decoder function for this encoding </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if successfull or 0 if not</dd></dl> +This function registers a codec for a given MiniMIME context. The codec may provide an decoder, an encoder or both (but not none). If there is a codec already installed for this encoding, the function will puke. +</div> +</div><p> +<a class="anchor" name="gf39e72460fb85f5ca41f6e270a68aacc"></a><!-- doxytag: member="mm_codecs.c::mm_codec_registerdefaultcodecs" ref="gf39e72460fb85f5ca41f6e270a68aacc" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_codec_registerdefaultcodecs </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Registers the default codecs to a MiniMIME context<p> +This functions registers the codecs for the following encodings to a MiniMIME context:<p> +<ul> +<li>Base64</li><li>(TODO:) Quoted-Printable </li></ul> + +</div> +</div><p> +<a class="anchor" name="g0c71696bc70f834386193e3c7a0e2ca4"></a><!-- doxytag: member="mm_codecs.c::mm_codec_unregister" ref="g0c71696bc70f834386193e3c7a0e2ca4" args="(const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_codec_unregister </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Unregisters a MiniMIME codec<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>The encoding specifier which to unregister </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if unregistered successfully, or -1 if there was no such codec </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g7c9e6538f84c368be2b56a3c9ba702be"></a><!-- doxytag: member="mm_codecs.c::mm_codec_unregisterall" ref="g7c9e6538f84c368be2b56a3c9ba702be" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_codec_unregisterall </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Unregisters all codecs within a context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if all codecs were unregistered successfully or -1 if an error occured. </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>Foobar </dd></dl> + +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__contenttype.html b/main/minimime/mm-docs/html/group__contenttype.html new file mode 100644 index 0000000000..973f98a8d8 --- /dev/null +++ b/main/minimime/mm-docs/html/group__contenttype.html @@ -0,0 +1,516 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Accessing and manipulating Content-Type objects</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>Accessing and manipulating Content-Type objects</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions for manipulating Content-Type objects</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_content * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g3880ac74a20b4a9f610a4159568e1801">mm_content_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_content_free</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g080b7ed798ed497dcd635a6bab86962f">mm_content_attachparam</a> (struct mm_content *ct, struct mm_param *param)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g451441ee557ab5ef29477f3dc8330bf6">mm_content_getparambyname</a> (struct mm_content *ct, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ba63e679d2b49aceb6cfec8a6752581"></a><!-- doxytag: member="contenttype::mm_content_getparamobjbyname" ref="g1ba63e679d2b49aceb6cfec8a6752581" args="(struct mm_content *ct, const char *name)" --> +mm_param * </td><td class="memItemRight" valign="bottom"><b>mm_content_getparamobjbyname</b> (struct mm_content *ct, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g7bab273d117c6c0cacad20361d8fb1c8">mm_content_setmaintype</a> (struct mm_content *ct, char *value, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gb213081017abf6bc7e601c6bf4214924">mm_content_getmaintype</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g97f77ef40c14cd0fb397bad358ee5d49">mm_content_getsubtype</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga6d8453eb35bd695c4944e53b7040b65"></a><!-- doxytag: member="contenttype::mm_content_gettype" ref="ga6d8453eb35bd695c4944e53b7040b65" args="(struct mm_content *ct)" --> +char * </td><td class="memItemRight" valign="bottom"><b>mm_content_gettype</b> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g14b0738410d566ad2312405946f22212">mm_content_setsubtype</a> (struct mm_content *ct, char *value, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g878686678ea2ba97aa8edb1206a564d8"></a><!-- doxytag: member="contenttype::mm_content_settype" ref="g878686678ea2ba97aa8edb1206a564d8" args="(struct mm_content *ct, const char *fmt,...)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_content_settype</b> (struct mm_content *ct, const char *fmt,...)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#ga7fa479f27e73dea57257421d8fc9fc5">mm_content_iscomposite</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gb724b5979182fa272fe4fd1b72b395d5">mm_content_isvalidencoding</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gea945e48ac5cca846715543634b9afe4">mm_content_setencoding</a> (struct mm_content *ct, const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gbff87e581cd04db16e91245e9e9de67d">mm_content_getencoding</a> (struct mm_content *ct, const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g792e7d33fbb30e0123408bcef9d3204c">mm_content_paramstostring</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g18a99c95e35a76f13a77a83c4231e738">mm_content_tostring</a> (struct mm_content *ct)</td></tr> + +<tr><td colspan="2"><br><h2>Variables</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6c458a8611981109bf0519b5ae21e12e"></a><!-- doxytag: member="contenttype::type" ref="g6c458a8611981109bf0519b5ae21e12e" args="" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_encoding_mappings::type</b></td></tr> + +</table> +<hr><h2>Function Documentation</h2> +<a class="anchor" name="g080b7ed798ed497dcd635a6bab86962f"></a><!-- doxytag: member="mm_contenttype.c::mm_content_attachparam" ref="g080b7ed798ed497dcd635a6bab86962f" args="(struct mm_content *ct, struct mm_param *param)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_attachparam </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_param * </td> + <td class="paramname"> <em>param</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Attaches a parameter to a Content-Type object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>The target Content-Type object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>param</em> </td><td>The Content-Type parameter which to attach </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success and -1 on failure </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g404314481125849bce869ee4b0f647af"></a><!-- doxytag: member="mm_contenttype.c::mm_content_free" ref="g404314481125849bce869ee4b0f647af" args="(struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_content_free </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Releases all memory associated with an Content-Type object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A Content-Type object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>Nothing </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gbff87e581cd04db16e91245e9e9de67d"></a><!-- doxytag: member="mm_contenttype.c::mm_content_getencoding" ref="gbff87e581cd04db16e91245e9e9de67d" args="(struct mm_content *ct, const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_getencoding </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the numerical ID of a content encoding identifier<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid Content Type object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>A string representing the content encoding identifier </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The numerical ID of the content encoding </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gb213081017abf6bc7e601c6bf4214924"></a><!-- doxytag: member="mm_contenttype.c::mm_content_getmaintype" ref="gb213081017abf6bc7e601c6bf4214924" args="(struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_content_getmaintype </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Retrieves the main MIME type stored in a Content-Type object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid Content-Type object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the string representing the main type </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g451441ee557ab5ef29477f3dc8330bf6"></a><!-- doxytag: member="mm_contenttype.c::mm_content_getparambyname" ref="g451441ee557ab5ef29477f3dc8330bf6" args="(struct mm_content *ct, const char *name)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_content_getparambyname </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets a parameter value from a Content-Type object.<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>the Content-Type object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>the name of the parameter to retrieve </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value of the parameter on success or a NULL pointer on failure </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g97f77ef40c14cd0fb397bad358ee5d49"></a><!-- doxytag: member="mm_contenttype.c::mm_content_getsubtype" ref="g97f77ef40c14cd0fb397bad358ee5d49" args="(struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_content_getsubtype </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Retrieves the sub MIME type stored in a Content-Type object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid Content-Type object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the string holding the current sub MIME type </dd></dl> + +</div> +</div><p> +<a class="anchor" name="ga7fa479f27e73dea57257421d8fc9fc5"></a><!-- doxytag: member="mm_contenttype.c::mm_content_iscomposite" ref="ga7fa479f27e73dea57257421d8fc9fc5" args="(struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_iscomposite </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Checks whether the Content-Type represents a composite message or not<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid Content-Type object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if the Content-Type object represents a composite message or 0 if not. </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gb724b5979182fa272fe4fd1b72b395d5"></a><!-- doxytag: member="mm_contenttype.c::mm_content_isvalidencoding" ref="gb724b5979182fa272fe4fd1b72b395d5" args="(const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_isvalidencoding </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Verifies whether a string represents a valid encoding or not.<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>The string to verify </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if the encoding string is valid or 0 if not </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g3880ac74a20b4a9f610a4159568e1801"></a><!-- doxytag: member="mm_contenttype.c::mm_content_new" ref="g3880ac74a20b4a9f610a4159568e1801" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_content* mm_content_new </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a new object to hold a Content-Type representation. The allocated memory must later be freed using <a class="el" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_content_free()</a><p> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>An object representing a MIME Content-Type </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_content_free</a> </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g792e7d33fbb30e0123408bcef9d3204c"></a><!-- doxytag: member="mm_contenttype.c::mm_content_paramstostring" ref="g792e7d33fbb30e0123408bcef9d3204c" args="(struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_content_paramstostring </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Constructs a MIME conform string of Content-Type parameters.<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid Content Type object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to a string representing the Content-Type parameters in MIME terminology, or NULL if either the Content-Type object is invalid, has no parameters or no memory could be allocated.</dd></dl> +This function constructs a MIME conform string including all the parameters associated with the given Content-Type object. It should NOT be used if you need an opaque copy of the current MIME part (e.g. for PGP purposes). +</div> +</div><p> +<a class="anchor" name="gea945e48ac5cca846715543634b9afe4"></a><!-- doxytag: member="mm_contenttype.c::mm_content_setencoding" ref="gea945e48ac5cca846715543634b9afe4" args="(struct mm_content *ct, const char *encoding)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_setencoding </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>encoding</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Set the encoding of a MIME entitity according to a mapping table<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid content type object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>encoding</em> </td><td>A string representing the content encoding </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if successfull or -1 if not (i.e. unknown content encoding) </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g7bab273d117c6c0cacad20361d8fb1c8"></a><!-- doxytag: member="mm_contenttype.c::mm_content_setmaintype" ref="g7bab273d117c6c0cacad20361d8fb1c8" args="(struct mm_content *ct, char *value, int copy)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_setmaintype </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>value</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>copy</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets the MIME main type for a MIME Content-Type object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>The MIME Content-Type object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>value</em> </td><td>The value which to set the main type to </td></tr> + <tr><td valign="top"></td><td valign="top"><em>copy</em> </td><td>Whether to make a copy of the value (original value must be freed afterwards to prevent memory leaks). </td></tr> + </table> +</dl> + +<p> +<dl compact><dt><b><a class="el" href="bug.html#_bug000001">Bug:</a></b></dt><dd>The xfree() call could lead to undesirable results. Do we really need it? </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g14b0738410d566ad2312405946f22212"></a><!-- doxytag: member="mm_contenttype.c::mm_content_setsubtype" ref="g14b0738410d566ad2312405946f22212" args="(struct mm_content *ct, char *value, int copy)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_content_setsubtype </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>value</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>copy</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets the MIME sub type for a MIME Content-Type object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>The MIME Content-Type object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>value</em> </td><td>The value which to set the sub type to </td></tr> + <tr><td valign="top"></td><td valign="top"><em>copy</em> </td><td>Whether to make a copy of the value (original value must be freed afterwards to prevent memory leaks). </td></tr> + </table> +</dl> + +<p> +<dl compact><dt><b><a class="el" href="bug.html#_bug000002">Bug:</a></b></dt><dd>The xfree() call could lead to undesirable results. Do we really need it? </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g18a99c95e35a76f13a77a83c4231e738"></a><!-- doxytag: member="mm_contenttype.c::mm_content_tostring" ref="g18a99c95e35a76f13a77a83c4231e738" args="(struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_content_tostring </td> + <td>(</td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a Content-Type header according to the object given<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>A valid Content-Type object </td></tr> + </table> +</dl> + +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__context.html b/main/minimime/mm-docs/html/group__context.html new file mode 100644 index 0000000000..832151ea1f --- /dev/null +++ b/main/minimime/mm-docs/html/group__context.html @@ -0,0 +1,465 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Accessing and manipulating MIME contexts</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>Accessing and manipulating MIME contexts</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Manipulating MiniMIME contexts</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">MM_CTX * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#gec3ca486a61b392ff68774242086768e">mm_context_attachpart</a> (MM_CTX *ctx, struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g73a3dd187053aeabca4836dc28a6c468">mm_context_attachpart_after</a> (MM_CTX *ctx, struct mm_mimepart *part, int pos)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g53d20c33a401539ef1ffa45f3dddb983">mm_context_deletepart</a> (MM_CTX *ctx, int which, int freemem)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#gf5bb032ad1c481d31d7b1b0710939712">mm_context_countparts</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimepart * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g57fea229675f3e56a77eb40bb8193ee3">mm_context_getpart</a> (MM_CTX *ctx, int which)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g1e73cadba4acd3ef9dd148dd0c2c3e70">mm_context_iscomposite</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g8733dee7d83d3205349a7ee4ee5b2750">mm_context_haswarnings</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g9710e485f51167099d90f0d659979068">mm_context_generateboundary</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#gc0e7cc297516618d4773830a1988fc8d">mm_context_setpreamble</a> (MM_CTX *ctx, char *preamble)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ebbdd51106ccdee77ca421f9692bde7"></a><!-- doxytag: member="context::mm_context_getpreamble" ref="g1ebbdd51106ccdee77ca421f9692bde7" args="(MM_CTX *ctx)" --> +char * </td><td class="memItemRight" valign="bottom"><b>mm_context_getpreamble</b> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g5288136ab923605f6508c09359ae5772">mm_context_flatten</a> (MM_CTX *ctx, char **flat, size_t *length, int flags)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +Each message in MiniMIME is represented by a so called ``context''. A context holds all necessary information given about a MIME message, such as the envelope, all MIME parts etc. <hr><h2>Function Documentation</h2> +<a class="anchor" name="gec3ca486a61b392ff68774242086768e"></a><!-- doxytag: member="mm_context.c::mm_context_attachpart" ref="gec3ca486a61b392ff68774242086768e" args="(MM_CTX *ctx, struct mm_mimepart *part)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_attachpart </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Attaches a MIME part object to a MiniMIME context.<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>the MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>the MIME part object to attach </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure. Sets mm_errno on failure.</dd></dl> +This function attaches a MIME part to a context, appending it to the end of the message.<p> +The MIME part should be initialized before attaching it using <a class="el" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart_new()</a>. +</div> +</div><p> +<a class="anchor" name="g73a3dd187053aeabca4836dc28a6c468"></a><!-- doxytag: member="mm_context.c::mm_context_attachpart_after" ref="g73a3dd187053aeabca4836dc28a6c468" args="(MM_CTX *ctx, struct mm_mimepart *part, int pos)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_attachpart_after </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>pos</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Attaches a MIME part object to a MiniMIME context at a given position<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>The MIME part object to attach </td></tr> + <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>After which part to attach the object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 if the given position is invalid </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__context.html#gec3ca486a61b392ff68774242086768e">mm_context_attachpart</a></dd></dl> +This function attaches a MIME part object after a given position in the specified context. If the position is invalid (out of range), the part will not get attached to the message and the function returns -1. If the index was in range, the MIME part will get attached after the MIME part at the given position, moving any possible following MIME parts one down the hierarchy. +</div> +</div><p> +<a class="anchor" name="gf5bb032ad1c481d31d7b1b0710939712"></a><!-- doxytag: member="mm_context.c::mm_context_countparts" ref="gf5bb032ad1c481d31d7b1b0710939712" args="(MM_CTX *ctx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_countparts </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Counts the number of attached MIME part objects in a given MiniMIME context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>The MiniMIME context </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The number of attached MIME part objects </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g53d20c33a401539ef1ffa45f3dddb983"></a><!-- doxytag: member="mm_context.c::mm_context_deletepart" ref="g53d20c33a401539ef1ffa45f3dddb983" args="(MM_CTX *ctx, int which, int freemem)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_deletepart </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>which</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>freemem</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Deletes a MIME part object from a MiniMIME context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>which</em> </td><td>The number of the MIME part object to delete </td></tr> + <tr><td valign="top"></td><td valign="top"><em>freemem</em> </td><td>Whether to free the memory associated with the MIME part object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure. Sets mm_errno on failure.</dd></dl> +This function deletes a MIME part from a given context. The MIME part to delete is specified as numerical index by the parameter ``which''. If the parameter ``freemem'' is set to anything greater than 0, the memory that is associated will be free'd by using <a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free()</a>, otherwise the memory is left untouched (if you still have a pointer to the MIME part around). +</div> +</div><p> +<a class="anchor" name="g5288136ab923605f6508c09359ae5772"></a><!-- doxytag: member="mm_context.c::mm_context_flatten" ref="g5288136ab923605f6508c09359ae5772" args="(MM_CTX *ctx, char **flat, size_t *length, int flags)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_flatten </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char ** </td> + <td class="paramname"> <em>flat</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">size_t * </td> + <td class="paramname"> <em>length</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>flags</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates an ASCII message of the specified context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>flat</em> </td><td>Where to store the message </td></tr> + <tr><td valign="top"></td><td valign="top"><em>flags</em> </td><td>Flags that affect the flattening process</td></tr> + </table> +</dl> +This function ``flattens'' a MiniMIME context, that is, it creates an ASCII represantation of the message the context contains. The flags can be a bitwise combination of the following constants:<p> +<ul> +<li>MM_FLATTEN_OPAQUE : use opaque MIME parts when flattening</li><li>MM_FLATTEN_SKIPENVELOPE : do not flatten the envelope part</li></ul> +<p> +Great care is taken to not produce invalid MIME output. +</div> +</div><p> +<a class="anchor" name="g76392d5269e9ef340c2f5f8336f7193b"></a><!-- doxytag: member="mm_context.c::mm_context_free" ref="g76392d5269e9ef340c2f5f8336f7193b" args="(MM_CTX *ctx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_context_free </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Releases a MiniMIME context object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + </table> +</dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new</a></dd></dl> +This function releases all memory associated with MiniMIME context object that was created using <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new()</a>. It will also release all memory used for the MIME parts attached, and their specific properties (such as Content-Type information, headers, and the body data). +</div> +</div><p> +<a class="anchor" name="g9710e485f51167099d90f0d659979068"></a><!-- doxytag: member="mm_context.c::mm_context_generateboundary" ref="g9710e485f51167099d90f0d659979068" args="(MM_CTX *ctx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_generateboundary </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Generates a generic boundary string for a given context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure</dd></dl> +This function generates a default boundary string for the given context. If there is already a boundary for the context, the memory will be free()'d. +</div> +</div><p> +<a class="anchor" name="g57fea229675f3e56a77eb40bb8193ee3"></a><!-- doxytag: member="mm_context.c::mm_context_getpart" ref="g57fea229675f3e56a77eb40bb8193ee3" args="(MM_CTX *ctx, int which)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimepart* mm_context_getpart </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>which</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets a specified MIME part object from a MimeMIME context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>The MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>which</em> </td><td>The number of the MIME part object to retrieve </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The requested MIME part object on success or a NULL pointer if there is no such part. </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g8733dee7d83d3205349a7ee4ee5b2750"></a><!-- doxytag: member="mm_context.c::mm_context_haswarnings" ref="g8733dee7d83d3205349a7ee4ee5b2750" args="(MM_CTX *ctx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_haswarnings </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Checks whether there are any warnings associated with a given context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if there are warnings associated with the context, otherwise 0 </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g1e73cadba4acd3ef9dd148dd0c2c3e70"></a><!-- doxytag: member="mm_context.c::mm_context_iscomposite" ref="g1e73cadba4acd3ef9dd148dd0c2c3e70" args="(MM_CTX *ctx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_iscomposite </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Checks whether a given context represents a composite (multipart) message<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if the context is a composite message or 0 if it's flat </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g919fd41f85534d9c87c256857faa2610"></a><!-- doxytag: member="mm_context.c::mm_context_new" ref="g919fd41f85534d9c87c256857faa2610" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">MM_CTX* mm_context_new </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a new MiniMIME context object.<p> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new MiniMIME context object </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free</a></dd></dl> +This function creates a new MiniMIME context, which will hold a message. The memory needed is allocated dynamically and should later be free'd using <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free()</a>.<p> +Before a context can be created, the MiniMIME library needs to be initialized properly using mm_library_init(). +</div> +</div><p> +<a class="anchor" name="gc0e7cc297516618d4773830a1988fc8d"></a><!-- doxytag: member="mm_context.c::mm_context_setpreamble" ref="gc0e7cc297516618d4773830a1988fc8d" args="(MM_CTX *ctx, char *preamble)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_context_setpreamble </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>preamble</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets a preamble for the given MiniMIME context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>preamble</em> </td><td>The preamble to set </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure</dd></dl> +This function sets the MIME preamble (the text between the end of envelope headers and the beginning of the first MIME part) for a given context object. If preamble is a NULL-pointer then the preamble will be deleted, and the currently associated memory will be free automagically. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__envelope.html b/main/minimime/mm-docs/html/group__envelope.html new file mode 100644 index 0000000000..9f19e734f9 --- /dev/null +++ b/main/minimime/mm-docs/html/group__envelope.html @@ -0,0 +1,172 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Accessing and manipulating a message's envelope</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>Accessing and manipulating a message's envelope</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Accessing and manipulating a message's envelope</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__envelope.html#g38f1164142cedfc3253b068a81f85563">mm_envelope_getheaders</a> (MM_CTX *ctx, char **result, size_t *length)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__envelope.html#gb2c43c1645e42ae0860c902ce1dda788">mm_envelope_setheader</a> (MM_CTX *ctx, const char *name, const char *fmt,...)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__envelope.html#ge63da17c56867ca2406a4eaf73230baf">mm_envelope_getrecipients</a> (MM_CTX *ctx, char **result, size_t *length)</td></tr> + +</table> +<hr><h2>Function Documentation</h2> +<a class="anchor" name="g38f1164142cedfc3253b068a81f85563"></a><!-- doxytag: member="mm_envelope.c::mm_envelope_getheaders" ref="g38f1164142cedfc3253b068a81f85563" args="(MM_CTX *ctx, char **result, size_t *length)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_envelope_getheaders </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char ** </td> + <td class="paramname"> <em>result</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">size_t * </td> + <td class="paramname"> <em>length</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets an ASCII representation of all envelope headers<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>result</em> </td><td>Where to store the resulting ASCII headers </td></tr> + <tr><td valign="top"></td><td valign="top"><em>length</em> </td><td>Where to store the length of the result </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure. </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno on failure</dd></dl> +This is mainly a convinience function. It constructs an ASCII representation from all of the message's envelope headers and stores the result in headers. Memory is allocated dynamically, and the total length of the result is stored in length. This function takes care that the output is MIME conform, and folds long lines according to the MIME standard at position 78 of the string. It also nicely formats all MIME related header fields, such as the Content-Type header.<p> +Since the memory needed to store the result is allocated dynamically, one should take care of freeing it again when it's not needed anymore. If an error occurs, *result will be set to NULL, *length will be set to zero and mm_errno will be set to a reasonable value. +</div> +</div><p> +<a class="anchor" name="ge63da17c56867ca2406a4eaf73230baf"></a><!-- doxytag: member="mm_envelope.c::mm_envelope_getrecipients" ref="ge63da17c56867ca2406a4eaf73230baf" args="(MM_CTX *ctx, char **result, size_t *length)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_envelope_getrecipients </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char ** </td> + <td class="paramname"> <em>result</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">size_t * </td> + <td class="paramname"> <em>length</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the list of recipients for a MIME message<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>result</em> </td><td>Where to store the result </td></tr> + <tr><td valign="top"></td><td valign="top"><em>length</em> </td><td>Where to store the length of the result </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on error </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno on error</dd></dl> +This functions gets the list of recipients for a given MIME message. It does so by concatenating the "From" and "Cc" header fields, and storing the results in recipients. The memory needed to store the result is allocated dynamically, and the total length of the result is stored in length.<p> +One should take care to free() the result once it's not needed anymore. +</div> +</div><p> +<a class="anchor" name="gb2c43c1645e42ae0860c902ce1dda788"></a><!-- doxytag: member="mm_envelope.c::mm_envelope_setheader" ref="gb2c43c1645e42ae0860c902ce1dda788" args="(MM_CTX *ctx, const char *name, const char *fmt,...)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_envelope_setheader </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>fmt</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"> </td> + <td class="paramname"> <em>...</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets a header field in the envelope<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the header field to set </td></tr> + <tr><td valign="top"></td><td valign="top"><em>fmt</em> </td><td>A format string specifying the value of the header field </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure</dd></dl> +This function generates a new MIME header and attaches it to the first MIME part (the envelope) found in the given context. If no part is attached already, the function will return an error. The function will store a copy of ``name'' as the header's name field, and dynamically allocate the memory needed to build the format string. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__error.html b/main/minimime/mm-docs/html/group__error.html new file mode 100644 index 0000000000..739ea03e83 --- /dev/null +++ b/main/minimime/mm-docs/html/group__error.html @@ -0,0 +1,108 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: MiniMIME error functions</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>MiniMIME error functions</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#g69de7c9bee1d535593a55807590de543">mm_error_init</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#g92006c97728639d8f32f5bc4c6e2a47f">mm_error_setmsg</a> (const char *fmt,...)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#g8654857a3ac349b87d798902912371a3">mm_error_string</a> (void)</td></tr> + +</table> +<hr><h2>Function Documentation</h2> +<a class="anchor" name="g69de7c9bee1d535593a55807590de543"></a><!-- doxytag: member="mm_error.c::mm_error_init" ref="g69de7c9bee1d535593a55807590de543" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_error_init </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Initializes the global error object<p> +This function initializes the global error object mm_error. This must be done when the library is initialized, and is automatically called from mm_init_library(). +</div> +</div><p> +<a class="anchor" name="g92006c97728639d8f32f5bc4c6e2a47f"></a><!-- doxytag: member="mm_error.c::mm_error_setmsg" ref="g92006c97728639d8f32f5bc4c6e2a47f" args="(const char *fmt,...)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_error_setmsg </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>fmt</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"> </td> + <td class="paramname"> <em>...</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets a descriptive error message<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>fmt</em> </td><td>The error message as format string</td></tr> + </table> +</dl> +This function is called from the various MiniMIME modules in case an error occured. Should never be called by the user. +</div> +</div><p> +<a class="anchor" name="g8654857a3ac349b87d798902912371a3"></a><!-- doxytag: member="mm_error.c::mm_error_string" ref="g8654857a3ac349b87d798902912371a3" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_error_string </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Retrieves the current error message<p> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The currently set error message</dd></dl> +This function can be used to retrieve a descriptive error message for the current error, much like strerror() function of libc. When this function is called without an error being set, it returns the string "No error". The string returned does not need to be freed, since it is not dynamically allocated by the library. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__mimepart.html b/main/minimime/mm-docs/html/group__mimepart.html new file mode 100644 index 0000000000..84806c80d3 --- /dev/null +++ b/main/minimime/mm-docs/html/group__mimepart.html @@ -0,0 +1,705 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Accessing and manipulating MIME parts</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>Accessing and manipulating MIME parts</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Creating and destroying MIME parts</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimepart * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimepart * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#ged8112012a337371ae8093adb1ab6d27">mm_mimepart_fromfile</a> (const char *filename)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free</a> (struct mm_mimepart *part)</td></tr> + +<tr><td colspan="2"><br><h2>Accessing the MIME part's mail header</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g46a674ff6b9873c0c45fa4eb5d94fd62">mm_mimepart_attachheader</a> (struct mm_mimepart *part, struct mm_mimeheader *header)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g44c78abfb0535312bcb427a2cd220026">mm_mimepart_countheaders</a> (struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gf89da502ac54306994bdb452448a8026">mm_mimepart_countheaderbyname</a> (struct mm_mimepart *part, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimeheader * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#ga3ca298eaa82f4ef3ea731511ac84e53">mm_mimepart_getheaderbyname</a> (struct mm_mimepart *part, const char *name, int idx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g779f11f7a6a54f83763b5ef6ff87e48f">mm_mimepart_getheadervalue</a> (struct mm_mimepart *part, const char *name, int idx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart_headers_start</a> (struct mm_mimepart *part, struct mm_mimeheader **id)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimeheader * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart_headers_next</a> (struct mm_mimepart *part, struct mm_mimeheader **id)</td></tr> + +<tr><td colspan="2"><br><h2>Accessing and manipulating the MIME part's body</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g52dc9f27a2801e4f6abb1effd2ed838d">mm_mimepart_getbody</a> (struct mm_mimepart *part, int opaque)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gd1def098c00edc546b03e98e9ff8b27a">mm_mimepart_setbody</a> (struct mm_mimepart *part, const char *data, int opaque)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gf8ccae1737dc4b9b91958fe448da677f">mm_mimepart_getlength</a> (struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g4551bf4460e5d165bbcd9f32d4f625de">mm_mimepart_decode</a> (struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gf19d3ace5ae174b3eaa35f9ddbe6e216">mm_mimepart_flatten</a> (struct mm_mimepart *part, char **result, size_t *length, int opaque)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g164bb39a266559574c252f11266809ff">mm_mimepart_setdefaultcontenttype</a> (struct mm_mimepart *part, int composite)</td></tr> + +<tr><td colspan="2"><br><h2>Accessing the MIME part's Content-Type information</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g01822bc93b4741af75b5379384354e37">mm_mimepart_attachcontenttype</a> (struct mm_mimepart *part, struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_content * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g210e2ceee56f8349f6778006da87d080">mm_mimepart_gettype</a> (struct mm_mimepart *part)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +MIME parts, also called entities, represent the structure of a MIME message. ``Normal'' internet messages have only a single part, and are called ``flat'' messages. Multipart messages have more then one part, and each MIME part can have it's own subset of headers.<p> +Provided here are functions to easily access all informations from a MIME part, including their specific headers and bodies. <hr><h2>Function Documentation</h2> +<a class="anchor" name="g01822bc93b4741af75b5379384354e37"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_attachcontenttype" ref="g01822bc93b4741af75b5379384354e37" args="(struct mm_mimepart *part, struct mm_content *ct)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_mimepart_attachcontenttype </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_content * </td> + <td class="paramname"> <em>ct</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Attaches a context type object to a MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>ct</em> </td><td>The content type object to attach </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>Nothing</dd></dl> +This function attaches a Content-Type object to a MIME part. It does not care whether the Content-Type suites the actual content in the MIME part, so the programmer should take care of that. +</div> +</div><p> +<a class="anchor" name="g46a674ff6b9873c0c45fa4eb5d94fd62"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_attachheader" ref="g46a674ff6b9873c0c45fa4eb5d94fd62" args="(struct mm_mimepart *part, struct mm_mimeheader *header)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimepart_attachheader </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_mimeheader * </td> + <td class="paramname"> <em>header</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Attaches a mm_mimeheader object to a MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>header</em> </td><td>A valid MIME header object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if successfull or -1 if the header could not be attached </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gf89da502ac54306994bdb452448a8026"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_countheaderbyname" ref="gf89da502ac54306994bdb452448a8026" args="(struct mm_mimepart *part, const char *name)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimepart_countheaderbyname </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Retrieves the number of MIME headers with a given name in a MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the MIME header which to count for </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The number of MIME headers within the MIME part </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g44c78abfb0535312bcb427a2cd220026"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_countheaders" ref="g44c78abfb0535312bcb427a2cd220026" args="(struct mm_mimepart *part)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimepart_countheaders </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Retrieves the number of MIME headers available in a MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The number of MIME headers within the MIME part </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g4551bf4460e5d165bbcd9f32d4f625de"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_decode" ref="g4551bf4460e5d165bbcd9f32d4f625de" args="(struct mm_mimepart *part)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_mimepart_decode </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Decodes a MIME part according to it's encoding using MiniMIME codecs<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>A</em> </td><td>valid MIME part object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if the MIME part could be successfully decoded or -1 if not </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno on error</dd></dl> +This function decodes the body of a MIME part with a registered decoder according to it's Content-Transfer-Encoding header field. +</div> +</div><p> +<a class="anchor" name="gf19d3ace5ae174b3eaa35f9ddbe6e216"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_flatten" ref="gf19d3ace5ae174b3eaa35f9ddbe6e216" args="(struct mm_mimepart *part, char **result, size_t *length, int opaque)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimepart_flatten </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char ** </td> + <td class="paramname"> <em>result</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">size_t * </td> + <td class="paramname"> <em>length</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>opaque</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates an ASCII representation of the given MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>result</em> </td><td>Where to store the result </td></tr> + <tr><td valign="top"></td><td valign="top"><em>length</em> </td><td>Where to store the length of the result </td></tr> + <tr><td valign="top"></td><td valign="top"><em>opaque</em> </td><td>Whether to use the opaque MIME part 0 on success or -1 on error. </td></tr> + </table> +</dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__context.html#g5288136ab923605f6508c09359ae5772">mm_context_flatten</a></dd></dl> +This function creates an ASCII representation of a given MIME part. It will dynamically allocate the memory needed and stores the result in the memory region pointed to by result. The length of the result will be stored in length. If opaque is set to 1, mm_mimepart_flatten will store an opaque version of the MIME part in result, which means no headers will be created or sanitized. This is particulary useful if the part is digitally signed by e.g. PGP, and the signature spans the header fields of the part in question. +</div> +</div><p> +<a class="anchor" name="gbf47790a0bb96b22bc5e236bc40cb32e"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_free" ref="gbf47790a0bb96b22bc5e236bc40cb32e" args="(struct mm_mimepart *part)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_mimepart_free </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Frees all memory allocated by a mm_mimepart object.<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A pointer to an allocated mm_mimepart object </td></tr> + </table> +</dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart_new</a> </dd></dl> + +</div> +</div><p> +<a class="anchor" name="ged8112012a337371ae8093adb1ab6d27"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_fromfile" ref="ged8112012a337371ae8093adb1ab6d27" args="(const char *filename)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimepart* mm_mimepart_fromfile </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>filename</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a MIME part from a file<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>The name of the file to create the MIME part from </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to a new MIME part object</dd></dl> +This function creates a new MIME part object from a file. The object should be freed using <a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free()</a> later on. This function does NOT set the Content-Type and neither does any encoding work. +</div> +</div><p> +<a class="anchor" name="g52dc9f27a2801e4f6abb1effd2ed838d"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_getbody" ref="g52dc9f27a2801e4f6abb1effd2ed838d" args="(struct mm_mimepart *part, int opaque)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_mimepart_getbody </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>opaque</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the pointer to the MIME part's body data<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>opaque</em> </td><td>Whether to get the opaque part or not </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the MIME part's body </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__mimepart.html#gd1def098c00edc546b03e98e9ff8b27a">mm_mimepart_setbody</a> </dd></dl> + +</div> +</div><p> +<a class="anchor" name="ga3ca298eaa82f4ef3ea731511ac84e53"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_getheaderbyname" ref="ga3ca298eaa82f4ef3ea731511ac84e53" args="(struct mm_mimepart *part, const char *name, int idx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimeheader* mm_mimepart_getheaderbyname </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>idx</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Get a MIME header object from a MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the MIME header which to retrieve </td></tr> + <tr><td valign="top"></td><td valign="top"><em>idx</em> </td><td>Which header field to get (in case of multiple headers of the same name). </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the requested MIME header on success, or NULL if there either isn't a header with the requested name or idx is out of range. </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g779f11f7a6a54f83763b5ef6ff87e48f"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_getheadervalue" ref="g779f11f7a6a54f83763b5ef6ff87e48f" args="(struct mm_mimepart *part, const char *name, int idx)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const char* mm_mimepart_getheadervalue </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>idx</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the value of a MIME header object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the header field to get the value from </td></tr> + <tr><td valign="top"></td><td valign="top"><em>idx</em> </td><td>The index of the header field to get, in case there are multiple headers with the same name. </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the requested value on success, or NULL if there either isn't a header with the requested name or idx is out of range. </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gf8ccae1737dc4b9b91958fe448da677f"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_getlength" ref="gf8ccae1737dc4b9b91958fe448da677f" args="(struct mm_mimepart *part)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">size_t mm_mimepart_getlength </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the length of a given MIME part object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The size of the part's body in byte.</dd></dl> +This function returns the total length of the given MIME part's body. The length does not include the headers of the MIME parts. If the function returns 0, no body part is set currently. +</div> +</div><p> +<a class="anchor" name="g210e2ceee56f8349f6778006da87d080"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_gettype" ref="g210e2ceee56f8349f6778006da87d080" args="(struct mm_mimepart *part)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_content* mm_mimepart_gettype </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the Content-Type of a given MIME part object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The Content-Type object of the specified MIME part</dd></dl> +This function returns a pointer to the Content-Type object of the given MIME part. This pointer might be set to NULL, indicating that there is no Content-Type object for the given MIME part currently. +</div> +</div><p> +<a class="anchor" name="g8e9064736efdeebf4b257cc45f8a6adf"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_headers_next" ref="g8e9064736efdeebf4b257cc45f8a6adf" args="(struct mm_mimepart *part, struct mm_mimeheader **id)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimeheader* mm_mimepart_headers_next </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_mimeheader ** </td> + <td class="paramname"> <em>id</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Returns the next MIME header of a given MIME part object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>id</em> </td><td>A previously initialized MIME header object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the MIME header object or NULL if end of headers was reached. </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart_headers_start</a> </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g4440bdcfddf88eb642b6a834a0557176"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_headers_start" ref="g4440bdcfddf88eb642b6a834a0557176" args="(struct mm_mimepart *part, struct mm_mimeheader **id)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimepart_headers_start </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">struct mm_mimeheader ** </td> + <td class="paramname"> <em>id</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Initializes a header loop for a given MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>id</em> </td><td>The address of a MIME header object (to allow reentrance) </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart_headers_next</a></dd></dl> +Looping through headers can be done in the following way:<p> +<div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>mm_mimeheader *header, *lheader; + + <a class="code" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart_headers_start</a>(part, &lheader); + + <span class="keywordflow">while</span> ((header = <a class="code" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart_headers_next</a>(part, &lheader)) != NULL) { + printf(<span class="stringliteral">"%s: %s\n"</span>, header->name, header->value); + } +</pre></div><p> +For convienience, the macro mm_mimepart_headers_foreach() can be used to loop through headers in a one-shot manner. +</div> +</div><p> +<a class="anchor" name="g417e5dd361e30cddb91e1d9a5e30b223"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_new" ref="g417e5dd361e30cddb91e1d9a5e30b223" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimepart* mm_mimepart_new </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Allocates memory for a new mm_mimepart structure and initializes it.<p> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to a struct of type mm_mimeheader or NULL on failure </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free</a> </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>The memory must be freed by using <a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free()</a> later on. </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gd1def098c00edc546b03e98e9ff8b27a"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_setbody" ref="gd1def098c00edc546b03e98e9ff8b27a" args="(struct mm_mimepart *part, const char *data, int opaque)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_mimepart_setbody </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>data</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>opaque</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets the MIME part's body data<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>A pointer to the data which to set </td></tr> + </table> +</dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__mimepart.html#g52dc9f27a2801e4f6abb1effd2ed838d">mm_mimepart_getbody</a></dd></dl> +This functions sets the body data for a given MIME part. The string pointed to by data must be NUL-terminated. The data is copied into the MIME part's body, and thus, the memory pointed to by data can be freed after the operation. +</div> +</div><p> +<a class="anchor" name="g164bb39a266559574c252f11266809ff"></a><!-- doxytag: member="mm_mimepart.c::mm_mimepart_setdefaultcontenttype" ref="g164bb39a266559574c252f11266809ff" args="(struct mm_mimepart *part, int composite)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimepart_setdefaultcontenttype </td> + <td>(</td> + <td class="paramtype">struct mm_mimepart * </td> + <td class="paramname"> <em>part</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>composite</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets the default Content-Type for a given MIME part<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>A valid MIME part object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>part</em> </td><td>Whether the Content-Type should be for composite or not </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure</dd></dl> +This function sets a default Content-Type according to RFC 2045 with a value of "text/plain; charset="us-ascii"". This function should only be used if the MIME part in question does not have a valid Content-Type specification. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__mimeutil.html b/main/minimime/mm-docs/html/group__mimeutil.html new file mode 100644 index 0000000000..a2b128434f --- /dev/null +++ b/main/minimime/mm-docs/html/group__mimeutil.html @@ -0,0 +1,22 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: MIME related utility functions</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>MIME related utility functions</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +</table> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__param.html b/main/minimime/mm-docs/html/group__param.html new file mode 100644 index 0000000000..93e8219607 --- /dev/null +++ b/main/minimime/mm-docs/html/group__param.html @@ -0,0 +1,273 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Accessing and manipulating MIME parameters</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>Accessing and manipulating MIME parameters</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions for manipulating MIME parameters</h2></td></tr> +<tr><td colspan="2">MIME parameters are properties attached to certain MIME headers, such as Content-Type and Content-Disposition. MIME parameters have a textual representations as in <em>name=value</em>. They contain important information about the MIME structure of a message, such as the boundary string used, which charset was used to encode the message and so on. This module provides simple to use functions to query or set MIME parameters.<p> +Each MIME header may hold an arbitrary amount of such parameters, which are delimeted by each other with a semicolon. <br><br></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_param * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param_free</a> (struct mm_param *param)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_param * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#gd3970def45b8bede334f4b89a41dec15">mm_param_generate</a> (const char *name, const char *value)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g2a266c63c7e89cf829b2af8e995e55e8">mm_param_setname</a> (struct mm_param *param, const char *name, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#gca3e636ab5700462eb32ca5bc19e4cc6">mm_param_setvalue</a> (struct mm_param *param, const char *value, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g0e0ddccf47a2b1e0ad5bcc52c7b39753">mm_param_getname</a> (struct mm_param *param)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g3c6f8cddd409de3000c31584e140561e">mm_param_getvalue</a> (struct mm_param *param)</td></tr> + +</table> +<hr><h2>Function Documentation</h2> +<a class="anchor" name="g46339038e995799e6a3e37512f442fc9"></a><!-- doxytag: member="mm_param.c::mm_param_free" ref="g46339038e995799e6a3e37512f442fc9" args="(struct mm_param *param)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_param_free </td> + <td>(</td> + <td class="paramtype">struct mm_param * </td> + <td class="paramname"> <em>param</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Releases all memory associated with a MIME parameter object.<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>param</em> </td><td>A valid MIME parameter object to be freed </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>Nothing </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param_new</a> </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gd3970def45b8bede334f4b89a41dec15"></a><!-- doxytag: member="mm_param.c::mm_param_generate" ref="gd3970def45b8bede334f4b89a41dec15" args="(const char *name, const char *value)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_param* mm_param_generate </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>value</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Generates a new Content-Type parameter with the given name and value<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the MIME parameter </td></tr> + <tr><td valign="top"></td><td valign="top"><em>value</em> </td><td>The value of the MIME parameter </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A new MIME parameter object </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param_free</a> <p> +<a class="el" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param_new</a></dd></dl> +This function generates a new MIME parameter, with the name and value given as the arguments. The needed memory for the operation is allocated dynamically. It stores a copy of name and value in the actual object, so the memory holding the arguments can safely be freed after successfull return of this function. +</div> +</div><p> +<a class="anchor" name="g0e0ddccf47a2b1e0ad5bcc52c7b39753"></a><!-- doxytag: member="mm_param.c::mm_param_getname" ref="g0e0ddccf47a2b1e0ad5bcc52c7b39753" args="(struct mm_param *param)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const char* mm_param_getname </td> + <td>(</td> + <td class="paramtype">struct mm_param * </td> + <td class="paramname"> <em>param</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the name of a MIME parameter object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>param</em> </td><td>A valid MIME parameter object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The name of the MIME parameter </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g3c6f8cddd409de3000c31584e140561e"></a><!-- doxytag: member="mm_param.c::mm_param_getvalue" ref="g3c6f8cddd409de3000c31584e140561e" args="(struct mm_param *param)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">const char* mm_param_getvalue </td> + <td>(</td> + <td class="paramtype">struct mm_param * </td> + <td class="paramname"> <em>param</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Gets the value of a MIME parameter object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>param</em> </td><td>A valid MIME parameter object </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value of the MIME parameter </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gd3ac756551bf5a29a07d5992bfdbde09"></a><!-- doxytag: member="mm_param.c::mm_param_new" ref="gd3ac756551bf5a29a07d5992bfdbde09" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_param* mm_param_new </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a new object to hold a MIME parameter.<p> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>An object representing a MIME parameter </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param_free</a> </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>The allocated memory must later be freed using <a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param_free()</a> </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g2a266c63c7e89cf829b2af8e995e55e8"></a><!-- doxytag: member="mm_param.c::mm_param_setname" ref="g2a266c63c7e89cf829b2af8e995e55e8" args="(struct mm_param *param, const char *name, int copy)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_param_setname </td> + <td>(</td> + <td class="paramtype">struct mm_param * </td> + <td class="paramname"> <em>param</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>copy</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets the name of the given MIME parameter<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>param</em> </td><td>A valid MIME parameter object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The new name of the parameter </td></tr> + <tr><td valign="top"></td><td valign="top"><em>copy</em> </td><td>If set to > 0, copy the value stored in name </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The address of the previous name for passing to free() </dd></dl> + +</div> +</div><p> +<a class="anchor" name="gca3e636ab5700462eb32ca5bc19e4cc6"></a><!-- doxytag: member="mm_param.c::mm_param_setvalue" ref="gca3e636ab5700462eb32ca5bc19e4cc6" args="(struct mm_param *param, const char *value, int copy)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_param_setvalue </td> + <td>(</td> + <td class="paramtype">struct mm_param * </td> + <td class="paramname"> <em>param</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>value</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>copy</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Sets the value of the given MIME parameter<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>param</em> </td><td>A valid MIME parameter object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The new value for the parameter </td></tr> + <tr><td valign="top"></td><td valign="top"><em>copy</em> </td><td>If set to > 0, copy the value stored in value </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>The address of the previous value for passing to free() </dd></dl> + +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/group__util.html b/main/minimime/mm-docs/html/group__util.html new file mode 100644 index 0000000000..4ea219224d --- /dev/null +++ b/main/minimime/mm-docs/html/group__util.html @@ -0,0 +1,280 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: General purpose utility functions</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>General purpose utility functions</h1><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Utility functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g35c4383ff0dee2de18985e6edfed1ae6"></a><!-- doxytag: member="util::xfree" ref="g35c4383ff0dee2de18985e6edfed1ae6" args="(void *)" --> +void </td><td class="memItemRight" valign="bottom"><b>xfree</b> (void *)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2961ae74e91b0b28acdf9822438a581c"></a><!-- doxytag: member="util::xstrdup" ref="g2961ae74e91b0b28acdf9822438a581c" args="(const char *)" --> +char * </td><td class="memItemRight" valign="bottom"><b>xstrdup</b> (const char *)</td></tr> + +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">xmalloc</a> (size_t size)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">xrealloc</a> (void *p, size_t size)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#gf0f89a29a634f6f1f833abb1e214a6b1">mm_unquote</a> (const char *string)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g49c016ff4cfd02f1b019c4dce5aac357">mm_uncomment</a> (const char *string)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g3ae25483c8a42f6562f2a916a511228f">xstrsep</a> (char **stringp, const char *delim)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#gf62be7dd21e545f8db72f3c9e3b6a3c3">mm_stripchars</a> (char *input, char *strip)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g0747d4b4e33644263e6d73d2d8d4818b">mm_addchars</a> (char *input, char *add, u_int16_t linelength)</td></tr> + +</table> +<hr><h2>Function Documentation</h2> +<a class="anchor" name="g0747d4b4e33644263e6d73d2d8d4818b"></a><!-- doxytag: member="mm_util.c::mm_addchars" ref="g0747d4b4e33644263e6d73d2d8d4818b" args="(char *input, char *add, u_int16_t linelength)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_addchars </td> + <td>(</td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>input</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>add</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">u_int16_t </td> + <td class="paramname"> <em>linelength</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Adds characters to a string at given positions<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>input</em> </td><td>The string to which to add characters </td></tr> + <tr><td valign="top"></td><td valign="top"><em>add</em> </td><td>The character string to add </td></tr> + <tr><td valign="top"></td><td valign="top"><em>linelength</em> </td><td>The position where to add the character </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A copy of the string with characters added</dd></dl> +This function adds the characters add at each linelength positions and returns this new string. +</div> +</div><p> +<a class="anchor" name="gf62be7dd21e545f8db72f3c9e3b6a3c3"></a><!-- doxytag: member="mm_util.c::mm_stripchars" ref="gf62be7dd21e545f8db72f3c9e3b6a3c3" args="(char *input, char *strip)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_stripchars </td> + <td>(</td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>input</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">char * </td> + <td class="paramname"> <em>strip</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Strips a given character set from a string<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>input</em> </td><td>The string which to strip </td></tr> + <tr><td valign="top"></td><td valign="top"><em>strip</em> </td><td>The character set to strip off </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A copy of the original string with all chars stripped </dd></dl> + +</div> +</div><p> +<a class="anchor" name="g49c016ff4cfd02f1b019c4dce5aac357"></a><!-- doxytag: member="mm_util.c::mm_uncomment" ref="g49c016ff4cfd02f1b019c4dce5aac357" args="(const char *string)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_uncomment </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>string</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Removes MIME comments from a string<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>string</em> </td><td>The string to uncomment </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the uncommented string or NULL on error. Sets mm_errno.</dd></dl> +This function removes MIME comments from a string (included in parantheses). It returns a pointer to a newly allocated memory region in which the uncommented string is stored. The returned string needs to be freed when it's not used anymore. +</div> +</div><p> +<a class="anchor" name="gf0f89a29a634f6f1f833abb1e214a6b1"></a><!-- doxytag: member="mm_util.c::mm_unquote" ref="gf0f89a29a634f6f1f833abb1e214a6b1" args="(const char *string)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* mm_unquote </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>string</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Unquotes a string<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>string</em> </td><td>The quoted string to unquote </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the unquoted string</dd></dl> +This function unquotes a string. That is, it returns a pointer to a newly allocated memory region in which the unquoted string is stored. Only leading and trailing double-qoutes are removed. The string needs to be freed when it is not needed anymore. +</div> +</div><p> +<a class="anchor" name="g2ff4ef58da7e543466e75f20f2a2d8b7"></a><!-- doxytag: member="mm_util.c::xmalloc" ref="g2ff4ef58da7e543466e75f20f2a2d8b7" args="(size_t size)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void* xmalloc </td> + <td>(</td> + <td class="paramtype">size_t </td> + <td class="paramname"> <em>size</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Allocates a block of memory<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>size</em> </td><td>The size of the memory region to allocate </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the allocated memory region</dd></dl> +<a class="el" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">xmalloc()</a> calls abort() if either the size argument is negative or the requested memory amount could not be allocated via an assert() call. +</div> +</div><p> +<a class="anchor" name="ge14637b4672461f1f0bee822406d68dc"></a><!-- doxytag: member="mm_util.c::xrealloc" ref="ge14637b4672461f1f0bee822406d68dc" args="(void *p, size_t size)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void* xrealloc </td> + <td>(</td> + <td class="paramtype">void * </td> + <td class="paramname"> <em>p</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">size_t </td> + <td class="paramname"> <em>size</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +realloc() wrapper<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>p</em> </td><td>Pointer to a memory region which should be reallocated </td></tr> + <tr><td valign="top"></td><td valign="top"><em>size</em> </td><td>The new size of the memory region </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the reallocated memory region</dd></dl> +<a class="el" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">xrealloc()</a> is a wrapper around realloc() which calls abort() if either the size argument is negative or the requested memory amount could not be allocated. +</div> +</div><p> +<a class="anchor" name="g3ae25483c8a42f6562f2a916a511228f"></a><!-- doxytag: member="mm_util.c::xstrsep" ref="g3ae25483c8a42f6562f2a916a511228f" args="(char **stringp, const char *delim)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">char* xstrsep </td> + <td>(</td> + <td class="paramtype">char ** </td> + <td class="paramname"> <em>stringp</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>delim</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +separate strings<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>stringp</em> </td><td>A pointer to the string being splitted </td></tr> + <tr><td valign="top"></td><td valign="top"><em>delim</em> </td><td>The delimeter string</td></tr> + </table> +</dl> +This function works similar to strsep(), with the difference that delim is treated as a whole. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/index.html b/main/minimime/mm-docs/html/index.html new file mode 100644 index 0000000000..8acc2a634e --- /dev/null +++ b/main/minimime/mm-docs/html/index.html @@ -0,0 +1,21 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Main Page</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li id="current"><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>MiniMIME Documentation</h1> +<p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mimeparser_8h-source.html b/main/minimime/mm-docs/html/mimeparser_8h-source.html new file mode 100644 index 0000000000..0350006424 --- /dev/null +++ b/main/minimime/mm-docs/html/mimeparser_8h-source.html @@ -0,0 +1,42 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mimeparser.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mimeparser.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef _MIMEPARSER_H_INCLUDED</span> +<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define _MIMEPARSER_H_INCLUDED</span> +<a name="l00003"></a>00003 <span class="preprocessor"></span> +<a name="l00007"></a>00007 <span class="keywordtype">int</span> count_lines(<span class="keywordtype">char</span> *); +<a name="l00008"></a>00008 <span class="keywordtype">void</span> mimieparser_yyerror(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00009"></a>00009 <span class="keywordtype">int</span> dprintf2(<span class="keyword">const</span> <span class="keywordtype">char</span> *, ...); +<a name="l00010"></a>00010 <span class="keywordtype">int</span> mimeparser_yyparse(<span class="keywordtype">void</span>); +<a name="l00011"></a>00011 <span class="keywordtype">int</span> mimeparser_yylex(<span class="keywordtype">void</span>); +<a name="l00012"></a>00012 <span class="keywordtype">int</span> mimeparser_yyerror(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00013"></a>00013 +<a name="l00014"></a>00014 <span class="keyword">struct </span>s_position +<a name="l00015"></a>00015 { +<a name="l00016"></a>00016 size_t opaque_start; +<a name="l00017"></a>00017 size_t start; +<a name="l00018"></a>00018 size_t end; +<a name="l00019"></a>00019 }; +<a name="l00020"></a>00020 +<a name="l00021"></a>00021 <span class="preprocessor">#endif </span><span class="comment">/* ! _MIMEPARSER_H_INCLUDED */</span> +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mimeparser_8tab_8h-source.html b/main/minimime/mm-docs/html/mimeparser_8tab_8h-source.html new file mode 100644 index 0000000000..81f10816ce --- /dev/null +++ b/main/minimime/mm-docs/html/mimeparser_8tab_8h-source.html @@ -0,0 +1,136 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mimeparser.tab.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mimeparser.tab.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* A Bison parser, made by GNU Bison 2.3. */</span> +<a name="l00002"></a>00002 +<a name="l00003"></a>00003 <span class="comment">/* Skeleton interface for Bison's Yacc-like parsers in C</span> +<a name="l00004"></a>00004 <span class="comment"></span> +<a name="l00005"></a>00005 <span class="comment"> Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006</span> +<a name="l00006"></a>00006 <span class="comment"> Free Software Foundation, Inc.</span> +<a name="l00007"></a>00007 <span class="comment"></span> +<a name="l00008"></a>00008 <span class="comment"> This program is free software; you can redistribute it and/or modify</span> +<a name="l00009"></a>00009 <span class="comment"> it under the terms of the GNU General Public License as published by</span> +<a name="l00010"></a>00010 <span class="comment"> the Free Software Foundation; either version 2, or (at your option)</span> +<a name="l00011"></a>00011 <span class="comment"> any later version.</span> +<a name="l00012"></a>00012 <span class="comment"></span> +<a name="l00013"></a>00013 <span class="comment"> This program is distributed in the hope that it will be useful,</span> +<a name="l00014"></a>00014 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="l00015"></a>00015 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="l00016"></a>00016 <span class="comment"> GNU General Public License for more details.</span> +<a name="l00017"></a>00017 <span class="comment"></span> +<a name="l00018"></a>00018 <span class="comment"> You should have received a copy of the GNU General Public License</span> +<a name="l00019"></a>00019 <span class="comment"> along with this program; if not, write to the Free Software</span> +<a name="l00020"></a>00020 <span class="comment"> Foundation, Inc., 51 Franklin Street, Fifth Floor,</span> +<a name="l00021"></a>00021 <span class="comment"> Boston, MA 02110-1301, USA. */</span> +<a name="l00022"></a>00022 +<a name="l00023"></a>00023 <span class="comment">/* As a special exception, you may create a larger work that contains</span> +<a name="l00024"></a>00024 <span class="comment"> part or all of the Bison parser skeleton and distribute that work</span> +<a name="l00025"></a>00025 <span class="comment"> under terms of your choice, so long as that work isn't itself a</span> +<a name="l00026"></a>00026 <span class="comment"> parser generator using the skeleton or a modified version thereof</span> +<a name="l00027"></a>00027 <span class="comment"> as a parser skeleton. Alternatively, if you modify or redistribute</span> +<a name="l00028"></a>00028 <span class="comment"> the parser skeleton itself, you may (at your option) remove this</span> +<a name="l00029"></a>00029 <span class="comment"> special exception, which will cause the skeleton and the resulting</span> +<a name="l00030"></a>00030 <span class="comment"> Bison output files to be licensed under the GNU General Public</span> +<a name="l00031"></a>00031 <span class="comment"> License without this special exception.</span> +<a name="l00032"></a>00032 <span class="comment"></span> +<a name="l00033"></a>00033 <span class="comment"> This special exception was added by the Free Software Foundation in</span> +<a name="l00034"></a>00034 <span class="comment"> version 2.2 of Bison. */</span> +<a name="l00035"></a>00035 +<a name="l00036"></a>00036 <span class="comment">/* Tokens. */</span> +<a name="l00037"></a>00037 <span class="preprocessor">#ifndef YYTOKENTYPE</span> +<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor"># define YYTOKENTYPE</span> +<a name="l00039"></a>00039 <span class="preprocessor"></span> <span class="comment">/* Put the tokens into the symbol table, so that GDB and other debuggers</span> +<a name="l00040"></a>00040 <span class="comment"> know about them. */</span> +<a name="l00041"></a>00041 <span class="keyword">enum</span> yytokentype { +<a name="l00042"></a>00042 ANY = 258, +<a name="l00043"></a>00043 COLON = 259, +<a name="l00044"></a>00044 DASH = 260, +<a name="l00045"></a>00045 DQUOTE = 261, +<a name="l00046"></a>00046 ENDOFHEADERS = 262, +<a name="l00047"></a>00047 EOL = 263, +<a name="l00048"></a>00048 EOM = 264, +<a name="l00049"></a>00049 EQUAL = 265, +<a name="l00050"></a>00050 MIMEVERSION_HEADER = 266, +<a name="l00051"></a>00051 SEMICOLON = 267, +<a name="l00052"></a>00052 CONTENTDISPOSITION_HEADER = 268, +<a name="l00053"></a>00053 CONTENTENCODING_HEADER = 269, +<a name="l00054"></a>00054 CONTENTTYPE_HEADER = 270, +<a name="l00055"></a>00055 MAIL_HEADER = 271, +<a name="l00056"></a>00056 HEADERVALUE = 272, +<a name="l00057"></a>00057 BOUNDARY = 273, +<a name="l00058"></a>00058 ENDBOUNDARY = 274, +<a name="l00059"></a>00059 CONTENTTYPE_VALUE = 275, +<a name="l00060"></a>00060 TSPECIAL = 276, +<a name="l00061"></a>00061 WORD = 277, +<a name="l00062"></a>00062 BODY = 278, +<a name="l00063"></a>00063 PREAMBLE = 279, +<a name="l00064"></a>00064 POSTAMBLE = 280 +<a name="l00065"></a>00065 }; +<a name="l00066"></a>00066 <span class="preprocessor">#endif</span> +<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="comment">/* Tokens. */</span> +<a name="l00068"></a>00068 <span class="preprocessor">#define ANY 258</span> +<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define COLON 259</span> +<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define DASH 260</span> +<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define DQUOTE 261</span> +<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define ENDOFHEADERS 262</span> +<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define EOL 263</span> +<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define EOM 264</span> +<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define EQUAL 265</span> +<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define MIMEVERSION_HEADER 266</span> +<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define SEMICOLON 267</span> +<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define CONTENTDISPOSITION_HEADER 268</span> +<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define CONTENTENCODING_HEADER 269</span> +<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define CONTENTTYPE_HEADER 270</span> +<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define MAIL_HEADER 271</span> +<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define HEADERVALUE 272</span> +<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define BOUNDARY 273</span> +<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define ENDBOUNDARY 274</span> +<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define CONTENTTYPE_VALUE 275</span> +<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define TSPECIAL 276</span> +<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define WORD 277</span> +<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define BODY 278</span> +<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define PREAMBLE 279</span> +<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define POSTAMBLE 280</span> +<a name="l00091"></a>00091 <span class="preprocessor"></span> +<a name="l00092"></a>00092 +<a name="l00093"></a>00093 +<a name="l00094"></a>00094 +<a name="l00095"></a>00095 <span class="preprocessor">#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED</span> +<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">union </span>YYSTYPE +<a name="l00097"></a>00097 #line 84 "mimeparser.y" +<a name="l00098"></a>00098 { +<a name="l00099"></a>00099 <span class="keywordtype">int</span> number; +<a name="l00100"></a>00100 <span class="keywordtype">char</span> *string; +<a name="l00101"></a>00101 <span class="keyword">struct </span>s_position position; +<a name="l00102"></a>00102 } +<a name="l00103"></a>00103 <span class="comment">/* Line 1489 of yacc.c. */</span> +<a name="l00104"></a>00104 <span class="preprocessor">#line 105 "mimeparser.tab.h"</span> +<a name="l00105"></a>00105 <span class="preprocessor"></span> YYSTYPE; +<a name="l00106"></a>00106 <span class="preprocessor"># define yystype YYSTYPE </span><span class="comment">/* obsolescent; will be withdrawn */</span> +<a name="l00107"></a>00107 <span class="preprocessor"># define YYSTYPE_IS_DECLARED 1</span> +<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor"># define YYSTYPE_IS_TRIVIAL 1</span> +<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#endif</span> +<a name="l00110"></a>00110 <span class="preprocessor"></span> +<a name="l00111"></a>00111 <span class="keyword">extern</span> YYSTYPE mimeparser_yylval; +<a name="l00112"></a>00112 +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm_8h-source.html b/main/minimime/mm-docs/html/mm_8h-source.html new file mode 100644 index 0000000000..cc5285c219 --- /dev/null +++ b/main/minimime/mm-docs/html/mm_8h-source.html @@ -0,0 +1,382 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> +<a name="l00002"></a>00002 <span class="comment"> * $Id$</span> +<a name="l00003"></a>00003 <span class="comment"> *</span> +<a name="l00004"></a>00004 <span class="comment"> * MiniMIME - a library for handling MIME messages</span> +<a name="l00005"></a>00005 <span class="comment"> *</span> +<a name="l00006"></a>00006 <span class="comment"> * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net></span> +<a name="l00007"></a>00007 <span class="comment"> * All rights reserved.</span> +<a name="l00008"></a>00008 <span class="comment"> *</span> +<a name="l00009"></a>00009 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span> +<a name="l00010"></a>00010 <span class="comment"> * modification, are permitted provided that the following conditions</span> +<a name="l00011"></a>00011 <span class="comment"> * are met:</span> +<a name="l00012"></a>00012 <span class="comment"> *</span> +<a name="l00013"></a>00013 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span> +<a name="l00014"></a>00014 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span> +<a name="l00015"></a>00015 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span> +<a name="l00016"></a>00016 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span> +<a name="l00017"></a>00017 <span class="comment"> * documentation and/or other materials provided with the distribution.</span> +<a name="l00018"></a>00018 <span class="comment"> * 3. Neither the name of the author nor the names of the contributors</span> +<a name="l00019"></a>00019 <span class="comment"> * may be used to endorse or promote products derived from this software</span> +<a name="l00020"></a>00020 <span class="comment"> * without specific prior written permission.</span> +<a name="l00021"></a>00021 <span class="comment"> *</span> +<a name="l00022"></a>00022 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND</span> +<a name="l00023"></a>00023 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span> +<a name="l00024"></a>00024 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span> +<a name="l00025"></a>00025 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD</span> +<a name="l00026"></a>00026 <span class="comment"> * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span> +<a name="l00027"></a>00027 <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span> +<a name="l00028"></a>00028 <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span> +<a name="l00029"></a>00029 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span> +<a name="l00030"></a>00030 <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span> +<a name="l00031"></a>00031 <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF</span> +<a name="l00032"></a>00032 <span class="comment"> * THE POSSIBILITY OF SUCH DAMAGE.</span> +<a name="l00033"></a>00033 <span class="comment"> */</span> +<a name="l00034"></a>00034 +<a name="l00035"></a>00035 <span class="preprocessor">#ifndef _MM_H_INCLUDED</span> +<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define _MM_H_INCLUDED</span> +<a name="l00037"></a>00037 <span class="preprocessor"></span> +<a name="l00038"></a>00038 <span class="preprocessor">#include <sys/types.h></span> +<a name="l00039"></a>00039 <span class="preprocessor">#include <assert.h></span> +<a name="l00040"></a>00040 <span class="preprocessor">#include "mm_queue.h"</span> +<a name="l00041"></a>00041 <span class="preprocessor">#include "mm_mem.h"</span> +<a name="l00042"></a>00042 +<a name="l00043"></a>00043 <span class="preprocessor">#define MM_MIME_LINELEN 998</span> +<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define MM_BASE64_LINELEN 76</span> +<a name="l00045"></a>00045 <span class="preprocessor"></span> +<a name="l00046"></a>00046 TAILQ_HEAD(mm_mimeheaders, mm_mimeheader); +<a name="l00047"></a>00047 TAILQ_HEAD(mm_mimeparts, mm_mimepart); +<a name="l00048"></a>00048 TAILQ_HEAD(mm_params, mm_param); +<a name="l00049"></a>00049 SLIST_HEAD(mm_codecs, mm_codec); +<a name="l00050"></a>00050 SLIST_HEAD(mm_warnings, mm_warning); +<a name="l00051"></a>00051 +<a name="l00052"></a>00052 <span class="comment">/*</span> +<a name="l00053"></a>00053 <span class="comment"> * Parser modes</span> +<a name="l00054"></a>00054 <span class="comment"> */</span> +<a name="l00055"></a>00055 <span class="keyword">enum</span> mm_parsemodes +<a name="l00056"></a>00056 { +<a name="l00058"></a>00058 MM_PARSE_LOOSE = 0, +<a name="l00060"></a>00060 MM_PARSE_STRICT +<a name="l00061"></a>00061 }; +<a name="l00062"></a>00062 +<a name="l00063"></a>00063 <span class="comment">/*</span> +<a name="l00064"></a>00064 <span class="comment"> * Available parser flags</span> +<a name="l00065"></a>00065 <span class="comment"> */</span> +<a name="l00066"></a>00066 <span class="keyword">enum</span> mm_parseflags +<a name="l00067"></a>00067 { +<a name="l00068"></a>00068 MM_PARSE_NONE = (1L << 0), +<a name="l00069"></a>00069 MM_PARSE_STRIPCOMMENTS = (1L << 1) +<a name="l00070"></a>00070 }; +<a name="l00071"></a>00071 +<a name="l00072"></a>00072 <span class="comment">/*</span> +<a name="l00073"></a>00073 <span class="comment"> * Enumeration of MIME encodings</span> +<a name="l00074"></a>00074 <span class="comment"> */</span> +<a name="l00075"></a>00075 <span class="keyword">enum</span> mm_encoding +<a name="l00076"></a>00076 { +<a name="l00077"></a>00077 MM_ENCODING_NONE = 0, +<a name="l00078"></a>00078 MM_ENCODING_BASE64, +<a name="l00079"></a>00079 MM_ENCODING_QUOTEDPRINTABLE, +<a name="l00080"></a>00080 MM_ENCODING_UNKNOWN +<a name="l00081"></a>00081 }; +<a name="l00082"></a>00082 +<a name="l00083"></a>00083 <span class="comment">/*</span> +<a name="l00084"></a>00084 <span class="comment"> * Message type</span> +<a name="l00085"></a>00085 <span class="comment"> */</span> +<a name="l00086"></a>00086 <span class="keyword">enum</span> mm_messagetype +<a name="l00087"></a>00087 { +<a name="l00089"></a>00089 MM_MSGTYPE_FLAT = 0, +<a name="l00091"></a>00091 MM_MSGTYPE_MULTIPART +<a name="l00092"></a>00092 }; +<a name="l00093"></a>00093 +<a name="l00094"></a>00094 <span class="comment">/*</span> +<a name="l00095"></a>00095 <span class="comment"> * Enumeration of error categories</span> +<a name="l00096"></a>00096 <span class="comment"> */</span> +<a name="l00097"></a>00097 <span class="keyword">enum</span> mm_errors +<a name="l00098"></a>00098 { +<a name="l00099"></a>00099 MM_ERROR_NONE = 0, +<a name="l00100"></a>00100 MM_ERROR_UNDEF, +<a name="l00101"></a>00101 MM_ERROR_ERRNO, +<a name="l00102"></a>00102 MM_ERROR_PARSE, +<a name="l00103"></a>00103 MM_ERROR_MIME, +<a name="l00104"></a>00104 MM_ERROR_CODEC, +<a name="l00105"></a>00105 MM_ERROR_PROGRAM +<a name="l00106"></a>00106 }; +<a name="l00107"></a>00107 +<a name="l00108"></a>00108 <span class="keyword">enum</span> mm_warning_ids +<a name="l00109"></a>00109 { +<a name="l00110"></a>00110 MM_WARN_NONE = 0, +<a name="l00111"></a>00111 MM_WARN_PARSE, +<a name="l00112"></a>00112 MM_WARN_MIME, +<a name="l00113"></a>00113 MM_WARN_CODEC +<a name="l00114"></a>00114 }; +<a name="l00115"></a>00115 +<a name="l00116"></a>00116 <span class="keyword">enum</span> mm_addressfields { +<a name="l00117"></a>00117 MM_ADDR_TO = 0, +<a name="l00118"></a>00118 MM_ADDR_CC, +<a name="l00119"></a>00119 MM_ADDR_BCC, +<a name="l00120"></a>00120 MM_ADDR_FROM, +<a name="l00121"></a>00121 MM_ADDR_SENDER, +<a name="l00122"></a>00122 MM_ADDR_REPLY_TO +<a name="l00123"></a>00123 }; +<a name="l00124"></a>00124 +<a name="l00125"></a>00125 <span class="keyword">enum</span> mm_flatten_flags { +<a name="l00126"></a>00126 MM_FLATTEN_NONE = 0, +<a name="l00127"></a>00127 MM_FLATTEN_SKIPENVELOPE = (1L << 1), +<a name="l00128"></a>00128 MM_FLATTEN_OPAQUE = (1L << 2), +<a name="l00129"></a>00129 MM_FLATTEN_NOPREAMBLE = (1L << 3) +<a name="l00130"></a>00130 }; +<a name="l00131"></a>00131 +<a name="l00132"></a>00132 <span class="comment">/*</span> +<a name="l00133"></a>00133 <span class="comment"> * More information about an error</span> +<a name="l00134"></a>00134 <span class="comment"> */</span> +<a name="l00135"></a>00135 <span class="keyword">struct </span>mm_error_data +<a name="l00136"></a>00136 { +<a name="l00137"></a>00137 <span class="keywordtype">int</span> error_id; +<a name="l00138"></a>00138 <span class="keywordtype">int</span> error_where; +<a name="l00139"></a>00139 <span class="keywordtype">int</span> lineno; +<a name="l00140"></a>00140 <span class="keywordtype">char</span> error_msg[128]; +<a name="l00141"></a>00141 }; +<a name="l00142"></a>00142 +<a name="l00143"></a>00143 <span class="keyword">extern</span> <span class="keywordtype">int</span> mm_errno; +<a name="l00144"></a>00144 <span class="keyword">extern</span> <span class="keyword">struct </span>mm_error_data mm_error; +<a name="l00145"></a>00145 +<a name="l00146"></a>00146 <span class="keyword">enum</span> mm_warning_code +<a name="l00147"></a>00147 { +<a name="l00148"></a>00148 MM_WARNING_NONE = 0, +<a name="l00149"></a>00149 MM_WARNING_INVHDR, +<a name="l00150"></a>00150 }; +<a name="l00151"></a>00151 +<a name="l00152"></a>00152 <span class="comment">/*</span> +<a name="l00153"></a>00153 <span class="comment"> * A parser warning</span> +<a name="l00154"></a>00154 <span class="comment"> */</span> +<a name="l00155"></a>00155 <span class="keyword">struct </span>mm_warning +<a name="l00156"></a>00156 { +<a name="l00157"></a>00157 <span class="keyword">enum</span> mm_warning_code warning; +<a name="l00158"></a>00158 u_int32_t lineno; +<a name="l00159"></a>00159 SLIST_ENTRY(mm_warning) next; +<a name="l00160"></a>00160 }; +<a name="l00161"></a>00161 +<a name="l00162"></a>00162 <span class="comment">/*</span> +<a name="l00163"></a>00163 <span class="comment"> * Representation of a MiniMIME codec object</span> +<a name="l00164"></a>00164 <span class="comment"> */</span> +<a name="l00165"></a>00165 struct mm_codec +<a name="l00166"></a>00166 { +<a name="l00167"></a>00167 <span class="keyword">enum</span> mm_encoding id; +<a name="l00168"></a>00168 <span class="keywordtype">char</span> *encoding; +<a name="l00169"></a>00169 +<a name="l00170"></a>00170 <span class="keywordtype">char</span> *(*encoder)(<span class="keywordtype">char</span> *, u_int32_t); +<a name="l00171"></a>00171 <span class="keywordtype">char</span> *(*decoder)(<span class="keywordtype">char</span> *); +<a name="l00172"></a>00172 +<a name="l00173"></a>00173 SLIST_ENTRY(mm_codec) next; +<a name="l00174"></a>00174 }; +<a name="l00175"></a>00175 +<a name="l00176"></a>00176 <span class="comment">/*</span> +<a name="l00177"></a>00177 <span class="comment"> * Representation of a mail or MIME header field</span> +<a name="l00178"></a>00178 <span class="comment"> */</span> +<a name="l00179"></a>00179 struct mm_mimeheader +<a name="l00180"></a>00180 { +<a name="l00181"></a>00181 <span class="keywordtype">char</span> *name; +<a name="l00182"></a>00182 <span class="keywordtype">char</span> *value; +<a name="l00183"></a>00183 +<a name="l00184"></a>00184 TAILQ_ENTRY(mm_mimeheader) next; +<a name="l00185"></a>00185 }; +<a name="l00186"></a>00186 +<a name="l00187"></a>00187 <span class="comment">/*</span> +<a name="l00188"></a>00188 <span class="comment"> * Representation of a MIME Content-Type parameter</span> +<a name="l00189"></a>00189 <span class="comment"> */</span> +<a name="l00190"></a>00190 struct mm_param +<a name="l00191"></a>00191 { +<a name="l00192"></a>00192 <span class="keywordtype">char</span> *name; +<a name="l00193"></a>00193 <span class="keywordtype">char</span> *value; +<a name="l00194"></a>00194 +<a name="l00195"></a>00195 TAILQ_ENTRY(mm_param) next; +<a name="l00196"></a>00196 }; +<a name="l00197"></a>00197 +<a name="l00198"></a>00198 <span class="comment">/*</span> +<a name="l00199"></a>00199 <span class="comment"> * Representation of a MIME Content-Type object</span> +<a name="l00200"></a>00200 <span class="comment"> */</span> +<a name="l00201"></a>00201 struct mm_content +<a name="l00202"></a>00202 { +<a name="l00203"></a>00203 <span class="keywordtype">char</span> *maintype; +<a name="l00204"></a>00204 <span class="keywordtype">char</span> *subtype; +<a name="l00205"></a>00205 +<a name="l00206"></a>00206 <span class="keyword">struct </span>mm_params params; +<a name="l00207"></a>00207 +<a name="l00208"></a>00208 <span class="keywordtype">char</span> *encstring; +<a name="l00209"></a>00209 <span class="keyword">enum</span> mm_encoding encoding; +<a name="l00210"></a>00210 }; +<a name="l00211"></a>00211 +<a name="l00212"></a>00212 <span class="comment">/*</span> +<a name="l00213"></a>00213 <span class="comment"> * Representation of a MIME part </span> +<a name="l00214"></a>00214 <span class="comment"> */</span> +<a name="l00215"></a>00215 <span class="keyword">struct </span>mm_mimepart +<a name="l00216"></a>00216 { +<a name="l00217"></a>00217 <span class="keyword">struct </span>mm_mimeheaders headers; +<a name="l00218"></a>00218 +<a name="l00219"></a>00219 size_t opaque_length; +<a name="l00220"></a>00220 <span class="keywordtype">char</span> *opaque_body; +<a name="l00221"></a>00221 +<a name="l00222"></a>00222 size_t length; +<a name="l00223"></a>00223 <span class="keywordtype">char</span> *body; +<a name="l00224"></a>00224 +<a name="l00225"></a>00225 <span class="keyword">struct </span>mm_content *type; +<a name="l00226"></a>00226 +<a name="l00227"></a>00227 <span class="keywordtype">char</span> *disposition_type; +<a name="l00228"></a>00228 <span class="keywordtype">char</span> *filename; +<a name="l00229"></a>00229 <span class="keywordtype">char</span> *creation_date; +<a name="l00230"></a>00230 <span class="keywordtype">char</span> *modification_date; +<a name="l00231"></a>00231 <span class="keywordtype">char</span> *read_date; +<a name="l00232"></a>00232 <span class="keywordtype">char</span> *disposition_size; +<a name="l00233"></a>00233 +<a name="l00234"></a>00234 TAILQ_ENTRY(mm_mimepart) next; +<a name="l00235"></a>00235 }; +<a name="l00236"></a>00236 +<a name="l00237"></a>00237 <span class="comment">/*</span> +<a name="l00238"></a>00238 <span class="comment"> * Represantation of a MiniMIME context</span> +<a name="l00239"></a>00239 <span class="comment"> */</span> +<a name="l00240"></a>00240 struct mm_context +<a name="l00241"></a>00241 { +<a name="l00242"></a>00242 <span class="keyword">struct </span>mm_mimeparts parts; +<a name="l00243"></a>00243 <span class="keyword">enum</span> mm_messagetype messagetype; +<a name="l00244"></a>00244 <span class="keyword">struct </span>mm_warnings warnings; +<a name="l00245"></a>00245 <span class="keyword">struct </span>mm_codecs codecs; +<a name="l00246"></a>00246 <span class="keywordtype">char</span> *boundary; +<a name="l00247"></a>00247 <span class="keywordtype">char</span> *preamble; +<a name="l00248"></a>00248 size_t max_message_size; +<a name="l00249"></a>00249 }; +<a name="l00250"></a>00250 +<a name="l00251"></a>00251 <span class="keyword">typedef</span> <span class="keyword">struct </span>mm_context MM_CTX; +<a name="l00252"></a>00252 <span class="keyword">typedef</span> <span class="keyword">struct </span>mm_context mm_ctx_t; +<a name="l00253"></a>00253 +<a name="l00254"></a>00254 <span class="keywordtype">char</span> *<a class="code" href="group__util.html#gf0f89a29a634f6f1f833abb1e214a6b1">mm_unquote</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00255"></a>00255 <span class="keywordtype">char</span> *<a class="code" href="group__util.html#g49c016ff4cfd02f1b019c4dce5aac357">mm_uncomment</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00256"></a>00256 <span class="keywordtype">char</span> *<a class="code" href="group__util.html#gf62be7dd21e545f8db72f3c9e3b6a3c3">mm_stripchars</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *); +<a name="l00257"></a>00257 <span class="keywordtype">char</span> *<a class="code" href="group__util.html#g0747d4b4e33644263e6d73d2d8d4818b">mm_addchars</a>(<span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, u_int16_t); +<a name="l00258"></a>00258 <span class="keywordtype">int</span> mm_gendate(<span class="keywordtype">char</span> **); +<a name="l00259"></a>00259 <span class="keywordtype">void</span> mm_striptrailing(<span class="keywordtype">char</span> **, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00260"></a>00260 <span class="keywordtype">int</span> mm_mimeutil_genboundary(<span class="keywordtype">char</span> *, size_t, <span class="keywordtype">char</span> **); +<a name="l00261"></a>00261 +<a name="l00262"></a>00262 <span class="keywordtype">int</span> mm_library_init(<span class="keywordtype">void</span>); +<a name="l00263"></a>00263 <span class="keywordtype">int</span> mm_library_isinitialized(<span class="keywordtype">void</span>); +<a name="l00264"></a>00264 +<a name="l00265"></a>00265 <span class="keywordtype">int</span> <a class="code" href="mm__parse_8c.html#58c960b6017f13d4e4ec5f09b3c38495">mm_parse_mem</a>(MM_CTX *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>); +<a name="l00266"></a>00266 <span class="keywordtype">int</span> <a class="code" href="mm__parse_8c.html#cc9f623682b05f330c46e72e4e9d66cc">mm_parse_file</a>(MM_CTX *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>); +<a name="l00267"></a>00267 +<a name="l00268"></a>00268 MM_CTX *<a class="code" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new</a>(<span class="keywordtype">void</span>); +<a name="l00269"></a>00269 <span class="keywordtype">void</span> <a class="code" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free</a>(MM_CTX *); +<a name="l00270"></a>00270 <span class="keywordtype">int</span> <a class="code" href="group__context.html#gec3ca486a61b392ff68774242086768e">mm_context_attachpart</a>(MM_CTX *, <span class="keyword">struct</span> mm_mimepart *); +<a name="l00271"></a>00271 <span class="keywordtype">int</span> <a class="code" href="group__context.html#g53d20c33a401539ef1ffa45f3dddb983">mm_context_deletepart</a>(MM_CTX *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>); +<a name="l00272"></a>00272 <span class="keywordtype">int</span> <a class="code" href="group__context.html#gf5bb032ad1c481d31d7b1b0710939712">mm_context_countparts</a>(MM_CTX *); +<a name="l00273"></a>00273 <span class="keyword">struct </span>mm_mimepart *<a class="code" href="group__context.html#g57fea229675f3e56a77eb40bb8193ee3">mm_context_getpart</a>(MM_CTX *, <span class="keywordtype">int</span>); +<a name="l00274"></a>00274 <span class="keywordtype">int</span> <a class="code" href="group__context.html#g1e73cadba4acd3ef9dd148dd0c2c3e70">mm_context_iscomposite</a>(MM_CTX *); +<a name="l00275"></a>00275 <span class="keywordtype">int</span> <a class="code" href="group__context.html#g8733dee7d83d3205349a7ee4ee5b2750">mm_context_haswarnings</a>(MM_CTX *); +<a name="l00276"></a>00276 <span class="keywordtype">int</span> <a class="code" href="group__context.html#g5288136ab923605f6508c09359ae5772">mm_context_flatten</a>(MM_CTX *, <span class="keywordtype">char</span> **, size_t *, <span class="keywordtype">int</span>); +<a name="l00277"></a>00277 +<a name="l00278"></a>00278 <span class="keywordtype">int</span> <a class="code" href="group__envelope.html#g38f1164142cedfc3253b068a81f85563">mm_envelope_getheaders</a>(MM_CTX *, <span class="keywordtype">char</span> **, size_t *); +<a name="l00279"></a>00279 <span class="keywordtype">int</span> <a class="code" href="group__envelope.html#gb2c43c1645e42ae0860c902ce1dda788">mm_envelope_setheader</a>(MM_CTX *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...); +<a name="l00280"></a>00280 +<a name="l00281"></a>00281 <span class="keyword">struct </span>mm_mimeheader *<a class="code" href="mm__header_8c.html#2f2c5f2f640111caf3096ed46b5986a4">mm_mimeheader_new</a>(<span class="keywordtype">void</span>); +<a name="l00282"></a>00282 <span class="keywordtype">void</span> <a class="code" href="mm__header_8c.html#61e3e62728f720ac381196ec59303064">mm_mimeheader_free</a>(<span class="keyword">struct</span> mm_mimeheader *); +<a name="l00283"></a>00283 <span class="keyword">struct </span>mm_mimeheader *<a class="code" href="mm__header_8c.html#07a7f7dcebc91aa86f5478e1d84341a1">mm_mimeheader_generate</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00284"></a>00284 <span class="keywordtype">int</span> mm_mimeheader_uncomment(<span class="keyword">struct</span> mm_mimeheader *); +<a name="l00285"></a>00285 <span class="keywordtype">int</span> mm_mimeheader_uncommentbyname(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00286"></a>00286 <span class="keywordtype">int</span> mm_mimeheader_uncommentall(<span class="keyword">struct</span> mm_mimepart *); +<a name="l00287"></a>00287 <span class="keywordtype">int</span> mm_mimeheader_tostring(<span class="keyword">struct</span> mm_mimeheader *); +<a name="l00288"></a>00288 +<a name="l00289"></a>00289 <span class="keyword">struct </span>mm_mimepart *<a class="code" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart_new</a>(<span class="keywordtype">void</span>); +<a name="l00290"></a>00290 <span class="keywordtype">void</span> <a class="code" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free</a>(<span class="keyword">struct</span> mm_mimepart *); +<a name="l00291"></a>00291 <span class="keywordtype">int</span> <a class="code" href="group__mimepart.html#g46a674ff6b9873c0c45fa4eb5d94fd62">mm_mimepart_attachheader</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">struct</span> mm_mimeheader *); +<a name="l00292"></a>00292 <span class="keywordtype">int</span> <a class="code" href="group__mimepart.html#g44c78abfb0535312bcb427a2cd220026">mm_mimepart_countheaders</a>(<span class="keyword">struct</span> mm_mimepart *part); +<a name="l00293"></a>00293 <span class="keywordtype">int</span> <a class="code" href="group__mimepart.html#gf89da502ac54306994bdb452448a8026">mm_mimepart_countheaderbyname</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00294"></a>00294 <span class="keyword">struct </span>mm_mimeheader *<a class="code" href="group__mimepart.html#ga3ca298eaa82f4ef3ea731511ac84e53">mm_mimepart_getheaderbyname</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00295"></a>00295 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__mimepart.html#g779f11f7a6a54f83763b5ef6ff87e48f">mm_mimepart_getheadervalue</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00296"></a>00296 <span class="keywordtype">int</span> <a class="code" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart_headers_start</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">struct</span> mm_mimeheader **); +<a name="l00297"></a>00297 <span class="keyword">struct </span>mm_mimeheader *<a class="code" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart_headers_next</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">struct</span> mm_mimeheader **); +<a name="l00298"></a>00298 <span class="keywordtype">char</span> *<a class="code" href="group__mimepart.html#g4551bf4460e5d165bbcd9f32d4f625de">mm_mimepart_decode</a>(<span class="keyword">struct</span> mm_mimepart *); +<a name="l00299"></a>00299 <span class="keyword">struct </span>mm_content *<a class="code" href="group__mimepart.html#g210e2ceee56f8349f6778006da87d080">mm_mimepart_gettype</a>(<span class="keyword">struct</span> mm_mimepart *); +<a name="l00300"></a>00300 size_t <a class="code" href="group__mimepart.html#gf8ccae1737dc4b9b91958fe448da677f">mm_mimepart_getlength</a>(<span class="keyword">struct</span> mm_mimepart *); +<a name="l00301"></a>00301 <span class="keywordtype">char</span> *<a class="code" href="group__mimepart.html#g52dc9f27a2801e4f6abb1effd2ed838d">mm_mimepart_getbody</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keywordtype">int</span>); +<a name="l00302"></a>00302 <span class="keywordtype">void</span> <a class="code" href="group__mimepart.html#g01822bc93b4741af75b5379384354e37">mm_mimepart_attachcontenttype</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keyword">struct</span> mm_content *); +<a name="l00303"></a>00303 <span class="keywordtype">int</span> <a class="code" href="group__mimepart.html#g164bb39a266559574c252f11266809ff">mm_mimepart_setdefaultcontenttype</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keywordtype">int</span>); +<a name="l00304"></a>00304 <span class="keywordtype">int</span> <a class="code" href="group__mimepart.html#gf19d3ace5ae174b3eaa35f9ddbe6e216">mm_mimepart_flatten</a>(<span class="keyword">struct</span> mm_mimepart *, <span class="keywordtype">char</span> **, size_t *, <span class="keywordtype">int</span>); +<a name="l00305"></a>00305 <span class="keyword">struct </span>mm_mimepart *<a class="code" href="group__mimepart.html#ged8112012a337371ae8093adb1ab6d27">mm_mimepart_fromfile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00306"></a>00306 +<a name="l00307"></a>00307 <span class="keyword">struct </span>mm_content *<a class="code" href="group__contenttype.html#g3880ac74a20b4a9f610a4159568e1801">mm_content_new</a>(<span class="keywordtype">void</span>); +<a name="l00308"></a>00308 <span class="keywordtype">void</span> <a class="code" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_content_free</a>(<span class="keyword">struct</span> mm_content *); +<a name="l00309"></a>00309 <span class="keywordtype">int</span> <a class="code" href="group__contenttype.html#g080b7ed798ed497dcd635a6bab86962f">mm_content_attachparam</a>(<span class="keyword">struct</span> mm_content *, <span class="keyword">struct</span> mm_param *); +<a name="l00310"></a>00310 <span class="keyword">struct </span>mm_content *mm_content_parse(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00311"></a>00311 <span class="keywordtype">char</span> *<a class="code" href="group__contenttype.html#g451441ee557ab5ef29477f3dc8330bf6">mm_content_getparambyname</a>(<span class="keyword">struct</span> mm_content *, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00312"></a>00312 <span class="keyword">struct </span>mm_param *mm_content_getparamobjbyname(<span class="keyword">struct</span> mm_content *, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00313"></a>00313 <span class="keywordtype">int</span> <a class="code" href="group__contenttype.html#g7bab273d117c6c0cacad20361d8fb1c8">mm_content_setmaintype</a>(<span class="keyword">struct</span> mm_content *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00314"></a>00314 <span class="keywordtype">int</span> <a class="code" href="group__contenttype.html#g14b0738410d566ad2312405946f22212">mm_content_setsubtype</a>(<span class="keyword">struct</span> mm_content *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00315"></a>00315 <span class="keywordtype">int</span> mm_content_settype(<span class="keyword">struct</span> mm_content *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...); +<a name="l00316"></a>00316 <span class="keywordtype">char</span> *<a class="code" href="group__contenttype.html#gb213081017abf6bc7e601c6bf4214924">mm_content_getmaintype</a>(<span class="keyword">struct</span> mm_content *); +<a name="l00317"></a>00317 <span class="keywordtype">char</span> *<a class="code" href="group__contenttype.html#g97f77ef40c14cd0fb397bad358ee5d49">mm_content_getsubtype</a>(<span class="keyword">struct</span> mm_content *); +<a name="l00318"></a>00318 <span class="keywordtype">char</span> *mm_content_gettype(<span class="keyword">struct</span> mm_content *); +<a name="l00319"></a>00319 <span class="keywordtype">int</span> <a class="code" href="group__contenttype.html#ga7fa479f27e73dea57257421d8fc9fc5">mm_content_iscomposite</a>(<span class="keyword">struct</span> mm_content *); +<a name="l00320"></a>00320 <span class="keywordtype">int</span> <a class="code" href="group__contenttype.html#gb724b5979182fa272fe4fd1b72b395d5">mm_content_isvalidencoding</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00321"></a>00321 <span class="keywordtype">int</span> <a class="code" href="group__contenttype.html#gea945e48ac5cca846715543634b9afe4">mm_content_setencoding</a>(<span class="keyword">struct</span> mm_content *, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00322"></a>00322 <span class="keywordtype">char</span> *<a class="code" href="group__contenttype.html#g792e7d33fbb30e0123408bcef9d3204c">mm_content_paramstostring</a>(<span class="keyword">struct</span> mm_content *); +<a name="l00323"></a>00323 <span class="keywordtype">char</span> *<a class="code" href="group__contenttype.html#g18a99c95e35a76f13a77a83c4231e738">mm_content_tostring</a>(<span class="keyword">struct</span> mm_content *); +<a name="l00324"></a>00324 +<a name="l00325"></a>00325 <span class="keyword">struct </span>mm_param *<a class="code" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param_new</a>(<span class="keywordtype">void</span>); +<a name="l00326"></a>00326 <span class="keywordtype">void</span> <a class="code" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param_free</a>(<span class="keyword">struct</span> mm_param *); +<a name="l00327"></a>00327 +<a name="l00328"></a>00328 <span class="keywordtype">char</span> *mm_flatten_mimepart(<span class="keyword">struct</span> mm_mimepart *); +<a name="l00329"></a>00329 <span class="keywordtype">char</span> *mm_flatten_context(MM_CTX *); +<a name="l00330"></a>00330 +<a name="l00331"></a>00331 <span class="keywordtype">int</span> <a class="code" href="group__codecs.html#g9e19f6343128fd7e4ec57c3d55049b55">mm_codec_isregistered</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00332"></a>00332 <span class="keywordtype">int</span> <a class="code" href="group__codecs.html#g6ccb0f7a1d7c870dc3dae04f31d6ccca">mm_codec_hasdecoder</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00333"></a>00333 <span class="keywordtype">int</span> <a class="code" href="group__codecs.html#g50ff257b794ceaec7aedf9ae18bfcc57">mm_codec_hasencoder</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00334"></a>00334 <span class="keywordtype">int</span> <a class="code" href="group__codecs.html#gf97a7311c909888ed9f6f14d6f1bf397">mm_codec_register</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *(*encoder)(<span class="keywordtype">char</span> *, u_int32_t), <span class="keywordtype">char</span> *(*decoder)(<span class="keywordtype">char</span> *)); +<a name="l00335"></a>00335 <span class="keywordtype">int</span> <a class="code" href="group__codecs.html#g0c71696bc70f834386193e3c7a0e2ca4">mm_codec_unregister</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00336"></a>00336 <span class="keywordtype">int</span> <a class="code" href="group__codecs.html#g7c9e6538f84c368be2b56a3c9ba702be">mm_codec_unregisterall</a>(<span class="keywordtype">void</span>); +<a name="l00337"></a>00337 <span class="keywordtype">void</span> <a class="code" href="group__codecs.html#gf39e72460fb85f5ca41f6e270a68aacc">mm_codec_registerdefaultcodecs</a>(<span class="keywordtype">void</span>); +<a name="l00338"></a>00338 +<a name="l00339"></a>00339 <span class="keywordtype">char</span> *mm_base64_decode(<span class="keywordtype">char</span> *); +<a name="l00340"></a>00340 <span class="keywordtype">char</span> *mm_base64_encode(<span class="keywordtype">char</span> *, u_int32_t); +<a name="l00341"></a>00341 +<a name="l00342"></a>00342 <span class="keywordtype">void</span> <a class="code" href="group__error.html#g69de7c9bee1d535593a55807590de543">mm_error_init</a>(<span class="keywordtype">void</span>); +<a name="l00343"></a>00343 <span class="keywordtype">void</span> <a class="code" href="group__error.html#g92006c97728639d8f32f5bc4c6e2a47f">mm_error_setmsg</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, ...); +<a name="l00344"></a>00344 <span class="keywordtype">void</span> mm_error_setlineno(<span class="keywordtype">int</span> lineno); +<a name="l00345"></a>00345 <span class="keywordtype">char</span> *<a class="code" href="group__error.html#g8654857a3ac349b87d798902912371a3">mm_error_string</a>(<span class="keywordtype">void</span>); +<a name="l00346"></a>00346 <span class="keywordtype">int</span> mm_error_lineno(<span class="keywordtype">void</span>); +<a name="l00347"></a>00347 +<a name="l00348"></a>00348 <span class="keywordtype">void</span> mm_warning_add(MM_CTX *, <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...); +<a name="l00349"></a>00349 <span class="keyword">struct </span>mm_warning *mm_warning_next(MM_CTX *, <span class="keyword">struct</span> mm_warning **); +<a name="l00350"></a>00350 +<a name="l00351"></a>00351 <span class="preprocessor">#ifndef HAVE_STRLCPY</span> +<a name="l00352"></a>00352 <span class="preprocessor"></span>size_t strlcpy(<span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, size_t); +<a name="l00353"></a>00353 <span class="preprocessor">#endif </span><span class="comment">/* ! HAVE_STRLCPY */</span> +<a name="l00354"></a>00354 <span class="preprocessor">#ifndef HAVE_STRLCAT</span> +<a name="l00355"></a>00355 <span class="preprocessor"></span>size_t strlcat(<span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, size_t); +<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* ! HAVE_STRLCAT */</span> +<a name="l00357"></a>00357 +<a name="l00358"></a>00358 <span class="preprocessor">#define MM_ISINIT() do { \</span> +<a name="l00359"></a>00359 <span class="preprocessor"> assert(mm_library_isinitialized() == 1); \</span> +<a name="l00360"></a>00360 <span class="preprocessor">} while (0);</span> +<a name="l00361"></a>00361 <span class="preprocessor"></span> +<a name="l00362"></a>00362 <span class="preprocessor">#endif </span><span class="comment">/* ! _MM_H_INCLUDED */</span> +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__codecs_8c.html b/main/minimime/mm-docs/html/mm__codecs_8c.html new file mode 100644 index 0000000000..286282b956 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__codecs_8c.html @@ -0,0 +1,58 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_codecs.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_codecs.c File Reference</h1><code>#include <sys/types.h></code><br> +<code>#include <sys/stat.h></code><br> +<code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <unistd.h></code><br> +<code>#include <fcntl.h></code><br> +<code>#include <string.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Codec manipulation</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g6ccb0f7a1d7c870dc3dae04f31d6ccca">mm_codec_hasdecoder</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g50ff257b794ceaec7aedf9ae18bfcc57">mm_codec_hasencoder</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g9e19f6343128fd7e4ec57c3d55049b55">mm_codec_isregistered</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#gf97a7311c909888ed9f6f14d6f1bf397">mm_codec_register</a> (const char *encoding, char *(*encoder)(char *data, u_int32_t i), char *(*decoder)(char *data))</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g0c71696bc70f834386193e3c7a0e2ca4">mm_codec_unregister</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#g7c9e6538f84c368be2b56a3c9ba702be">mm_codec_unregisterall</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__codecs.html#gf39e72460fb85f5ca41f6e270a68aacc">mm_codec_registerdefaultcodecs</a> (void)</td></tr> + +<tr><td colspan="2"><br><h2>Variables</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b669b6dc7c7d10408d8da81b3f1a30d3"></a><!-- doxytag: member="mm_codecs.c::codecs" ref="b669b6dc7c7d10408d8da81b3f1a30d3" args="" --> +mm_codecs </td><td class="memItemRight" valign="bottom"><b>codecs</b></td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains functions to manipulate MiniMIME codecs <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__contenttype_8c.html b/main/minimime/mm-docs/html/mm__contenttype_8c.html new file mode 100644 index 0000000000..77b44a8b56 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__contenttype_8c.html @@ -0,0 +1,78 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_contenttype.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_contenttype.c File Reference</h1><code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <stdarg.h></code><br> +<code>#include <string.h></code><br> +<code>#include <ctype.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>mm_encoding_mappings</b></td></tr> + +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Functions for manipulating Content-Type objects</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_content * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g3880ac74a20b4a9f610a4159568e1801">mm_content_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g404314481125849bce869ee4b0f647af">mm_content_free</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g080b7ed798ed497dcd635a6bab86962f">mm_content_attachparam</a> (struct mm_content *ct, struct mm_param *param)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g451441ee557ab5ef29477f3dc8330bf6">mm_content_getparambyname</a> (struct mm_content *ct, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ba63e679d2b49aceb6cfec8a6752581"></a><!-- doxytag: member="mm_contenttype.c::mm_content_getparamobjbyname" ref="g1ba63e679d2b49aceb6cfec8a6752581" args="(struct mm_content *ct, const char *name)" --> +mm_param * </td><td class="memItemRight" valign="bottom"><b>mm_content_getparamobjbyname</b> (struct mm_content *ct, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g7bab273d117c6c0cacad20361d8fb1c8">mm_content_setmaintype</a> (struct mm_content *ct, char *value, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gb213081017abf6bc7e601c6bf4214924">mm_content_getmaintype</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g97f77ef40c14cd0fb397bad358ee5d49">mm_content_getsubtype</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga6d8453eb35bd695c4944e53b7040b65"></a><!-- doxytag: member="mm_contenttype.c::mm_content_gettype" ref="ga6d8453eb35bd695c4944e53b7040b65" args="(struct mm_content *ct)" --> +char * </td><td class="memItemRight" valign="bottom"><b>mm_content_gettype</b> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g14b0738410d566ad2312405946f22212">mm_content_setsubtype</a> (struct mm_content *ct, char *value, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g878686678ea2ba97aa8edb1206a564d8"></a><!-- doxytag: member="mm_contenttype.c::mm_content_settype" ref="g878686678ea2ba97aa8edb1206a564d8" args="(struct mm_content *ct, const char *fmt,...)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_content_settype</b> (struct mm_content *ct, const char *fmt,...)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#ga7fa479f27e73dea57257421d8fc9fc5">mm_content_iscomposite</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gb724b5979182fa272fe4fd1b72b395d5">mm_content_isvalidencoding</a> (const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gea945e48ac5cca846715543634b9afe4">mm_content_setencoding</a> (struct mm_content *ct, const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#gbff87e581cd04db16e91245e9e9de67d">mm_content_getencoding</a> (struct mm_content *ct, const char *encoding)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g792e7d33fbb30e0123408bcef9d3204c">mm_content_paramstostring</a> (struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__contenttype.html#g18a99c95e35a76f13a77a83c4231e738">mm_content_tostring</a> (struct mm_content *ct)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains functions for manipulating Content-Type objects. <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__context_8c.html b/main/minimime/mm-docs/html/mm__context_8c.html new file mode 100644 index 0000000000..064caad5de --- /dev/null +++ b/main/minimime/mm-docs/html/mm__context_8c.html @@ -0,0 +1,63 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_context.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_context.c File Reference</h1><code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <stdarg.h></code><br> +<code>#include <string.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Manipulating MiniMIME contexts</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">MM_CTX * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#gec3ca486a61b392ff68774242086768e">mm_context_attachpart</a> (MM_CTX *ctx, struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g73a3dd187053aeabca4836dc28a6c468">mm_context_attachpart_after</a> (MM_CTX *ctx, struct mm_mimepart *part, int pos)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g53d20c33a401539ef1ffa45f3dddb983">mm_context_deletepart</a> (MM_CTX *ctx, int which, int freemem)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#gf5bb032ad1c481d31d7b1b0710939712">mm_context_countparts</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimepart * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g57fea229675f3e56a77eb40bb8193ee3">mm_context_getpart</a> (MM_CTX *ctx, int which)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g1e73cadba4acd3ef9dd148dd0c2c3e70">mm_context_iscomposite</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g8733dee7d83d3205349a7ee4ee5b2750">mm_context_haswarnings</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g9710e485f51167099d90f0d659979068">mm_context_generateboundary</a> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#gc0e7cc297516618d4773830a1988fc8d">mm_context_setpreamble</a> (MM_CTX *ctx, char *preamble)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ebbdd51106ccdee77ca421f9692bde7"></a><!-- doxytag: member="mm_context.c::mm_context_getpreamble" ref="g1ebbdd51106ccdee77ca421f9692bde7" args="(MM_CTX *ctx)" --> +char * </td><td class="memItemRight" valign="bottom"><b>mm_context_getpreamble</b> (MM_CTX *ctx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__context.html#g5288136ab923605f6508c09359ae5772">mm_context_flatten</a> (MM_CTX *ctx, char **flat, size_t *length, int flags)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +Modules for manipulating MiniMIME contexts <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__envelope_8c.html b/main/minimime/mm-docs/html/mm__envelope_8c.html new file mode 100644 index 0000000000..62fd8d7847 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__envelope_8c.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_envelope.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_envelope.c File Reference</h1><code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <stdarg.h></code><br> +<code>#include <string.h></code><br> +<code>#include <ctype.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Accessing and manipulating a message's envelope</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__envelope.html#g38f1164142cedfc3253b068a81f85563">mm_envelope_getheaders</a> (MM_CTX *ctx, char **result, size_t *length)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__envelope.html#gb2c43c1645e42ae0860c902ce1dda788">mm_envelope_setheader</a> (MM_CTX *ctx, const char *name, const char *fmt,...)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__envelope.html#ge63da17c56867ca2406a4eaf73230baf">mm_envelope_getrecipients</a> (MM_CTX *ctx, char **result, size_t *length)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains functions for accessing a message's envelope. This are mainly wrapper functions for easy access. <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__error_8c.html b/main/minimime/mm-docs/html/mm__error_8c.html new file mode 100644 index 0000000000..87ff13783b --- /dev/null +++ b/main/minimime/mm-docs/html/mm__error_8c.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_error.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_error.c File Reference</h1><code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <stdarg.h></code><br> +<code>#include <string.h></code><br> +<code>#include <assert.h></code><br> +<code>#include <errno.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#g69de7c9bee1d535593a55807590de543">mm_error_init</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#g92006c97728639d8f32f5bc4c6e2a47f">mm_error_setmsg</a> (const char *fmt,...)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="190c991d7bb378b6cd6f995ffc3011f7"></a><!-- doxytag: member="mm_error.c::mm_error_setlineno" ref="190c991d7bb378b6cd6f995ffc3011f7" args="(int lineno)" --> +void </td><td class="memItemRight" valign="bottom"><b>mm_error_setlineno</b> (int lineno)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#g8654857a3ac349b87d798902912371a3">mm_error_string</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c84acacac29f1e6efd10bb3a89eab272"></a><!-- doxytag: member="mm_error.c::mm_error_lineno" ref="c84acacac29f1e6efd10bb3a89eab272" args="(void)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_error_lineno</b> (void)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains functions for MiniMIME error information/manipulation <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__header_8c.html b/main/minimime/mm-docs/html/mm__header_8c.html new file mode 100644 index 0000000000..7d0212e6bc --- /dev/null +++ b/main/minimime/mm-docs/html/mm__header_8c.html @@ -0,0 +1,131 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_header.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_header.c File Reference</h1><code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <stdarg.h></code><br> +<code>#include <string.h></code><br> +<code>#include <ctype.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimeheader * </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__header_8c.html#2f2c5f2f640111caf3096ed46b5986a4">mm_mimeheader_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__header_8c.html#61e3e62728f720ac381196ec59303064">mm_mimeheader_free</a> (struct mm_mimeheader *header)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimeheader * </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__header_8c.html#07a7f7dcebc91aa86f5478e1d84341a1">mm_mimeheader_generate</a> (const char *name, const char *value)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="26657e44385646fde63712d7110492d7"></a><!-- doxytag: member="mm_header.c::mm_mimeheader_uncomment" ref="26657e44385646fde63712d7110492d7" args="(struct mm_mimeheader *header)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_mimeheader_uncomment</b> (struct mm_mimeheader *header)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2081ee4c43e88d5a318a783069a5d471"></a><!-- doxytag: member="mm_header.c::mm_mimeheader_uncommentbyname" ref="2081ee4c43e88d5a318a783069a5d471" args="(struct mm_mimepart *part, const char *name)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_mimeheader_uncommentbyname</b> (struct mm_mimepart *part, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f9bcb0fb26461bd349c15366748ecb7"></a><!-- doxytag: member="mm_header.c::mm_mimeheader_uncommentall" ref="9f9bcb0fb26461bd349c15366748ecb7" args="(struct mm_mimepart *part)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_mimeheader_uncommentall</b> (struct mm_mimepart *part)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains functions for manipulating MIME headers <hr><h2>Function Documentation</h2> +<a class="anchor" name="61e3e62728f720ac381196ec59303064"></a><!-- doxytag: member="mm_header.c::mm_mimeheader_free" ref="61e3e62728f720ac381196ec59303064" args="(struct mm_mimeheader *header)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void mm_mimeheader_free </td> + <td>(</td> + <td class="paramtype">struct mm_mimeheader * </td> + <td class="paramname"> <em>header</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Frees a MIME header object<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>header</em> </td><td>The MIME header object which to free </td></tr> + </table> +</dl> + +</div> +</div><p> +<a class="anchor" name="07a7f7dcebc91aa86f5478e1d84341a1"></a><!-- doxytag: member="mm_header.c::mm_mimeheader_generate" ref="07a7f7dcebc91aa86f5478e1d84341a1" args="(const char *name, const char *value)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimeheader* mm_mimeheader_generate </td> + <td>(</td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>name</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>value</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a new MIME header, but does no checks whatsoever (create as-is) +</div> +</div><p> +<a class="anchor" name="2f2c5f2f640111caf3096ed46b5986a4"></a><!-- doxytag: member="mm_header.c::mm_mimeheader_new" ref="2f2c5f2f640111caf3096ed46b5986a4" args="(void)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">struct mm_mimeheader* mm_mimeheader_new </td> + <td>(</td> + <td class="paramtype">void </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Creates a new MIME header object<p> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A new and initialized MIME header object </dd></dl> +<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="mm__header_8c.html#61e3e62728f720ac381196ec59303064">mm_mimeheader_free</a></dd></dl> +This function creates and initializes a new MIME header object, which must later be freed using <a class="el" href="mm__header_8c.html#61e3e62728f720ac381196ec59303064">mm_mimeheader_free()</a> +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__internal_8h-source.html b/main/minimime/mm-docs/html/mm__internal_8h-source.html new file mode 100644 index 0000000000..1f92a3e94f --- /dev/null +++ b/main/minimime/mm-docs/html/mm__internal_8h-source.html @@ -0,0 +1,82 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_internal.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_internal.h</h1><a href="mm__internal_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> +<a name="l00002"></a>00002 <span class="comment"> * $Id$</span> +<a name="l00003"></a>00003 <span class="comment"> *</span> +<a name="l00004"></a>00004 <span class="comment"> * MiniMIME - a library for handling MIME messages</span> +<a name="l00005"></a>00005 <span class="comment"> *</span> +<a name="l00006"></a>00006 <span class="comment"> * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net></span> +<a name="l00007"></a>00007 <span class="comment"> * All rights reserved.</span> +<a name="l00008"></a>00008 <span class="comment"> *</span> +<a name="l00009"></a>00009 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span> +<a name="l00010"></a>00010 <span class="comment"> * modification, are permitted provided that the following conditions</span> +<a name="l00011"></a>00011 <span class="comment"> * are met:</span> +<a name="l00012"></a>00012 <span class="comment"> *</span> +<a name="l00013"></a>00013 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span> +<a name="l00014"></a>00014 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span> +<a name="l00015"></a>00015 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span> +<a name="l00016"></a>00016 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span> +<a name="l00017"></a>00017 <span class="comment"> * documentation and/or other materials provided with the distribution.</span> +<a name="l00018"></a>00018 <span class="comment"> * 3. Neither the name of the author nor the names of the contributors</span> +<a name="l00019"></a>00019 <span class="comment"> * may be used to endorse or promote products derived from this software</span> +<a name="l00020"></a>00020 <span class="comment"> * without specific prior written permission.</span> +<a name="l00021"></a>00021 <span class="comment"> *</span> +<a name="l00022"></a>00022 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND</span> +<a name="l00023"></a>00023 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span> +<a name="l00024"></a>00024 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span> +<a name="l00025"></a>00025 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD</span> +<a name="l00026"></a>00026 <span class="comment"> * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span> +<a name="l00027"></a>00027 <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span> +<a name="l00028"></a>00028 <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span> +<a name="l00029"></a>00029 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span> +<a name="l00030"></a>00030 <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span> +<a name="l00031"></a>00031 <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF</span> +<a name="l00032"></a>00032 <span class="comment"> * THE POSSIBILITY OF SUCH DAMAGE.</span> +<a name="l00033"></a>00033 <span class="comment"> */</span> +<a name="l00034"></a>00034 +<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _MM_INTERNAL_H_INCLUDED</span> +<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _MM_INTERNAL_H_INCLUDED</span> +<a name="l00040"></a>00040 <span class="preprocessor"></span> +<a name="l00041"></a>00041 <span class="preprocessor">#include "mm.h"</span> +<a name="l00042"></a>00042 +<a name="l00043"></a>00043 <span class="preprocessor">#define debugp(m, ...) do { \</span> +<a name="l00044"></a>00044 <span class="preprocessor"> fprintf(stderr, "%s:%d:: ", __FILE__, __LINE__); \</span> +<a name="l00045"></a>00045 <span class="preprocessor"> fprintf(stderr, m, ## __VA_ARGS__); \</span> +<a name="l00046"></a>00046 <span class="preprocessor"> fprintf(stderr, "\n"); \</span> +<a name="l00047"></a>00047 <span class="preprocessor"> fflush(stderr); \</span> +<a name="l00048"></a>00048 <span class="preprocessor">} while (0); </span> +<a name="l00049"></a>00049 <span class="preprocessor"></span> +<a name="l00054"></a>00054 <span class="preprocessor">#ifndef __HAVE_LEAK_DETECTION</span> +<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="keywordtype">void</span> *<a class="code" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">xmalloc</a>(size_t); +<a name="l00056"></a>00056 <span class="keywordtype">void</span> *<a class="code" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">xrealloc</a>(<span class="keywordtype">void</span> *, size_t); +<a name="l00057"></a>00057 <span class="keywordtype">void</span> xfree(<span class="keywordtype">void</span> *); +<a name="l00058"></a>00058 <span class="keywordtype">char</span> *xstrdup(<span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00059"></a>00059 <span class="preprocessor">#endif</span> +<a name="l00060"></a>00060 <span class="preprocessor"></span> +<a name="l00061"></a>00061 <span class="keywordtype">char</span> *<a class="code" href="group__util.html#g3ae25483c8a42f6562f2a916a511228f">xstrsep</a>(<span class="keywordtype">char</span> **, <span class="keyword">const</span> <span class="keywordtype">char</span> *); +<a name="l00062"></a>00062 +<a name="l00063"></a>00063 <span class="comment">/* THIS FILE IS INTENTIONALLY LEFT BLANK */</span> +<a name="l00064"></a>00064 +<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* ! _MM_INTERNAL_H_INCLUDED */</span> +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__internal_8h.html b/main/minimime/mm-docs/html/mm__internal_8h.html new file mode 100644 index 0000000000..8afb665eca --- /dev/null +++ b/main/minimime/mm-docs/html/mm__internal_8h.html @@ -0,0 +1,78 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_internal.h File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_internal.h File Reference</h1><code>#include "mm.h"</code><br> + +<p> +<a href="mm__internal_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Defines</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>debugp</b>(m,...)</td></tr> + +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Utility functions</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">xmalloc</a> (size_t)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">xrealloc</a> (void *, size_t)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g35c4383ff0dee2de18985e6edfed1ae6"></a><!-- doxytag: member="mm_internal.h::xfree" ref="g35c4383ff0dee2de18985e6edfed1ae6" args="(void *)" --> +void </td><td class="memItemRight" valign="bottom"><b>xfree</b> (void *)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2961ae74e91b0b28acdf9822438a581c"></a><!-- doxytag: member="mm_internal.h::xstrdup" ref="g2961ae74e91b0b28acdf9822438a581c" args="(const char *)" --> +char * </td><td class="memItemRight" valign="bottom"><b>xstrdup</b> (const char *)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g3ae25483c8a42f6562f2a916a511228f">xstrsep</a> (char **, const char *)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +Data definitions for MiniMIME <hr><h2>Define Documentation</h2> +<a class="anchor" name="089dd7bda22f552c35ebdc06a8849c56"></a><!-- doxytag: member="mm_internal.h::debugp" ref="089dd7bda22f552c35ebdc06a8849c56" args="(m,...)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#define debugp </td> + <td>(</td> + <td class="paramtype">m, <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"> <em>...</em> </td> + <td class="paramname"> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \ + fprintf(stderr, <span class="stringliteral">"%s:%d:: "</span>, __FILE__, __LINE__); \ + fprintf(stderr, m, ## __VA_ARGS__); \ + fprintf(stderr, <span class="stringliteral">"\n"</span>); \ + fflush(stderr); \ +} <span class="keywordflow">while</span> (0); +</pre></div> +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__mem_8h-source.html b/main/minimime/mm-docs/html/mm__mem_8h-source.html new file mode 100644 index 0000000000..69ddd73dc5 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__mem_8h-source.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_mem.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_mem.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef __MEM_H</span> +<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define __MEM_H</span> +<a name="l00003"></a>00003 <span class="preprocessor"></span> +<a name="l00004"></a>00004 <span class="preprocessor">#ifdef __HAVE_LEAK_DETECTION</span> +<a name="l00005"></a>00005 <span class="preprocessor"></span> +<a name="l00006"></a>00006 <span class="preprocessor">#define NAMEOF(v) #v</span> +<a name="l00007"></a>00007 <span class="preprocessor"></span><span class="preprocessor">#define xmalloc(x) MM_malloc(x, __FILE__, __LINE__)</span> +<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define xfree(x) MM_free(x, __FILE__, __LINE__, NAMEOF(x))</span> +<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define xstrdup(x) MM_strdup(x, __FILE__, __LINE__)</span> +<a name="l00010"></a>00010 <span class="preprocessor"></span><span class="preprocessor">#define xrealloc(x, y) MM_realloc(x, y, __FILE__, __LINE__)</span> +<a name="l00011"></a>00011 <span class="preprocessor"></span> +<a name="l00012"></a>00012 TAILQ_HEAD(MM_chunks, MM_mem_chunk); +<a name="l00013"></a>00013 +<a name="l00014"></a>00014 <span class="keyword">struct </span>MM_mem_chunk { +<a name="l00015"></a>00015 <span class="keywordtype">void</span> *address; +<a name="l00016"></a>00016 <span class="keyword">const</span> <span class="keywordtype">char</span> *filename; +<a name="l00017"></a>00017 u_int32_t line; +<a name="l00018"></a>00018 size_t size; +<a name="l00019"></a>00019 +<a name="l00020"></a>00020 TAILQ_ENTRY(MM_mem_chunk) next; +<a name="l00021"></a>00021 }; +<a name="l00022"></a>00022 +<a name="l00023"></a>00023 <span class="keywordtype">void</span> *MM_malloc(size_t, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00024"></a>00024 <span class="keywordtype">void</span> *MM_realloc(<span class="keywordtype">void</span> *, size_t, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00025"></a>00025 <span class="keywordtype">void</span> MM_free(<span class="keywordtype">void</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">char</span> *); +<a name="l00026"></a>00026 <span class="keywordtype">char</span> *MM_strdup(const <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>); +<a name="l00027"></a>00027 <span class="keywordtype">void</span> MM_leakd_init(<span class="keywordtype">void</span>); +<a name="l00028"></a>00028 <span class="keywordtype">void</span> MM_leakd_printallocated(<span class="keywordtype">void</span>); +<a name="l00029"></a>00029 <span class="keywordtype">void</span> MM_leakd_flush(<span class="keywordtype">void</span>); +<a name="l00030"></a>00030 +<a name="l00031"></a>00031 <span class="preprocessor">#endif </span><span class="comment">/* __HAVE_LEAK_DETECTION */</span> +<a name="l00032"></a>00032 <span class="preprocessor">#endif </span><span class="comment">/* ! HAVE_MEM_H */</span> +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__mimepart_8c.html b/main/minimime/mm-docs/html/mm__mimepart_8c.html new file mode 100644 index 0000000000..210dd8dc98 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__mimepart_8c.html @@ -0,0 +1,79 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_mimepart.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_mimepart.c File Reference</h1><code>#include <sys/types.h></code><br> +<code>#include <sys/stat.h></code><br> +<code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <string.h></code><br> +<code>#include <unistd.h></code><br> +<code>#include <fcntl.h></code><br> +<code>#include <ctype.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Creating and destroying MIME parts</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimepart * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g417e5dd361e30cddb91e1d9a5e30b223">mm_mimepart_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimepart * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#ged8112012a337371ae8093adb1ab6d27">mm_mimepart_fromfile</a> (const char *filename)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gbf47790a0bb96b22bc5e236bc40cb32e">mm_mimepart_free</a> (struct mm_mimepart *part)</td></tr> + +<tr><td colspan="2"><div class="groupHeader">Accessing the MIME part's mail header</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g46a674ff6b9873c0c45fa4eb5d94fd62">mm_mimepart_attachheader</a> (struct mm_mimepart *part, struct mm_mimeheader *header)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g44c78abfb0535312bcb427a2cd220026">mm_mimepart_countheaders</a> (struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gf89da502ac54306994bdb452448a8026">mm_mimepart_countheaderbyname</a> (struct mm_mimepart *part, const char *name)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimeheader * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#ga3ca298eaa82f4ef3ea731511ac84e53">mm_mimepart_getheaderbyname</a> (struct mm_mimepart *part, const char *name, int idx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g779f11f7a6a54f83763b5ef6ff87e48f">mm_mimepart_getheadervalue</a> (struct mm_mimepart *part, const char *name, int idx)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g4440bdcfddf88eb642b6a834a0557176">mm_mimepart_headers_start</a> (struct mm_mimepart *part, struct mm_mimeheader **id)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_mimeheader * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g8e9064736efdeebf4b257cc45f8a6adf">mm_mimepart_headers_next</a> (struct mm_mimepart *part, struct mm_mimeheader **id)</td></tr> + +<tr><td colspan="2"><div class="groupHeader">Accessing and manipulating the MIME part's body</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g52dc9f27a2801e4f6abb1effd2ed838d">mm_mimepart_getbody</a> (struct mm_mimepart *part, int opaque)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gd1def098c00edc546b03e98e9ff8b27a">mm_mimepart_setbody</a> (struct mm_mimepart *part, const char *data, int opaque)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gf8ccae1737dc4b9b91958fe448da677f">mm_mimepart_getlength</a> (struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g4551bf4460e5d165bbcd9f32d4f625de">mm_mimepart_decode</a> (struct mm_mimepart *part)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#gf19d3ace5ae174b3eaa35f9ddbe6e216">mm_mimepart_flatten</a> (struct mm_mimepart *part, char **result, size_t *length, int opaque)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g164bb39a266559574c252f11266809ff">mm_mimepart_setdefaultcontenttype</a> (struct mm_mimepart *part, int composite)</td></tr> + +<tr><td colspan="2"><div class="groupHeader">Accessing the MIME part's Content-Type information</div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g01822bc93b4741af75b5379384354e37">mm_mimepart_attachcontenttype</a> (struct mm_mimepart *part, struct mm_content *ct)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_content * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mimepart.html#g210e2ceee56f8349f6778006da87d080">mm_mimepart_gettype</a> (struct mm_mimepart *part)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains functions for manipulating MIME header objects. <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__mimeutil_8c.html b/main/minimime/mm-docs/html/mm__mimeutil_8c.html new file mode 100644 index 0000000000..7823572d79 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__mimeutil_8c.html @@ -0,0 +1,76 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_mimeutil.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_mimeutil.c File Reference</h1><code>#include <sys/time.h></code><br> +<code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <string.h></code><br> +<code>#include <time.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Defines</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="257774e1a30f8190b3d99891be64210a"></a><!-- doxytag: member="mm_mimeutil.c::MM_DATE_LENGTH" ref="257774e1a30f8190b3d99891be64210a" args="" --> +#define </td><td class="memItemRight" valign="bottom"><b>MM_DATE_LENGTH</b> 50</td></tr> + +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__mimeutil_8c.html#a7b7f63b42dfa7a7f907b615aa4cd057">mm_mimeutil_gendate</a> (char **result)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a72e503ba7ce2552456c6bd5935febe9"></a><!-- doxytag: member="mm_mimeutil.c::mm_mimeutil_genboundary" ref="a72e503ba7ce2552456c6bd5935febe9" args="(char *prefix, size_t length, char **result)" --> +int </td><td class="memItemRight" valign="bottom"><b>mm_mimeutil_genboundary</b> (char *prefix, size_t length, char **result)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains various MIME related utility functions. <hr><h2>Function Documentation</h2> +<a class="anchor" name="a7b7f63b42dfa7a7f907b615aa4cd057"></a><!-- doxytag: member="mm_mimeutil.c::mm_mimeutil_gendate" ref="a7b7f63b42dfa7a7f907b615aa4cd057" args="(char **result)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_mimeutil_gendate </td> + <td>(</td> + <td class="paramtype">char ** </td> + <td class="paramname"> <em>result</em> </td> + <td> ) </td> + <td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Generates an RFC 2822 conform date string<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>timezone</em> </td><td>Whether to include timezone information </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to the actual date string </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>The pointer returned must be freed some time</dd></dl> +This function generates an RFC 2822 conform date string to use in message headers. It allocates memory to hold the string and returns a pointer to it. The generated date is in the format (example):<p> +Thu, 25 December 2003 16:35:22 +0100 (CET)<p> +This function dynamically allocates memory and returns a pointer to it. This memory should be released with free() once not needed anymore. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__param_8c.html b/main/minimime/mm-docs/html/mm__param_8c.html new file mode 100644 index 0000000000..149cf2140c --- /dev/null +++ b/main/minimime/mm-docs/html/mm__param_8c.html @@ -0,0 +1,57 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_param.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_param.c File Reference</h1><code>#include <sys/types.h></code><br> +<code>#include <sys/stat.h></code><br> +<code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <unistd.h></code><br> +<code>#include <fcntl.h></code><br> +<code>#include <string.h></code><br> +<code>#include <ctype.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Functions for manipulating MIME parameters</div></td></tr> +<tr><td colspan="2"><div class="groupText">MIME parameters are properties attached to certain MIME headers, such as Content-Type and Content-Disposition. MIME parameters have a textual representations as in <em>name=value</em>. They contain important information about the MIME structure of a message, such as the boundary string used, which charset was used to encode the message and so on. This module provides simple to use functions to query or set MIME parameters.<p> +Each MIME header may hold an arbitrary amount of such parameters, which are delimeted by each other with a semicolon. <br><br></div></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_param * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#gd3ac756551bf5a29a07d5992bfdbde09">mm_param_new</a> (void)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g46339038e995799e6a3e37512f442fc9">mm_param_free</a> (struct mm_param *param)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">mm_param * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#gd3970def45b8bede334f4b89a41dec15">mm_param_generate</a> (const char *name, const char *value)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g2a266c63c7e89cf829b2af8e995e55e8">mm_param_setname</a> (struct mm_param *param, const char *name, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#gca3e636ab5700462eb32ca5bc19e4cc6">mm_param_setvalue</a> (struct mm_param *param, const char *value, int copy)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g0e0ddccf47a2b1e0ad5bcc52c7b39753">mm_param_getname</a> (struct mm_param *param)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__param.html#g3c6f8cddd409de3000c31584e140561e">mm_param_getvalue</a> (struct mm_param *param)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +Functions to manipulate MIME parameters <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__parse_8c.html b/main/minimime/mm-docs/html/mm__parse_8c.html new file mode 100644 index 0000000000..8ce1502722 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__parse_8c.html @@ -0,0 +1,198 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_parse.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_parse.c File Reference</h1><code>#include <sys/types.h></code><br> +<code>#include <sys/stat.h></code><br> +<code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <unistd.h></code><br> +<code>#include <fcntl.h></code><br> +<code>#include <string.h></code><br> +<code>#include <ctype.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<code>#include "mm_util.h"</code><br> +<code>#include "mimeparser.h"</code><br> +<code>#include "mimeparser.tab.h"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__parse_8c.html#187cf71c0f6c2da1384823e3f20aa1a2">PARSER_initialize</a> (MM_CTX *, int)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="92d7d8e20b6def16fcf2649e0d88651f"></a><!-- doxytag: member="mm_parse.c::PARSER_setbuffer" ref="92d7d8e20b6def16fcf2649e0d88651f" args="(const char *)" --> +void </td><td class="memItemRight" valign="bottom"><b>PARSER_setbuffer</b> (const char *)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="04446354e4248226578b90007d728a7b"></a><!-- doxytag: member="mm_parse.c::PARSER_setfp" ref="04446354e4248226578b90007d728a7b" args="(FILE *)" --> +void </td><td class="memItemRight" valign="bottom"><b>PARSER_setfp</b> (FILE *)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__parse_8c.html#58c960b6017f13d4e4ec5f09b3c38495">mm_parse_mem</a> (MM_CTX *ctx, const char *text, int parsemode, int flags)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mm__parse_8c.html#cc9f623682b05f330c46e72e4e9d66cc">mm_parse_file</a> (MM_CTX *ctx, const char *filename, int parsemode, int flags)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +Functions to parse MIME messages <hr><h2>Function Documentation</h2> +<a class="anchor" name="cc9f623682b05f330c46e72e4e9d66cc"></a><!-- doxytag: member="mm_parse.c::mm_parse_file" ref="cc9f623682b05f330c46e72e4e9d66cc" args="(MM_CTX *ctx, const char *filename, int parsemode, int flags)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_parse_file </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>filename</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>parsemode</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>flags</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Parses a file into a MiniMIME context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>The name of the file to parse </td></tr> + <tr><td valign="top"></td><td valign="top"><em>parsemode</em> </td><td>The parsemode </td></tr> + <tr><td valign="top"></td><td valign="top"><em>flags</em> </td><td>The flags to pass to the parser </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno if an error occurs</dd></dl> +This function parses a MIME message, stored in the filesystem according to the parseflags and stores the results in the MiniMIME context specified by ctx.<p> +The following modes can be used to specify how the message should be parsed:<p> +<ul> +<li>MM_PARSE_STRICT: Do not tolerate MIME violations</li><li>MM_PARSE_LOOSE: Tolerate as much MIME violations as possible</li></ul> +<p> +The context needs to be initialized before using <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new()</a> and may be freed using <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free()</a>. +</div> +</div><p> +<a class="anchor" name="58c960b6017f13d4e4ec5f09b3c38495"></a><!-- doxytag: member="mm_parse.c::mm_parse_mem" ref="58c960b6017f13d4e4ec5f09b3c38495" args="(MM_CTX *ctx, const char *text, int parsemode, int flags)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">int mm_parse_mem </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>ctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">const char * </td> + <td class="paramname"> <em>text</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>parsemode</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>flags</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Parses a NUL-terminated string into a MiniMIME context<p> +<dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign="top"></td><td valign="top"><em>ctx</em> </td><td>A valid MiniMIME context object </td></tr> + <tr><td valign="top"></td><td valign="top"><em>text</em> </td><td>The NUL-terminated string to parse </td></tr> + <tr><td valign="top"></td><td valign="top"><em>parsemode</em> </td><td>The parsemode </td></tr> + <tr><td valign="top"></td><td valign="top"><em>flags</em> </td><td>The flags to pass to the parser </td></tr> + </table> +</dl> +<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure </dd></dl> +<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno if an error occurs</dd></dl> +This function parses a MIME message, stored in the memory region pointed to by text (must be NUL-terminated) according to the parseflags and stores the results in the MiniMIME context specified by ctx.<p> +The following modes can be used to specify how the message should be parsed:<p> +<ul> +<li>MM_PARSE_STRICT: Do not tolerate MIME violations</li><li>MM_PARSE_LOOSE: Tolerate as much MIME violations as possible</li></ul> +<p> +The context needs to be initialized before using <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new()</a> and may be freed using <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free()</a>. +</div> +</div><p> +<a class="anchor" name="187cf71c0f6c2da1384823e3f20aa1a2"></a><!-- doxytag: member="mm_parse.c::PARSER_initialize" ref="187cf71c0f6c2da1384823e3f20aa1a2" args="(MM_CTX *, int)" --> +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">void PARSER_initialize </td> + <td>(</td> + <td class="paramtype">MM_CTX * </td> + <td class="paramname"> <em>newctx</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"> <em>mode</em></td><td> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td><td width="100%"></td> + </tr> + </table> +</div> +<div class="memdoc"> + +<p> +Initializes the parser engine. +</div> +</div><p> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__queue_8h-source.html b/main/minimime/mm-docs/html/mm__queue_8h-source.html new file mode 100644 index 0000000000..2501344613 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__queue_8h-source.html @@ -0,0 +1,532 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_queue.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_queue.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $OpenBSD: queue.h,v 1.25 2004/04/08 16:08:21 henning Exp $ */</span> +<a name="l00002"></a>00002 <span class="comment">/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */</span> +<a name="l00003"></a>00003 +<a name="l00004"></a>00004 <span class="comment">/*</span> +<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) 1991, 1993</span> +<a name="l00006"></a>00006 <span class="comment"> * The Regents of the University of California. All rights reserved.</span> +<a name="l00007"></a>00007 <span class="comment"> *</span> +<a name="l00008"></a>00008 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span> +<a name="l00009"></a>00009 <span class="comment"> * modification, are permitted provided that the following conditions</span> +<a name="l00010"></a>00010 <span class="comment"> * are met:</span> +<a name="l00011"></a>00011 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span> +<a name="l00012"></a>00012 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span> +<a name="l00013"></a>00013 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span> +<a name="l00014"></a>00014 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span> +<a name="l00015"></a>00015 <span class="comment"> * documentation and/or other materials provided with the distribution.</span> +<a name="l00016"></a>00016 <span class="comment"> * 3. Neither the name of the University nor the names of its contributors</span> +<a name="l00017"></a>00017 <span class="comment"> * may be used to endorse or promote products derived from this software</span> +<a name="l00018"></a>00018 <span class="comment"> * without specific prior written permission.</span> +<a name="l00019"></a>00019 <span class="comment"> *</span> +<a name="l00020"></a>00020 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND</span> +<a name="l00021"></a>00021 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span> +<a name="l00022"></a>00022 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span> +<a name="l00023"></a>00023 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE</span> +<a name="l00024"></a>00024 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span> +<a name="l00025"></a>00025 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span> +<a name="l00026"></a>00026 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span> +<a name="l00027"></a>00027 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span> +<a name="l00028"></a>00028 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span> +<a name="l00029"></a>00029 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span> +<a name="l00030"></a>00030 <span class="comment"> * SUCH DAMAGE.</span> +<a name="l00031"></a>00031 <span class="comment"> *</span> +<a name="l00032"></a>00032 <span class="comment"> * @(#)queue.h 8.5 (Berkeley) 8/20/94</span> +<a name="l00033"></a>00033 <span class="comment"> */</span> +<a name="l00034"></a>00034 +<a name="l00035"></a>00035 <span class="preprocessor">#ifndef _SYS_QUEUE_H_</span> +<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define _SYS_QUEUE_H_</span> +<a name="l00037"></a>00037 <span class="preprocessor"></span> +<a name="l00038"></a>00038 <span class="comment">/*</span> +<a name="l00039"></a>00039 <span class="comment"> * This file defines five types of data structures: singly-linked lists, </span> +<a name="l00040"></a>00040 <span class="comment"> * lists, simple queues, tail queues, and circular queues.</span> +<a name="l00041"></a>00041 <span class="comment"> *</span> +<a name="l00042"></a>00042 <span class="comment"> *</span> +<a name="l00043"></a>00043 <span class="comment"> * A singly-linked list is headed by a single forward pointer. The elements</span> +<a name="l00044"></a>00044 <span class="comment"> * are singly linked for minimum space and pointer manipulation overhead at</span> +<a name="l00045"></a>00045 <span class="comment"> * the expense of O(n) removal for arbitrary elements. New elements can be</span> +<a name="l00046"></a>00046 <span class="comment"> * added to the list after an existing element or at the head of the list.</span> +<a name="l00047"></a>00047 <span class="comment"> * Elements being removed from the head of the list should use the explicit</span> +<a name="l00048"></a>00048 <span class="comment"> * macro for this purpose for optimum efficiency. A singly-linked list may</span> +<a name="l00049"></a>00049 <span class="comment"> * only be traversed in the forward direction. Singly-linked lists are ideal</span> +<a name="l00050"></a>00050 <span class="comment"> * for applications with large datasets and few or no removals or for</span> +<a name="l00051"></a>00051 <span class="comment"> * implementing a LIFO queue.</span> +<a name="l00052"></a>00052 <span class="comment"> *</span> +<a name="l00053"></a>00053 <span class="comment"> * A list is headed by a single forward pointer (or an array of forward</span> +<a name="l00054"></a>00054 <span class="comment"> * pointers for a hash table header). The elements are doubly linked</span> +<a name="l00055"></a>00055 <span class="comment"> * so that an arbitrary element can be removed without a need to</span> +<a name="l00056"></a>00056 <span class="comment"> * traverse the list. New elements can be added to the list before</span> +<a name="l00057"></a>00057 <span class="comment"> * or after an existing element or at the head of the list. A list</span> +<a name="l00058"></a>00058 <span class="comment"> * may only be traversed in the forward direction.</span> +<a name="l00059"></a>00059 <span class="comment"> *</span> +<a name="l00060"></a>00060 <span class="comment"> * A simple queue is headed by a pair of pointers, one the head of the</span> +<a name="l00061"></a>00061 <span class="comment"> * list and the other to the tail of the list. The elements are singly</span> +<a name="l00062"></a>00062 <span class="comment"> * linked to save space, so elements can only be removed from the</span> +<a name="l00063"></a>00063 <span class="comment"> * head of the list. New elements can be added to the list before or after</span> +<a name="l00064"></a>00064 <span class="comment"> * an existing element, at the head of the list, or at the end of the</span> +<a name="l00065"></a>00065 <span class="comment"> * list. A simple queue may only be traversed in the forward direction.</span> +<a name="l00066"></a>00066 <span class="comment"> *</span> +<a name="l00067"></a>00067 <span class="comment"> * A tail queue is headed by a pair of pointers, one to the head of the</span> +<a name="l00068"></a>00068 <span class="comment"> * list and the other to the tail of the list. The elements are doubly</span> +<a name="l00069"></a>00069 <span class="comment"> * linked so that an arbitrary element can be removed without a need to</span> +<a name="l00070"></a>00070 <span class="comment"> * traverse the list. New elements can be added to the list before or</span> +<a name="l00071"></a>00071 <span class="comment"> * after an existing element, at the head of the list, or at the end of</span> +<a name="l00072"></a>00072 <span class="comment"> * the list. A tail queue may be traversed in either direction.</span> +<a name="l00073"></a>00073 <span class="comment"> *</span> +<a name="l00074"></a>00074 <span class="comment"> * A circle queue is headed by a pair of pointers, one to the head of the</span> +<a name="l00075"></a>00075 <span class="comment"> * list and the other to the tail of the list. The elements are doubly</span> +<a name="l00076"></a>00076 <span class="comment"> * linked so that an arbitrary element can be removed without a need to</span> +<a name="l00077"></a>00077 <span class="comment"> * traverse the list. New elements can be added to the list before or after</span> +<a name="l00078"></a>00078 <span class="comment"> * an existing element, at the head of the list, or at the end of the list.</span> +<a name="l00079"></a>00079 <span class="comment"> * A circle queue may be traversed in either direction, but has a more</span> +<a name="l00080"></a>00080 <span class="comment"> * complex end of list detection.</span> +<a name="l00081"></a>00081 <span class="comment"> *</span> +<a name="l00082"></a>00082 <span class="comment"> * For details on the use of these macros, see the queue(3) manual page.</span> +<a name="l00083"></a>00083 <span class="comment"> */</span> +<a name="l00084"></a>00084 +<a name="l00085"></a>00085 <span class="comment">/*</span> +<a name="l00086"></a>00086 <span class="comment"> * Singly-linked List definitions.</span> +<a name="l00087"></a>00087 <span class="comment"> */</span> +<a name="l00088"></a>00088 <span class="preprocessor">#define SLIST_HEAD(name, type) \</span> +<a name="l00089"></a>00089 <span class="preprocessor">struct name { \</span> +<a name="l00090"></a>00090 <span class="preprocessor"> struct type *slh_first; </span><span class="comment">/* first element */</span> \ +<a name="l00091"></a>00091 } +<a name="l00092"></a>00092 +<a name="l00093"></a>00093 <span class="preprocessor">#define SLIST_HEAD_INITIALIZER(head) \</span> +<a name="l00094"></a>00094 <span class="preprocessor"> { NULL }</span> +<a name="l00095"></a>00095 <span class="preprocessor"></span> +<a name="l00096"></a>00096 <span class="preprocessor">#define SLIST_ENTRY(type) \</span> +<a name="l00097"></a>00097 <span class="preprocessor">struct { \</span> +<a name="l00098"></a>00098 <span class="preprocessor"> struct type *sle_next; </span><span class="comment">/* next element */</span> \ +<a name="l00099"></a>00099 } +<a name="l00100"></a>00100 +<a name="l00101"></a>00101 <span class="comment">/*</span> +<a name="l00102"></a>00102 <span class="comment"> * Singly-linked List access methods.</span> +<a name="l00103"></a>00103 <span class="comment"> */</span> +<a name="l00104"></a>00104 <span class="preprocessor">#define SLIST_FIRST(head) ((head)->slh_first)</span> +<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define SLIST_END(head) NULL</span> +<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))</span> +<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)</span> +<a name="l00108"></a>00108 <span class="preprocessor"></span> +<a name="l00109"></a>00109 <span class="preprocessor">#define SLIST_FOREACH(var, head, field) \</span> +<a name="l00110"></a>00110 <span class="preprocessor"> for((var) = SLIST_FIRST(head); \</span> +<a name="l00111"></a>00111 <span class="preprocessor"> (var) != SLIST_END(head); \</span> +<a name="l00112"></a>00112 <span class="preprocessor"> (var) = SLIST_NEXT(var, field))</span> +<a name="l00113"></a>00113 <span class="preprocessor"></span> +<a name="l00114"></a>00114 <span class="preprocessor">#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \</span> +<a name="l00115"></a>00115 <span class="preprocessor"> for ((varp) = &SLIST_FIRST((head)); \</span> +<a name="l00116"></a>00116 <span class="preprocessor"> ((var) = *(varp)) != SLIST_END(head); \</span> +<a name="l00117"></a>00117 <span class="preprocessor"> (varp) = &SLIST_NEXT((var), field))</span> +<a name="l00118"></a>00118 <span class="preprocessor"></span> +<a name="l00119"></a>00119 <span class="comment">/*</span> +<a name="l00120"></a>00120 <span class="comment"> * Singly-linked List functions.</span> +<a name="l00121"></a>00121 <span class="comment"> */</span> +<a name="l00122"></a>00122 <span class="preprocessor">#define SLIST_INIT(head) { \</span> +<a name="l00123"></a>00123 <span class="preprocessor"> SLIST_FIRST(head) = SLIST_END(head); \</span> +<a name="l00124"></a>00124 <span class="preprocessor">}</span> +<a name="l00125"></a>00125 <span class="preprocessor"></span> +<a name="l00126"></a>00126 <span class="preprocessor">#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \</span> +<a name="l00127"></a>00127 <span class="preprocessor"> (elm)->field.sle_next = (slistelm)->field.sle_next; \</span> +<a name="l00128"></a>00128 <span class="preprocessor"> (slistelm)->field.sle_next = (elm); \</span> +<a name="l00129"></a>00129 <span class="preprocessor">} while (0)</span> +<a name="l00130"></a>00130 <span class="preprocessor"></span> +<a name="l00131"></a>00131 <span class="preprocessor">#define SLIST_INSERT_HEAD(head, elm, field) do { \</span> +<a name="l00132"></a>00132 <span class="preprocessor"> (elm)->field.sle_next = (head)->slh_first; \</span> +<a name="l00133"></a>00133 <span class="preprocessor"> (head)->slh_first = (elm); \</span> +<a name="l00134"></a>00134 <span class="preprocessor">} while (0)</span> +<a name="l00135"></a>00135 <span class="preprocessor"></span> +<a name="l00136"></a>00136 <span class="preprocessor">#define SLIST_REMOVE_NEXT(head, elm, field) do { \</span> +<a name="l00137"></a>00137 <span class="preprocessor"> (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \</span> +<a name="l00138"></a>00138 <span class="preprocessor">} while (0)</span> +<a name="l00139"></a>00139 <span class="preprocessor"></span> +<a name="l00140"></a>00140 <span class="preprocessor">#define SLIST_REMOVE_HEAD(head, field) do { \</span> +<a name="l00141"></a>00141 <span class="preprocessor"> (head)->slh_first = (head)->slh_first->field.sle_next; \</span> +<a name="l00142"></a>00142 <span class="preprocessor">} while (0)</span> +<a name="l00143"></a>00143 <span class="preprocessor"></span> +<a name="l00144"></a>00144 <span class="preprocessor">#define SLIST_REMOVE(head, elm, type, field) do { \</span> +<a name="l00145"></a>00145 <span class="preprocessor"> if ((head)->slh_first == (elm)) { \</span> +<a name="l00146"></a>00146 <span class="preprocessor"> SLIST_REMOVE_HEAD((head), field); \</span> +<a name="l00147"></a>00147 <span class="preprocessor"> } \</span> +<a name="l00148"></a>00148 <span class="preprocessor"> else { \</span> +<a name="l00149"></a>00149 <span class="preprocessor"> struct type *curelm = (head)->slh_first; \</span> +<a name="l00150"></a>00150 <span class="preprocessor"> while( curelm->field.sle_next != (elm) ) \</span> +<a name="l00151"></a>00151 <span class="preprocessor"> curelm = curelm->field.sle_next; \</span> +<a name="l00152"></a>00152 <span class="preprocessor"> curelm->field.sle_next = \</span> +<a name="l00153"></a>00153 <span class="preprocessor"> curelm->field.sle_next->field.sle_next; \</span> +<a name="l00154"></a>00154 <span class="preprocessor"> } \</span> +<a name="l00155"></a>00155 <span class="preprocessor">} while (0)</span> +<a name="l00156"></a>00156 <span class="preprocessor"></span> +<a name="l00157"></a>00157 <span class="comment">/*</span> +<a name="l00158"></a>00158 <span class="comment"> * List definitions.</span> +<a name="l00159"></a>00159 <span class="comment"> */</span> +<a name="l00160"></a>00160 <span class="preprocessor">#define LIST_HEAD(name, type) \</span> +<a name="l00161"></a>00161 <span class="preprocessor">struct name { \</span> +<a name="l00162"></a>00162 <span class="preprocessor"> struct type *lh_first; </span><span class="comment">/* first element */</span> \ +<a name="l00163"></a>00163 } +<a name="l00164"></a>00164 +<a name="l00165"></a>00165 <span class="preprocessor">#define LIST_HEAD_INITIALIZER(head) \</span> +<a name="l00166"></a>00166 <span class="preprocessor"> { NULL }</span> +<a name="l00167"></a>00167 <span class="preprocessor"></span> +<a name="l00168"></a>00168 <span class="preprocessor">#define LIST_ENTRY(type) \</span> +<a name="l00169"></a>00169 <span class="preprocessor">struct { \</span> +<a name="l00170"></a>00170 <span class="preprocessor"> struct type *le_next; </span><span class="comment">/* next element */</span> \ +<a name="l00171"></a>00171 struct type **le_prev; <span class="comment">/* address of previous next element */</span> \ +<a name="l00172"></a>00172 } +<a name="l00173"></a>00173 +<a name="l00174"></a>00174 <span class="comment">/*</span> +<a name="l00175"></a>00175 <span class="comment"> * List access methods</span> +<a name="l00176"></a>00176 <span class="comment"> */</span> +<a name="l00177"></a>00177 <span class="preprocessor">#define LIST_FIRST(head) ((head)->lh_first)</span> +<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">#define LIST_END(head) NULL</span> +<a name="l00179"></a>00179 <span class="preprocessor"></span><span class="preprocessor">#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head))</span> +<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">#define LIST_NEXT(elm, field) ((elm)->field.le_next)</span> +<a name="l00181"></a>00181 <span class="preprocessor"></span> +<a name="l00182"></a>00182 <span class="preprocessor">#define LIST_FOREACH(var, head, field) \</span> +<a name="l00183"></a>00183 <span class="preprocessor"> for((var) = LIST_FIRST(head); \</span> +<a name="l00184"></a>00184 <span class="preprocessor"> (var)!= LIST_END(head); \</span> +<a name="l00185"></a>00185 <span class="preprocessor"> (var) = LIST_NEXT(var, field))</span> +<a name="l00186"></a>00186 <span class="preprocessor"></span> +<a name="l00187"></a>00187 <span class="comment">/*</span> +<a name="l00188"></a>00188 <span class="comment"> * List functions.</span> +<a name="l00189"></a>00189 <span class="comment"> */</span> +<a name="l00190"></a>00190 <span class="preprocessor">#define LIST_INIT(head) do { \</span> +<a name="l00191"></a>00191 <span class="preprocessor"> LIST_FIRST(head) = LIST_END(head); \</span> +<a name="l00192"></a>00192 <span class="preprocessor">} while (0)</span> +<a name="l00193"></a>00193 <span class="preprocessor"></span> +<a name="l00194"></a>00194 <span class="preprocessor">#define LIST_INSERT_AFTER(listelm, elm, field) do { \</span> +<a name="l00195"></a>00195 <span class="preprocessor"> if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \</span> +<a name="l00196"></a>00196 <span class="preprocessor"> (listelm)->field.le_next->field.le_prev = \</span> +<a name="l00197"></a>00197 <span class="preprocessor"> &(elm)->field.le_next; \</span> +<a name="l00198"></a>00198 <span class="preprocessor"> (listelm)->field.le_next = (elm); \</span> +<a name="l00199"></a>00199 <span class="preprocessor"> (elm)->field.le_prev = &(listelm)->field.le_next; \</span> +<a name="l00200"></a>00200 <span class="preprocessor">} while (0)</span> +<a name="l00201"></a>00201 <span class="preprocessor"></span> +<a name="l00202"></a>00202 <span class="preprocessor">#define LIST_INSERT_BEFORE(listelm, elm, field) do { \</span> +<a name="l00203"></a>00203 <span class="preprocessor"> (elm)->field.le_prev = (listelm)->field.le_prev; \</span> +<a name="l00204"></a>00204 <span class="preprocessor"> (elm)->field.le_next = (listelm); \</span> +<a name="l00205"></a>00205 <span class="preprocessor"> *(listelm)->field.le_prev = (elm); \</span> +<a name="l00206"></a>00206 <span class="preprocessor"> (listelm)->field.le_prev = &(elm)->field.le_next; \</span> +<a name="l00207"></a>00207 <span class="preprocessor">} while (0)</span> +<a name="l00208"></a>00208 <span class="preprocessor"></span> +<a name="l00209"></a>00209 <span class="preprocessor">#define LIST_INSERT_HEAD(head, elm, field) do { \</span> +<a name="l00210"></a>00210 <span class="preprocessor"> if (((elm)->field.le_next = (head)->lh_first) != NULL) \</span> +<a name="l00211"></a>00211 <span class="preprocessor"> (head)->lh_first->field.le_prev = &(elm)->field.le_next;\</span> +<a name="l00212"></a>00212 <span class="preprocessor"> (head)->lh_first = (elm); \</span> +<a name="l00213"></a>00213 <span class="preprocessor"> (elm)->field.le_prev = &(head)->lh_first; \</span> +<a name="l00214"></a>00214 <span class="preprocessor">} while (0)</span> +<a name="l00215"></a>00215 <span class="preprocessor"></span> +<a name="l00216"></a>00216 <span class="preprocessor">#define LIST_REMOVE(elm, field) do { \</span> +<a name="l00217"></a>00217 <span class="preprocessor"> if ((elm)->field.le_next != NULL) \</span> +<a name="l00218"></a>00218 <span class="preprocessor"> (elm)->field.le_next->field.le_prev = \</span> +<a name="l00219"></a>00219 <span class="preprocessor"> (elm)->field.le_prev; \</span> +<a name="l00220"></a>00220 <span class="preprocessor"> *(elm)->field.le_prev = (elm)->field.le_next; \</span> +<a name="l00221"></a>00221 <span class="preprocessor">} while (0)</span> +<a name="l00222"></a>00222 <span class="preprocessor"></span> +<a name="l00223"></a>00223 <span class="preprocessor">#define LIST_REPLACE(elm, elm2, field) do { \</span> +<a name="l00224"></a>00224 <span class="preprocessor"> if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \</span> +<a name="l00225"></a>00225 <span class="preprocessor"> (elm2)->field.le_next->field.le_prev = \</span> +<a name="l00226"></a>00226 <span class="preprocessor"> &(elm2)->field.le_next; \</span> +<a name="l00227"></a>00227 <span class="preprocessor"> (elm2)->field.le_prev = (elm)->field.le_prev; \</span> +<a name="l00228"></a>00228 <span class="preprocessor"> *(elm2)->field.le_prev = (elm2); \</span> +<a name="l00229"></a>00229 <span class="preprocessor">} while (0)</span> +<a name="l00230"></a>00230 <span class="preprocessor"></span> +<a name="l00231"></a>00231 <span class="comment">/*</span> +<a name="l00232"></a>00232 <span class="comment"> * Simple queue definitions.</span> +<a name="l00233"></a>00233 <span class="comment"> */</span> +<a name="l00234"></a>00234 <span class="preprocessor">#define SIMPLEQ_HEAD(name, type) \</span> +<a name="l00235"></a>00235 <span class="preprocessor">struct name { \</span> +<a name="l00236"></a>00236 <span class="preprocessor"> struct type *sqh_first; </span><span class="comment">/* first element */</span> \ +<a name="l00237"></a>00237 struct type **sqh_last; <span class="comment">/* addr of last next element */</span> \ +<a name="l00238"></a>00238 } +<a name="l00239"></a>00239 +<a name="l00240"></a>00240 <span class="preprocessor">#define SIMPLEQ_HEAD_INITIALIZER(head) \</span> +<a name="l00241"></a>00241 <span class="preprocessor"> { NULL, &(head).sqh_first }</span> +<a name="l00242"></a>00242 <span class="preprocessor"></span> +<a name="l00243"></a>00243 <span class="preprocessor">#define SIMPLEQ_ENTRY(type) \</span> +<a name="l00244"></a>00244 <span class="preprocessor">struct { \</span> +<a name="l00245"></a>00245 <span class="preprocessor"> struct type *sqe_next; </span><span class="comment">/* next element */</span> \ +<a name="l00246"></a>00246 } +<a name="l00247"></a>00247 +<a name="l00248"></a>00248 <span class="comment">/*</span> +<a name="l00249"></a>00249 <span class="comment"> * Simple queue access methods.</span> +<a name="l00250"></a>00250 <span class="comment"> */</span> +<a name="l00251"></a>00251 <span class="preprocessor">#define SIMPLEQ_FIRST(head) ((head)->sqh_first)</span> +<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#define SIMPLEQ_END(head) NULL</span> +<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))</span> +<a name="l00254"></a>00254 <span class="preprocessor"></span><span class="preprocessor">#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)</span> +<a name="l00255"></a>00255 <span class="preprocessor"></span> +<a name="l00256"></a>00256 <span class="preprocessor">#define SIMPLEQ_FOREACH(var, head, field) \</span> +<a name="l00257"></a>00257 <span class="preprocessor"> for((var) = SIMPLEQ_FIRST(head); \</span> +<a name="l00258"></a>00258 <span class="preprocessor"> (var) != SIMPLEQ_END(head); \</span> +<a name="l00259"></a>00259 <span class="preprocessor"> (var) = SIMPLEQ_NEXT(var, field))</span> +<a name="l00260"></a>00260 <span class="preprocessor"></span> +<a name="l00261"></a>00261 <span class="comment">/*</span> +<a name="l00262"></a>00262 <span class="comment"> * Simple queue functions.</span> +<a name="l00263"></a>00263 <span class="comment"> */</span> +<a name="l00264"></a>00264 <span class="preprocessor">#define SIMPLEQ_INIT(head) do { \</span> +<a name="l00265"></a>00265 <span class="preprocessor"> (head)->sqh_first = NULL; \</span> +<a name="l00266"></a>00266 <span class="preprocessor"> (head)->sqh_last = &(head)->sqh_first; \</span> +<a name="l00267"></a>00267 <span class="preprocessor">} while (0)</span> +<a name="l00268"></a>00268 <span class="preprocessor"></span> +<a name="l00269"></a>00269 <span class="preprocessor">#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \</span> +<a name="l00270"></a>00270 <span class="preprocessor"> if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \</span> +<a name="l00271"></a>00271 <span class="preprocessor"> (head)->sqh_last = &(elm)->field.sqe_next; \</span> +<a name="l00272"></a>00272 <span class="preprocessor"> (head)->sqh_first = (elm); \</span> +<a name="l00273"></a>00273 <span class="preprocessor">} while (0)</span> +<a name="l00274"></a>00274 <span class="preprocessor"></span> +<a name="l00275"></a>00275 <span class="preprocessor">#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \</span> +<a name="l00276"></a>00276 <span class="preprocessor"> (elm)->field.sqe_next = NULL; \</span> +<a name="l00277"></a>00277 <span class="preprocessor"> *(head)->sqh_last = (elm); \</span> +<a name="l00278"></a>00278 <span class="preprocessor"> (head)->sqh_last = &(elm)->field.sqe_next; \</span> +<a name="l00279"></a>00279 <span class="preprocessor">} while (0)</span> +<a name="l00280"></a>00280 <span class="preprocessor"></span> +<a name="l00281"></a>00281 <span class="preprocessor">#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \</span> +<a name="l00282"></a>00282 <span class="preprocessor"> if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\</span> +<a name="l00283"></a>00283 <span class="preprocessor"> (head)->sqh_last = &(elm)->field.sqe_next; \</span> +<a name="l00284"></a>00284 <span class="preprocessor"> (listelm)->field.sqe_next = (elm); \</span> +<a name="l00285"></a>00285 <span class="preprocessor">} while (0)</span> +<a name="l00286"></a>00286 <span class="preprocessor"></span> +<a name="l00287"></a>00287 <span class="preprocessor">#define SIMPLEQ_REMOVE_HEAD(head, elm, field) do { \</span> +<a name="l00288"></a>00288 <span class="preprocessor"> if (((head)->sqh_first = (elm)->field.sqe_next) == NULL) \</span> +<a name="l00289"></a>00289 <span class="preprocessor"> (head)->sqh_last = &(head)->sqh_first; \</span> +<a name="l00290"></a>00290 <span class="preprocessor">} while (0)</span> +<a name="l00291"></a>00291 <span class="preprocessor"></span> +<a name="l00292"></a>00292 <span class="comment">/*</span> +<a name="l00293"></a>00293 <span class="comment"> * Tail queue definitions.</span> +<a name="l00294"></a>00294 <span class="comment"> */</span> +<a name="l00295"></a>00295 <span class="preprocessor">#define TAILQ_HEAD(name, type) \</span> +<a name="l00296"></a>00296 <span class="preprocessor">struct name { \</span> +<a name="l00297"></a>00297 <span class="preprocessor"> struct type *tqh_first; </span><span class="comment">/* first element */</span> \ +<a name="l00298"></a>00298 struct type **tqh_last; <span class="comment">/* addr of last next element */</span> \ +<a name="l00299"></a>00299 } +<a name="l00300"></a>00300 +<a name="l00301"></a>00301 <span class="preprocessor">#define TAILQ_HEAD_INITIALIZER(head) \</span> +<a name="l00302"></a>00302 <span class="preprocessor"> { NULL, &(head).tqh_first }</span> +<a name="l00303"></a>00303 <span class="preprocessor"></span> +<a name="l00304"></a>00304 <span class="preprocessor">#define TAILQ_ENTRY(type) \</span> +<a name="l00305"></a>00305 <span class="preprocessor">struct { \</span> +<a name="l00306"></a>00306 <span class="preprocessor"> struct type *tqe_next; </span><span class="comment">/* next element */</span> \ +<a name="l00307"></a>00307 struct type **tqe_prev; <span class="comment">/* address of previous next element */</span> \ +<a name="l00308"></a>00308 } +<a name="l00309"></a>00309 +<a name="l00310"></a>00310 <span class="comment">/* </span> +<a name="l00311"></a>00311 <span class="comment"> * tail queue access methods </span> +<a name="l00312"></a>00312 <span class="comment"> */</span> +<a name="l00313"></a>00313 <span class="preprocessor">#define TAILQ_FIRST(head) ((head)->tqh_first)</span> +<a name="l00314"></a>00314 <span class="preprocessor"></span><span class="preprocessor">#define TAILQ_END(head) NULL</span> +<a name="l00315"></a>00315 <span class="preprocessor"></span><span class="preprocessor">#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)</span> +<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="preprocessor">#define TAILQ_LAST(head, headname) \</span> +<a name="l00317"></a>00317 <span class="preprocessor"> (*(((struct headname *)((head)->tqh_last))->tqh_last))</span> +<a name="l00318"></a>00318 <span class="preprocessor"></span><span class="comment">/* XXX */</span> +<a name="l00319"></a>00319 <span class="preprocessor">#define TAILQ_PREV(elm, headname, field) \</span> +<a name="l00320"></a>00320 <span class="preprocessor"> (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))</span> +<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="preprocessor">#define TAILQ_EMPTY(head) \</span> +<a name="l00322"></a>00322 <span class="preprocessor"> (TAILQ_FIRST(head) == TAILQ_END(head))</span> +<a name="l00323"></a>00323 <span class="preprocessor"></span> +<a name="l00324"></a>00324 <span class="preprocessor">#define TAILQ_FOREACH(var, head, field) \</span> +<a name="l00325"></a>00325 <span class="preprocessor"> for((var) = TAILQ_FIRST(head); \</span> +<a name="l00326"></a>00326 <span class="preprocessor"> (var) != TAILQ_END(head); \</span> +<a name="l00327"></a>00327 <span class="preprocessor"> (var) = TAILQ_NEXT(var, field))</span> +<a name="l00328"></a>00328 <span class="preprocessor"></span> +<a name="l00329"></a>00329 <span class="preprocessor">#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \</span> +<a name="l00330"></a>00330 <span class="preprocessor"> for((var) = TAILQ_LAST(head, headname); \</span> +<a name="l00331"></a>00331 <span class="preprocessor"> (var) != TAILQ_END(head); \</span> +<a name="l00332"></a>00332 <span class="preprocessor"> (var) = TAILQ_PREV(var, headname, field))</span> +<a name="l00333"></a>00333 <span class="preprocessor"></span> +<a name="l00334"></a>00334 <span class="comment">/*</span> +<a name="l00335"></a>00335 <span class="comment"> * Tail queue functions.</span> +<a name="l00336"></a>00336 <span class="comment"> */</span> +<a name="l00337"></a>00337 <span class="preprocessor">#define TAILQ_INIT(head) do { \</span> +<a name="l00338"></a>00338 <span class="preprocessor"> (head)->tqh_first = NULL; \</span> +<a name="l00339"></a>00339 <span class="preprocessor"> (head)->tqh_last = &(head)->tqh_first; \</span> +<a name="l00340"></a>00340 <span class="preprocessor">} while (0)</span> +<a name="l00341"></a>00341 <span class="preprocessor"></span> +<a name="l00342"></a>00342 <span class="preprocessor">#define TAILQ_INSERT_HEAD(head, elm, field) do { \</span> +<a name="l00343"></a>00343 <span class="preprocessor"> if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \</span> +<a name="l00344"></a>00344 <span class="preprocessor"> (head)->tqh_first->field.tqe_prev = \</span> +<a name="l00345"></a>00345 <span class="preprocessor"> &(elm)->field.tqe_next; \</span> +<a name="l00346"></a>00346 <span class="preprocessor"> else \</span> +<a name="l00347"></a>00347 <span class="preprocessor"> (head)->tqh_last = &(elm)->field.tqe_next; \</span> +<a name="l00348"></a>00348 <span class="preprocessor"> (head)->tqh_first = (elm); \</span> +<a name="l00349"></a>00349 <span class="preprocessor"> (elm)->field.tqe_prev = &(head)->tqh_first; \</span> +<a name="l00350"></a>00350 <span class="preprocessor">} while (0)</span> +<a name="l00351"></a>00351 <span class="preprocessor"></span> +<a name="l00352"></a>00352 <span class="preprocessor">#define TAILQ_INSERT_TAIL(head, elm, field) do { \</span> +<a name="l00353"></a>00353 <span class="preprocessor"> (elm)->field.tqe_next = NULL; \</span> +<a name="l00354"></a>00354 <span class="preprocessor"> (elm)->field.tqe_prev = (head)->tqh_last; \</span> +<a name="l00355"></a>00355 <span class="preprocessor"> *(head)->tqh_last = (elm); \</span> +<a name="l00356"></a>00356 <span class="preprocessor"> (head)->tqh_last = &(elm)->field.tqe_next; \</span> +<a name="l00357"></a>00357 <span class="preprocessor">} while (0)</span> +<a name="l00358"></a>00358 <span class="preprocessor"></span> +<a name="l00359"></a>00359 <span class="preprocessor">#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \</span> +<a name="l00360"></a>00360 <span class="preprocessor"> if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\</span> +<a name="l00361"></a>00361 <span class="preprocessor"> (elm)->field.tqe_next->field.tqe_prev = \</span> +<a name="l00362"></a>00362 <span class="preprocessor"> &(elm)->field.tqe_next; \</span> +<a name="l00363"></a>00363 <span class="preprocessor"> else \</span> +<a name="l00364"></a>00364 <span class="preprocessor"> (head)->tqh_last = &(elm)->field.tqe_next; \</span> +<a name="l00365"></a>00365 <span class="preprocessor"> (listelm)->field.tqe_next = (elm); \</span> +<a name="l00366"></a>00366 <span class="preprocessor"> (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \</span> +<a name="l00367"></a>00367 <span class="preprocessor">} while (0)</span> +<a name="l00368"></a>00368 <span class="preprocessor"></span> +<a name="l00369"></a>00369 <span class="preprocessor">#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \</span> +<a name="l00370"></a>00370 <span class="preprocessor"> (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \</span> +<a name="l00371"></a>00371 <span class="preprocessor"> (elm)->field.tqe_next = (listelm); \</span> +<a name="l00372"></a>00372 <span class="preprocessor"> *(listelm)->field.tqe_prev = (elm); \</span> +<a name="l00373"></a>00373 <span class="preprocessor"> (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \</span> +<a name="l00374"></a>00374 <span class="preprocessor">} while (0)</span> +<a name="l00375"></a>00375 <span class="preprocessor"></span> +<a name="l00376"></a>00376 <span class="preprocessor">#define TAILQ_REMOVE(head, elm, field) do { \</span> +<a name="l00377"></a>00377 <span class="preprocessor"> if (((elm)->field.tqe_next) != NULL) \</span> +<a name="l00378"></a>00378 <span class="preprocessor"> (elm)->field.tqe_next->field.tqe_prev = \</span> +<a name="l00379"></a>00379 <span class="preprocessor"> (elm)->field.tqe_prev; \</span> +<a name="l00380"></a>00380 <span class="preprocessor"> else \</span> +<a name="l00381"></a>00381 <span class="preprocessor"> (head)->tqh_last = (elm)->field.tqe_prev; \</span> +<a name="l00382"></a>00382 <span class="preprocessor"> *(elm)->field.tqe_prev = (elm)->field.tqe_next; \</span> +<a name="l00383"></a>00383 <span class="preprocessor">} while (0)</span> +<a name="l00384"></a>00384 <span class="preprocessor"></span> +<a name="l00385"></a>00385 <span class="preprocessor">#define TAILQ_REPLACE(head, elm, elm2, field) do { \</span> +<a name="l00386"></a>00386 <span class="preprocessor"> if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \</span> +<a name="l00387"></a>00387 <span class="preprocessor"> (elm2)->field.tqe_next->field.tqe_prev = \</span> +<a name="l00388"></a>00388 <span class="preprocessor"> &(elm2)->field.tqe_next; \</span> +<a name="l00389"></a>00389 <span class="preprocessor"> else \</span> +<a name="l00390"></a>00390 <span class="preprocessor"> (head)->tqh_last = &(elm2)->field.tqe_next; \</span> +<a name="l00391"></a>00391 <span class="preprocessor"> (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \</span> +<a name="l00392"></a>00392 <span class="preprocessor"> *(elm2)->field.tqe_prev = (elm2); \</span> +<a name="l00393"></a>00393 <span class="preprocessor">} while (0)</span> +<a name="l00394"></a>00394 <span class="preprocessor"></span> +<a name="l00395"></a>00395 <span class="comment">/*</span> +<a name="l00396"></a>00396 <span class="comment"> * Circular queue definitions.</span> +<a name="l00397"></a>00397 <span class="comment"> */</span> +<a name="l00398"></a>00398 <span class="preprocessor">#define CIRCLEQ_HEAD(name, type) \</span> +<a name="l00399"></a>00399 <span class="preprocessor">struct name { \</span> +<a name="l00400"></a>00400 <span class="preprocessor"> struct type *cqh_first; </span><span class="comment">/* first element */</span> \ +<a name="l00401"></a>00401 struct type *cqh_last; <span class="comment">/* last element */</span> \ +<a name="l00402"></a>00402 } +<a name="l00403"></a>00403 +<a name="l00404"></a>00404 <span class="preprocessor">#define CIRCLEQ_HEAD_INITIALIZER(head) \</span> +<a name="l00405"></a>00405 <span class="preprocessor"> { CIRCLEQ_END(&head), CIRCLEQ_END(&head) }</span> +<a name="l00406"></a>00406 <span class="preprocessor"></span> +<a name="l00407"></a>00407 <span class="preprocessor">#define CIRCLEQ_ENTRY(type) \</span> +<a name="l00408"></a>00408 <span class="preprocessor">struct { \</span> +<a name="l00409"></a>00409 <span class="preprocessor"> struct type *cqe_next; </span><span class="comment">/* next element */</span> \ +<a name="l00410"></a>00410 struct type *cqe_prev; <span class="comment">/* previous element */</span> \ +<a name="l00411"></a>00411 } +<a name="l00412"></a>00412 +<a name="l00413"></a>00413 <span class="comment">/*</span> +<a name="l00414"></a>00414 <span class="comment"> * Circular queue access methods </span> +<a name="l00415"></a>00415 <span class="comment"> */</span> +<a name="l00416"></a>00416 <span class="preprocessor">#define CIRCLEQ_FIRST(head) ((head)->cqh_first)</span> +<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#define CIRCLEQ_LAST(head) ((head)->cqh_last)</span> +<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#define CIRCLEQ_END(head) ((void *)(head))</span> +<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)</span> +<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)</span> +<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#define CIRCLEQ_EMPTY(head) \</span> +<a name="l00422"></a>00422 <span class="preprocessor"> (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))</span> +<a name="l00423"></a>00423 <span class="preprocessor"></span> +<a name="l00424"></a>00424 <span class="preprocessor">#define CIRCLEQ_FOREACH(var, head, field) \</span> +<a name="l00425"></a>00425 <span class="preprocessor"> for((var) = CIRCLEQ_FIRST(head); \</span> +<a name="l00426"></a>00426 <span class="preprocessor"> (var) != CIRCLEQ_END(head); \</span> +<a name="l00427"></a>00427 <span class="preprocessor"> (var) = CIRCLEQ_NEXT(var, field))</span> +<a name="l00428"></a>00428 <span class="preprocessor"></span> +<a name="l00429"></a>00429 <span class="preprocessor">#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \</span> +<a name="l00430"></a>00430 <span class="preprocessor"> for((var) = CIRCLEQ_LAST(head); \</span> +<a name="l00431"></a>00431 <span class="preprocessor"> (var) != CIRCLEQ_END(head); \</span> +<a name="l00432"></a>00432 <span class="preprocessor"> (var) = CIRCLEQ_PREV(var, field))</span> +<a name="l00433"></a>00433 <span class="preprocessor"></span> +<a name="l00434"></a>00434 <span class="comment">/*</span> +<a name="l00435"></a>00435 <span class="comment"> * Circular queue functions.</span> +<a name="l00436"></a>00436 <span class="comment"> */</span> +<a name="l00437"></a>00437 <span class="preprocessor">#define CIRCLEQ_INIT(head) do { \</span> +<a name="l00438"></a>00438 <span class="preprocessor"> (head)->cqh_first = CIRCLEQ_END(head); \</span> +<a name="l00439"></a>00439 <span class="preprocessor"> (head)->cqh_last = CIRCLEQ_END(head); \</span> +<a name="l00440"></a>00440 <span class="preprocessor">} while (0)</span> +<a name="l00441"></a>00441 <span class="preprocessor"></span> +<a name="l00442"></a>00442 <span class="preprocessor">#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \</span> +<a name="l00443"></a>00443 <span class="preprocessor"> (elm)->field.cqe_next = (listelm)->field.cqe_next; \</span> +<a name="l00444"></a>00444 <span class="preprocessor"> (elm)->field.cqe_prev = (listelm); \</span> +<a name="l00445"></a>00445 <span class="preprocessor"> if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \</span> +<a name="l00446"></a>00446 <span class="preprocessor"> (head)->cqh_last = (elm); \</span> +<a name="l00447"></a>00447 <span class="preprocessor"> else \</span> +<a name="l00448"></a>00448 <span class="preprocessor"> (listelm)->field.cqe_next->field.cqe_prev = (elm); \</span> +<a name="l00449"></a>00449 <span class="preprocessor"> (listelm)->field.cqe_next = (elm); \</span> +<a name="l00450"></a>00450 <span class="preprocessor">} while (0)</span> +<a name="l00451"></a>00451 <span class="preprocessor"></span> +<a name="l00452"></a>00452 <span class="preprocessor">#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \</span> +<a name="l00453"></a>00453 <span class="preprocessor"> (elm)->field.cqe_next = (listelm); \</span> +<a name="l00454"></a>00454 <span class="preprocessor"> (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \</span> +<a name="l00455"></a>00455 <span class="preprocessor"> if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \</span> +<a name="l00456"></a>00456 <span class="preprocessor"> (head)->cqh_first = (elm); \</span> +<a name="l00457"></a>00457 <span class="preprocessor"> else \</span> +<a name="l00458"></a>00458 <span class="preprocessor"> (listelm)->field.cqe_prev->field.cqe_next = (elm); \</span> +<a name="l00459"></a>00459 <span class="preprocessor"> (listelm)->field.cqe_prev = (elm); \</span> +<a name="l00460"></a>00460 <span class="preprocessor">} while (0)</span> +<a name="l00461"></a>00461 <span class="preprocessor"></span> +<a name="l00462"></a>00462 <span class="preprocessor">#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \</span> +<a name="l00463"></a>00463 <span class="preprocessor"> (elm)->field.cqe_next = (head)->cqh_first; \</span> +<a name="l00464"></a>00464 <span class="preprocessor"> (elm)->field.cqe_prev = CIRCLEQ_END(head); \</span> +<a name="l00465"></a>00465 <span class="preprocessor"> if ((head)->cqh_last == CIRCLEQ_END(head)) \</span> +<a name="l00466"></a>00466 <span class="preprocessor"> (head)->cqh_last = (elm); \</span> +<a name="l00467"></a>00467 <span class="preprocessor"> else \</span> +<a name="l00468"></a>00468 <span class="preprocessor"> (head)->cqh_first->field.cqe_prev = (elm); \</span> +<a name="l00469"></a>00469 <span class="preprocessor"> (head)->cqh_first = (elm); \</span> +<a name="l00470"></a>00470 <span class="preprocessor">} while (0)</span> +<a name="l00471"></a>00471 <span class="preprocessor"></span> +<a name="l00472"></a>00472 <span class="preprocessor">#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \</span> +<a name="l00473"></a>00473 <span class="preprocessor"> (elm)->field.cqe_next = CIRCLEQ_END(head); \</span> +<a name="l00474"></a>00474 <span class="preprocessor"> (elm)->field.cqe_prev = (head)->cqh_last; \</span> +<a name="l00475"></a>00475 <span class="preprocessor"> if ((head)->cqh_first == CIRCLEQ_END(head)) \</span> +<a name="l00476"></a>00476 <span class="preprocessor"> (head)->cqh_first = (elm); \</span> +<a name="l00477"></a>00477 <span class="preprocessor"> else \</span> +<a name="l00478"></a>00478 <span class="preprocessor"> (head)->cqh_last->field.cqe_next = (elm); \</span> +<a name="l00479"></a>00479 <span class="preprocessor"> (head)->cqh_last = (elm); \</span> +<a name="l00480"></a>00480 <span class="preprocessor">} while (0)</span> +<a name="l00481"></a>00481 <span class="preprocessor"></span> +<a name="l00482"></a>00482 <span class="preprocessor">#define CIRCLEQ_REMOVE(head, elm, field) do { \</span> +<a name="l00483"></a>00483 <span class="preprocessor"> if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \</span> +<a name="l00484"></a>00484 <span class="preprocessor"> (head)->cqh_last = (elm)->field.cqe_prev; \</span> +<a name="l00485"></a>00485 <span class="preprocessor"> else \</span> +<a name="l00486"></a>00486 <span class="preprocessor"> (elm)->field.cqe_next->field.cqe_prev = \</span> +<a name="l00487"></a>00487 <span class="preprocessor"> (elm)->field.cqe_prev; \</span> +<a name="l00488"></a>00488 <span class="preprocessor"> if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \</span> +<a name="l00489"></a>00489 <span class="preprocessor"> (head)->cqh_first = (elm)->field.cqe_next; \</span> +<a name="l00490"></a>00490 <span class="preprocessor"> else \</span> +<a name="l00491"></a>00491 <span class="preprocessor"> (elm)->field.cqe_prev->field.cqe_next = \</span> +<a name="l00492"></a>00492 <span class="preprocessor"> (elm)->field.cqe_next; \</span> +<a name="l00493"></a>00493 <span class="preprocessor">} while (0)</span> +<a name="l00494"></a>00494 <span class="preprocessor"></span> +<a name="l00495"></a>00495 <span class="preprocessor">#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \</span> +<a name="l00496"></a>00496 <span class="preprocessor"> if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \</span> +<a name="l00497"></a>00497 <span class="preprocessor"> CIRCLEQ_END(head)) \</span> +<a name="l00498"></a>00498 <span class="preprocessor"> (head).cqh_last = (elm2); \</span> +<a name="l00499"></a>00499 <span class="preprocessor"> else \</span> +<a name="l00500"></a>00500 <span class="preprocessor"> (elm2)->field.cqe_next->field.cqe_prev = (elm2); \</span> +<a name="l00501"></a>00501 <span class="preprocessor"> if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \</span> +<a name="l00502"></a>00502 <span class="preprocessor"> CIRCLEQ_END(head)) \</span> +<a name="l00503"></a>00503 <span class="preprocessor"> (head).cqh_first = (elm2); \</span> +<a name="l00504"></a>00504 <span class="preprocessor"> else \</span> +<a name="l00505"></a>00505 <span class="preprocessor"> (elm2)->field.cqe_prev->field.cqe_next = (elm2); \</span> +<a name="l00506"></a>00506 <span class="preprocessor">} while (0)</span> +<a name="l00507"></a>00507 <span class="preprocessor"></span> +<a name="l00508"></a>00508 <span class="preprocessor">#endif </span><span class="comment">/* !_SYS_QUEUE_H_ */</span> +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__util_8c.html b/main/minimime/mm-docs/html/mm__util_8c.html new file mode 100644 index 0000000000..780feb796e --- /dev/null +++ b/main/minimime/mm-docs/html/mm__util_8c.html @@ -0,0 +1,58 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_util.c File Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_util.c File Reference</h1><code>#include <stdio.h></code><br> +<code>#include <stdlib.h></code><br> +<code>#include <string.h></code><br> +<code>#include <time.h></code><br> +<code>#include <assert.h></code><br> +<code>#include "<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>"</code><br> +<table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g2ff4ef58da7e543466e75f20f2a2d8b7">xmalloc</a> (size_t size)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#ge14637b4672461f1f0bee822406d68dc">xrealloc</a> (void *p, size_t size)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="700bf3013e33311eacdd1f20d13bdc9a"></a><!-- doxytag: member="mm_util.c::xstrdup" ref="700bf3013e33311eacdd1f20d13bdc9a" args="(const char *str)" --> +char * </td><td class="memItemRight" valign="bottom"><b>xstrdup</b> (const char *str)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="91fc771d8aa78ca2ac43244c491da52d"></a><!-- doxytag: member="mm_util.c::xfree" ref="91fc771d8aa78ca2ac43244c491da52d" args="(void *p)" --> +void </td><td class="memItemRight" valign="bottom"><b>xfree</b> (void *p)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#gf0f89a29a634f6f1f833abb1e214a6b1">mm_unquote</a> (const char *string)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g49c016ff4cfd02f1b019c4dce5aac357">mm_uncomment</a> (const char *string)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g3ae25483c8a42f6562f2a916a511228f">xstrsep</a> (char **stringp, const char *delim)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#gf62be7dd21e545f8db72f3c9e3b6a3c3">mm_stripchars</a> (char *input, char *strip)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__util.html#g0747d4b4e33644263e6d73d2d8d4818b">mm_addchars</a> (char *input, char *add, u_int16_t linelength)</td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a965d3d1c625253beffd53051b38548e"></a><!-- doxytag: member="mm_util.c::mm_striptrailing" ref="a965d3d1c625253beffd53051b38548e" args="(char **what, const char *charset)" --> +void </td><td class="memItemRight" valign="bottom"><b>mm_striptrailing</b> (char **what, const char *charset)</td></tr> + +</table> +<hr><a name="_details"></a><h2>Detailed Description</h2> +This module contains utility functions for the MiniMIME library <hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/mm__util_8h-source.html b/main/minimime/mm-docs/html/mm__util_8h-source.html new file mode 100644 index 0000000000..88dc9be5f2 --- /dev/null +++ b/main/minimime/mm-docs/html/mm__util_8h-source.html @@ -0,0 +1,74 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: mm_util.h Source File</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li id="current"><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>Globals</span></a></li> + </ul></div> +<h1>mm_util.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> +<a name="l00002"></a>00002 <span class="comment"> * $Id$</span> +<a name="l00003"></a>00003 <span class="comment"> *</span> +<a name="l00004"></a>00004 <span class="comment"> * MiniMIME - a library for handling MIME messages</span> +<a name="l00005"></a>00005 <span class="comment"> *</span> +<a name="l00006"></a>00006 <span class="comment"> * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net></span> +<a name="l00007"></a>00007 <span class="comment"> * All rights reserved.</span> +<a name="l00008"></a>00008 <span class="comment"> *</span> +<a name="l00009"></a>00009 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span> +<a name="l00010"></a>00010 <span class="comment"> * modification, are permitted provided that the following conditions</span> +<a name="l00011"></a>00011 <span class="comment"> * are met:</span> +<a name="l00012"></a>00012 <span class="comment"> *</span> +<a name="l00013"></a>00013 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span> +<a name="l00014"></a>00014 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span> +<a name="l00015"></a>00015 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span> +<a name="l00016"></a>00016 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span> +<a name="l00017"></a>00017 <span class="comment"> * documentation and/or other materials provided with the distribution.</span> +<a name="l00018"></a>00018 <span class="comment"> *</span> +<a name="l00019"></a>00019 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND</span> +<a name="l00020"></a>00020 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span> +<a name="l00021"></a>00021 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span> +<a name="l00022"></a>00022 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD</span> +<a name="l00023"></a>00023 <span class="comment"> * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span> +<a name="l00024"></a>00024 <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span> +<a name="l00025"></a>00025 <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span> +<a name="l00026"></a>00026 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span> +<a name="l00027"></a>00027 <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span> +<a name="l00028"></a>00028 <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF</span> +<a name="l00029"></a>00029 <span class="comment"> * THE POSSIBILITY OF SUCH DAMAGE.</span> +<a name="l00030"></a>00030 <span class="comment"> */</span> +<a name="l00031"></a>00031 <span class="preprocessor">#ifndef __MM_UTIL_H</span> +<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define __MM_UTIL_H</span> +<a name="l00033"></a>00033 <span class="preprocessor"></span> +<a name="l00034"></a>00034 <span class="preprocessor">#define STRIP_TRAILING(str, charset) do { \</span> +<a name="l00035"></a>00035 <span class="preprocessor"> size_t eos, i, hit; \</span> +<a name="l00036"></a>00036 <span class="preprocessor"> for (eos = strlen(str); eos > 0; eos--) { \</span> +<a name="l00037"></a>00037 <span class="preprocessor"> hit = 0; \</span> +<a name="l00038"></a>00038 <span class="preprocessor"> for (i = 0; i <= strlen(charset); i++) { \</span> +<a name="l00039"></a>00039 <span class="preprocessor"> if (str[eos] == charset[i]) {\</span> +<a name="l00040"></a>00040 <span class="preprocessor"> str[eos] = '\0'; \</span> +<a name="l00041"></a>00041 <span class="preprocessor"> hit = 1; \</span> +<a name="l00042"></a>00042 <span class="preprocessor"> break; \</span> +<a name="l00043"></a>00043 <span class="preprocessor"> } \</span> +<a name="l00044"></a>00044 <span class="preprocessor"> } \</span> +<a name="l00045"></a>00045 <span class="preprocessor"> if (!hit) \</span> +<a name="l00046"></a>00046 <span class="preprocessor"> break; \</span> +<a name="l00047"></a>00047 <span class="preprocessor"> } \</span> +<a name="l00048"></a>00048 <span class="preprocessor">} while (0);</span> +<a name="l00049"></a>00049 <span class="preprocessor"></span> +<a name="l00050"></a>00050 <span class="preprocessor">#endif </span><span class="comment">/* ! __MM_UTIL_H */</span> +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/modules.html b/main/minimime/mm-docs/html/modules.html new file mode 100644 index 0000000000..5057325275 --- /dev/null +++ b/main/minimime/mm-docs/html/modules.html @@ -0,0 +1,30 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Module Index</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li id="current"><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>MiniMIME Modules</h1>Here is a list of all modules:<ul> +<li><a class="el" href="group__codecs.html">Manipulating MiniMIME codecs</a> +<li><a class="el" href="group__contenttype.html">Accessing and manipulating Content-Type objects</a> +<li><a class="el" href="group__context.html">Accessing and manipulating MIME contexts</a> +<li><a class="el" href="group__envelope.html">Accessing and manipulating a message's envelope</a> +<li><a class="el" href="group__error.html">MiniMIME error functions</a> +<li><a class="el" href="group__mimepart.html">Accessing and manipulating MIME parts</a> +<li><a class="el" href="group__mimeutil.html">MIME related utility functions</a> +<li><a class="el" href="group__param.html">Accessing and manipulating MIME parameters</a> +<li><a class="el" href="group__util.html">General purpose utility functions</a> +</ul> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/pages.html b/main/minimime/mm-docs/html/pages.html new file mode 100644 index 0000000000..362d4af9b2 --- /dev/null +++ b/main/minimime/mm-docs/html/pages.html @@ -0,0 +1,23 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>MiniMIME: Page Index</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.1 --> +<div class="tabs"> + <ul> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="modules.html"><span>Modules</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + <li id="current"><a href="pages.html"><span>Related Pages</span></a></li> + </ul></div> +<h1>MiniMIME Related Pages</h1>Here is a list of all related documentation pages:<ul> +<li><a class="el" href="bug.html">Bug List</a> + +</ul> +<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:09 2007 for MiniMIME by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> +</body> +</html> diff --git a/main/minimime/mm-docs/html/tabs.css b/main/minimime/mm-docs/html/tabs.css new file mode 100644 index 0000000000..a61552a67a --- /dev/null +++ b/main/minimime/mm-docs/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI#current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI#current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.nav +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/main/minimime/mm-docs/latex/Makefile b/main/minimime/mm-docs/latex/Makefile new file mode 100644 index 0000000000..776fcf9682 --- /dev/null +++ b/main/minimime/mm-docs/latex/Makefile @@ -0,0 +1,39 @@ +all: clean refman.dvi + +ps: refman.ps + +pdf: refman.pdf + +ps_2on1: refman_2on1.ps + +pdf_2on1: refman_2on1.pdf + +refman.ps: refman.dvi + dvips -o refman.ps refman.dvi + +refman.pdf: refman.ps + ps2pdf refman.ps refman.pdf + +refman.dvi: refman.tex doxygen.sty + echo "Running latex..." + latex refman.tex + echo "Running makeindex..." + makeindex refman.idx + echo "Rerunning latex...." + latex refman.tex + latex_count=5 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + latex refman.tex ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + +refman_2on1.ps: refman.ps + psnup -2 refman.ps >refman_2on1.ps + +refman_2on1.pdf: refman_2on1.ps + ps2pdf refman_2on1.ps refman_2on1.pdf + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf diff --git a/main/minimime/mm-docs/latex/bug.tex b/main/minimime/mm-docs/latex/bug.tex new file mode 100644 index 0000000000..0850a8f78d --- /dev/null +++ b/main/minimime/mm-docs/latex/bug.tex @@ -0,0 +1,9 @@ +\section{Bug List}\label{bug} +\label{bug__bug000001} + \begin{description} +\item[Global \doxyref{mm\_\-content\_\-setmaintype}{p.}{group__contenttype_g7bab273d117c6c0cacad20361d8fb1c8} ]The xfree() call could lead to undesirable results. Do we really need it? \end{description} + + +\label{bug__bug000002} + \begin{description} +\item[Global \doxyref{mm\_\-content\_\-setsubtype}{p.}{group__contenttype_g14b0738410d566ad2312405946f22212} ]The xfree() call could lead to undesirable results. Do we really need it? \end{description} diff --git a/main/minimime/mm-docs/latex/doxygen.sty b/main/minimime/mm-docs/latex/doxygen.sty new file mode 100644 index 0000000000..37e3982923 --- /dev/null +++ b/main/minimime/mm-docs/latex/doxygen.sty @@ -0,0 +1,78 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} +\RequirePackage{calc} +\RequirePackage{array} +\pagestyle{fancyplain} +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} +\lhead[\fancyplain{}{\bfseries\thepage}] + {\fancyplain{}{\bfseries\rightmark}} +\rhead[\fancyplain{}{\bfseries\leftmark}] + {\fancyplain{}{\bfseries\thepage}} +\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Thu Mar 29 17:59:08 2007 for Mini\-MIME by Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Thu Mar 29 17:59:08 2007 for Mini\-MIME by Doxygen }} +\cfoot{} +\newenvironment{Code} +{\footnotesize} +{\normalsize} +\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})} +\newenvironment{DocInclude} +{\footnotesize} +{\normalsize} +\newenvironment{VerbInclude} +{\footnotesize} +{\normalsize} +\newenvironment{Image} +{\begin{figure}[H]} +{\end{figure}} +\newenvironment{ImageNoCaption}{}{} +\newenvironment{CompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{\hfill}}} +{\end{list}} +\newenvironment{CompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy +\usepackage[T1]{fontenc} diff --git a/main/minimime/mm-docs/latex/files.tex b/main/minimime/mm-docs/latex/files.tex new file mode 100644 index 0000000000..fd49692dbe --- /dev/null +++ b/main/minimime/mm-docs/latex/files.tex @@ -0,0 +1,21 @@ +\section{Mini\-MIME File List} +Here is a list of all documented files with brief descriptions:\begin{CompactList} +\item\contentsline{section}{\textbf{mimeparser.h} }{\pageref{mimeparser_8h}}{} +\item\contentsline{section}{\textbf{mimeparser.tab.h} }{\pageref{mimeparser_8tab_8h}}{} +\item\contentsline{section}{\textbf{mm.h} }{\pageref{mm_8h}}{} +\item\contentsline{section}{{\bf mm\_\-codecs.c} }{\pageref{mm__codecs_8c}}{} +\item\contentsline{section}{{\bf mm\_\-contenttype.c} }{\pageref{mm__contenttype_8c}}{} +\item\contentsline{section}{{\bf mm\_\-context.c} }{\pageref{mm__context_8c}}{} +\item\contentsline{section}{{\bf mm\_\-envelope.c} }{\pageref{mm__envelope_8c}}{} +\item\contentsline{section}{{\bf mm\_\-error.c} }{\pageref{mm__error_8c}}{} +\item\contentsline{section}{{\bf mm\_\-header.c} }{\pageref{mm__header_8c}}{} +\item\contentsline{section}{{\bf mm\_\-internal.h} }{\pageref{mm__internal_8h}}{} +\item\contentsline{section}{\textbf{mm\_\-mem.h} }{\pageref{mm__mem_8h}}{} +\item\contentsline{section}{{\bf mm\_\-mimepart.c} }{\pageref{mm__mimepart_8c}}{} +\item\contentsline{section}{{\bf mm\_\-mimeutil.c} }{\pageref{mm__mimeutil_8c}}{} +\item\contentsline{section}{{\bf mm\_\-param.c} }{\pageref{mm__param_8c}}{} +\item\contentsline{section}{{\bf mm\_\-parse.c} }{\pageref{mm__parse_8c}}{} +\item\contentsline{section}{\textbf{mm\_\-queue.h} }{\pageref{mm__queue_8h}}{} +\item\contentsline{section}{{\bf mm\_\-util.c} }{\pageref{mm__util_8c}}{} +\item\contentsline{section}{\textbf{mm\_\-util.h} }{\pageref{mm__util_8h}}{} +\end{CompactList} diff --git a/main/minimime/mm-docs/latex/group__codecs.tex b/main/minimime/mm-docs/latex/group__codecs.tex new file mode 100644 index 0000000000..33c15f6d94 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__codecs.tex @@ -0,0 +1,119 @@ +\section{Manipulating Mini\-MIME codecs} +\label{group__codecs}\index{Manipulating MiniMIME codecs@{Manipulating MiniMIME codecs}} +\subsection*{Codec manipulation} +\begin{CompactItemize} +\item +int {\bf mm\_\-codec\_\-hasdecoder} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-hasencoder} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-isregistered} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-register} (const char $\ast$encoding, char $\ast$($\ast$encoder)(char $\ast$data, u\_\-int32\_\-t i), char $\ast$($\ast$decoder)(char $\ast$data)) +\item +int {\bf mm\_\-codec\_\-unregister} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-unregisterall} (void) +\item +void {\bf mm\_\-codec\_\-registerdefaultcodecs} (void) +\end{CompactItemize} + + +\subsection{Function Documentation} +\index{codecs@{codecs}!mm_codec_hasdecoder@{mm\_\-codec\_\-hasdecoder}} +\index{mm_codec_hasdecoder@{mm\_\-codec\_\-hasdecoder}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-codec\_\-hasdecoder (const char $\ast$ {\em encoding})}\label{group__codecs_g6ccb0f7a1d7c870dc3dae04f31d6ccca} + + +Looks up whether a context has an decoder installed for a given encoding + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em encoding}]The encoding specifier to look up \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if a decoder is installed or 0 if not \end{Desc} +\index{codecs@{codecs}!mm_codec_hasencoder@{mm\_\-codec\_\-hasencoder}} +\index{mm_codec_hasencoder@{mm\_\-codec\_\-hasencoder}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-codec\_\-hasencoder (const char $\ast$ {\em encoding})}\label{group__codecs_g50ff257b794ceaec7aedf9ae18bfcc57} + + +Looks up whether a context has an encoder installed for a given encoding + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid MIME context \item[{\em encoding}]The encoding specifier to look up \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if an encoder is installed or 0 if not \end{Desc} +\index{codecs@{codecs}!mm_codec_isregistered@{mm\_\-codec\_\-isregistered}} +\index{mm_codec_isregistered@{mm\_\-codec\_\-isregistered}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-codec\_\-isregistered (const char $\ast$ {\em encoding})}\label{group__codecs_g9e19f6343128fd7e4ec57c3d55049b55} + + +Looks up whether a codec for a given encoding is installed to a context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em encoding}]The encoding specifier to look up \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if a codec was found or 0 if not \end{Desc} +\index{codecs@{codecs}!mm_codec_register@{mm\_\-codec\_\-register}} +\index{mm_codec_register@{mm\_\-codec\_\-register}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-codec\_\-register (const char $\ast$ {\em encoding}, char $\ast$($\ast$)(char $\ast$data, u\_\-int32\_\-t i) {\em encoder}, char $\ast$($\ast$)(char $\ast$data) {\em decoder})}\label{group__codecs_gf97a7311c909888ed9f6f14d6f1bf397} + + +Registers a codec with the Mini\-MIME library + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em encoding}]The encoding specifier for which to register the codec \item[{\em encoder}]The encoder function for this encoding \item[{\em decoder}]The decoder function for this encoding \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if successfull or 0 if not\end{Desc} +This function registers a codec for a given Mini\-MIME context. The codec may provide an decoder, an encoder or both (but not none). If there is a codec already installed for this encoding, the function will puke. \index{codecs@{codecs}!mm_codec_registerdefaultcodecs@{mm\_\-codec\_\-registerdefaultcodecs}} +\index{mm_codec_registerdefaultcodecs@{mm\_\-codec\_\-registerdefaultcodecs}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-codec\_\-registerdefaultcodecs (void)}\label{group__codecs_gf39e72460fb85f5ca41f6e270a68aacc} + + +Registers the default codecs to a Mini\-MIME context + +This functions registers the codecs for the following encodings to a Mini\-MIME context: + +\begin{itemize} +\item Base64\item (TODO:) Quoted-Printable \end{itemize} +\index{codecs@{codecs}!mm_codec_unregister@{mm\_\-codec\_\-unregister}} +\index{mm_codec_unregister@{mm\_\-codec\_\-unregister}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-codec\_\-unregister (const char $\ast$ {\em encoding})}\label{group__codecs_g0c71696bc70f834386193e3c7a0e2ca4} + + +Unregisters a Mini\-MIME codec + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em encoding}]The encoding specifier which to unregister \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 if unregistered successfully, or -1 if there was no such codec \end{Desc} +\index{codecs@{codecs}!mm_codec_unregisterall@{mm\_\-codec\_\-unregisterall}} +\index{mm_codec_unregisterall@{mm\_\-codec\_\-unregisterall}!codecs@{codecs}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-codec\_\-unregisterall (void)}\label{group__codecs_g7c9e6538f84c368be2b56a3c9ba702be} + + +Unregisters all codecs within a context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 if all codecs were unregistered successfully or -1 if an error occured. \end{Desc} +\begin{Desc} +\item[Note:]Foobar \end{Desc} diff --git a/main/minimime/mm-docs/latex/group__contenttype.tex b/main/minimime/mm-docs/latex/group__contenttype.tex new file mode 100644 index 0000000000..166261a629 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__contenttype.tex @@ -0,0 +1,246 @@ +\section{Accessing and manipulating Content-Type objects} +\label{group__contenttype}\index{Accessing and manipulating Content-Type objects@{Accessing and manipulating Content-Type objects}} +\subsection*{Functions for manipulating Content-Type objects} +\begin{CompactItemize} +\item +mm\_\-content $\ast$ {\bf mm\_\-content\_\-new} (void) +\item +void {\bf mm\_\-content\_\-free} (struct mm\_\-content $\ast$ct) +\item +int {\bf mm\_\-content\_\-attachparam} (struct mm\_\-content $\ast$ct, struct mm\_\-param $\ast$param) +\item +char $\ast$ {\bf mm\_\-content\_\-getparambyname} (struct mm\_\-content $\ast$ct, const char $\ast$name) +\item +mm\_\-param $\ast$ \textbf{mm\_\-content\_\-getparamobjbyname} (struct mm\_\-content $\ast$ct, const char $\ast$name)\label{group__contenttype_g1ba63e679d2b49aceb6cfec8a6752581} + +\item +int {\bf mm\_\-content\_\-setmaintype} (struct mm\_\-content $\ast$ct, char $\ast$value, int copy) +\item +char $\ast$ {\bf mm\_\-content\_\-getmaintype} (struct mm\_\-content $\ast$ct) +\item +char $\ast$ {\bf mm\_\-content\_\-getsubtype} (struct mm\_\-content $\ast$ct) +\item +char $\ast$ \textbf{mm\_\-content\_\-gettype} (struct mm\_\-content $\ast$ct)\label{group__contenttype_ga6d8453eb35bd695c4944e53b7040b65} + +\item +int {\bf mm\_\-content\_\-setsubtype} (struct mm\_\-content $\ast$ct, char $\ast$value, int copy) +\item +int \textbf{mm\_\-content\_\-settype} (struct mm\_\-content $\ast$ct, const char $\ast$fmt,...)\label{group__contenttype_g878686678ea2ba97aa8edb1206a564d8} + +\item +int {\bf mm\_\-content\_\-iscomposite} (struct mm\_\-content $\ast$ct) +\item +int {\bf mm\_\-content\_\-isvalidencoding} (const char $\ast$encoding) +\item +int {\bf mm\_\-content\_\-setencoding} (struct mm\_\-content $\ast$ct, const char $\ast$encoding) +\item +int {\bf mm\_\-content\_\-getencoding} (struct mm\_\-content $\ast$ct, const char $\ast$encoding) +\item +char $\ast$ {\bf mm\_\-content\_\-paramstostring} (struct mm\_\-content $\ast$ct) +\item +char $\ast$ {\bf mm\_\-content\_\-tostring} (struct mm\_\-content $\ast$ct) +\end{CompactItemize} +\subsection*{Variables} +\begin{CompactItemize} +\item +int \textbf{mm\_\-encoding\_\-mappings::type}\label{group__contenttype_g6c458a8611981109bf0519b5ae21e12e} + +\end{CompactItemize} + + +\subsection{Function Documentation} +\index{contenttype@{contenttype}!mm_content_attachparam@{mm\_\-content\_\-attachparam}} +\index{mm_content_attachparam@{mm\_\-content\_\-attachparam}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-attachparam (struct mm\_\-content $\ast$ {\em ct}, struct mm\_\-param $\ast$ {\em param})}\label{group__contenttype_g080b7ed798ed497dcd635a6bab86962f} + + +Attaches a parameter to a Content-Type object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]The target Content-Type object \item[{\em param}]The Content-Type parameter which to attach \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success and -1 on failure \end{Desc} +\index{contenttype@{contenttype}!mm_content_free@{mm\_\-content\_\-free}} +\index{mm_content_free@{mm\_\-content\_\-free}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-content\_\-free (struct mm\_\-content $\ast$ {\em ct})}\label{group__contenttype_g404314481125849bce869ee4b0f647af} + + +Releases all memory associated with an Content-Type object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A Content-Type object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]Nothing \end{Desc} +\index{contenttype@{contenttype}!mm_content_getencoding@{mm\_\-content\_\-getencoding}} +\index{mm_content_getencoding@{mm\_\-content\_\-getencoding}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-getencoding (struct mm\_\-content $\ast$ {\em ct}, const char $\ast$ {\em encoding})}\label{group__contenttype_gbff87e581cd04db16e91245e9e9de67d} + + +Gets the numerical ID of a content encoding identifier + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid Content Type object \item[{\em encoding}]A string representing the content encoding identifier \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The numerical ID of the content encoding \end{Desc} +\index{contenttype@{contenttype}!mm_content_getmaintype@{mm\_\-content\_\-getmaintype}} +\index{mm_content_getmaintype@{mm\_\-content\_\-getmaintype}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-content\_\-getmaintype (struct mm\_\-content $\ast$ {\em ct})}\label{group__contenttype_gb213081017abf6bc7e601c6bf4214924} + + +Retrieves the main MIME type stored in a Content-Type object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid Content-Type object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the string representing the main type \end{Desc} +\index{contenttype@{contenttype}!mm_content_getparambyname@{mm\_\-content\_\-getparambyname}} +\index{mm_content_getparambyname@{mm\_\-content\_\-getparambyname}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-content\_\-getparambyname (struct mm\_\-content $\ast$ {\em ct}, const char $\ast$ {\em name})}\label{group__contenttype_g451441ee557ab5ef29477f3dc8330bf6} + + +Gets a parameter value from a Content-Type object. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]the Content-Type object \item[{\em name}]the name of the parameter to retrieve \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The value of the parameter on success or a NULL pointer on failure \end{Desc} +\index{contenttype@{contenttype}!mm_content_getsubtype@{mm\_\-content\_\-getsubtype}} +\index{mm_content_getsubtype@{mm\_\-content\_\-getsubtype}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-content\_\-getsubtype (struct mm\_\-content $\ast$ {\em ct})}\label{group__contenttype_g97f77ef40c14cd0fb397bad358ee5d49} + + +Retrieves the sub MIME type stored in a Content-Type object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid Content-Type object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the string holding the current sub MIME type \end{Desc} +\index{contenttype@{contenttype}!mm_content_iscomposite@{mm\_\-content\_\-iscomposite}} +\index{mm_content_iscomposite@{mm\_\-content\_\-iscomposite}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-iscomposite (struct mm\_\-content $\ast$ {\em ct})}\label{group__contenttype_ga7fa479f27e73dea57257421d8fc9fc5} + + +Checks whether the Content-Type represents a composite message or not + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid Content-Type object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if the Content-Type object represents a composite message or 0 if not. \end{Desc} +\index{contenttype@{contenttype}!mm_content_isvalidencoding@{mm\_\-content\_\-isvalidencoding}} +\index{mm_content_isvalidencoding@{mm\_\-content\_\-isvalidencoding}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-isvalidencoding (const char $\ast$ {\em encoding})}\label{group__contenttype_gb724b5979182fa272fe4fd1b72b395d5} + + +Verifies whether a string represents a valid encoding or not. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em encoding}]The string to verify \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if the encoding string is valid or 0 if not \end{Desc} +\index{contenttype@{contenttype}!mm_content_new@{mm\_\-content\_\-new}} +\index{mm_content_new@{mm\_\-content\_\-new}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-content$\ast$ mm\_\-content\_\-new (void)}\label{group__contenttype_g3880ac74a20b4a9f610a4159568e1801} + + +Creates a new object to hold a Content-Type representation. The allocated memory must later be freed using \doxyref{mm\_\-content\_\-free()}{p.}{group__contenttype_g404314481125849bce869ee4b0f647af} + +\begin{Desc} +\item[Returns:]An object representing a MIME Content-Type \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-content\_\-free}{p.}{group__contenttype_g404314481125849bce869ee4b0f647af} \end{Desc} +\index{contenttype@{contenttype}!mm_content_paramstostring@{mm\_\-content\_\-paramstostring}} +\index{mm_content_paramstostring@{mm\_\-content\_\-paramstostring}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-content\_\-paramstostring (struct mm\_\-content $\ast$ {\em ct})}\label{group__contenttype_g792e7d33fbb30e0123408bcef9d3204c} + + +Constructs a MIME conform string of Content-Type parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid Content Type object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to a string representing the Content-Type parameters in MIME terminology, or NULL if either the Content-Type object is invalid, has no parameters or no memory could be allocated.\end{Desc} +This function constructs a MIME conform string including all the parameters associated with the given Content-Type object. It should NOT be used if you need an opaque copy of the current MIME part (e.g. for PGP purposes). \index{contenttype@{contenttype}!mm_content_setencoding@{mm\_\-content\_\-setencoding}} +\index{mm_content_setencoding@{mm\_\-content\_\-setencoding}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-setencoding (struct mm\_\-content $\ast$ {\em ct}, const char $\ast$ {\em encoding})}\label{group__contenttype_gea945e48ac5cca846715543634b9afe4} + + +Set the encoding of a MIME entitity according to a mapping table + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid content type object \item[{\em encoding}]A string representing the content encoding \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 if successfull or -1 if not (i.e. unknown content encoding) \end{Desc} +\index{contenttype@{contenttype}!mm_content_setmaintype@{mm\_\-content\_\-setmaintype}} +\index{mm_content_setmaintype@{mm\_\-content\_\-setmaintype}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-setmaintype (struct mm\_\-content $\ast$ {\em ct}, char $\ast$ {\em value}, int {\em copy})}\label{group__contenttype_g7bab273d117c6c0cacad20361d8fb1c8} + + +Sets the MIME main type for a MIME Content-Type object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]The MIME Content-Type object \item[{\em value}]The value which to set the main type to \item[{\em copy}]Whether to make a copy of the value (original value must be freed afterwards to prevent memory leaks). \end{description} +\end{Desc} + + +\begin{Desc} +\item[{\bf Bug}]The xfree() call could lead to undesirable results. Do we really need it? \end{Desc} +\index{contenttype@{contenttype}!mm_content_setsubtype@{mm\_\-content\_\-setsubtype}} +\index{mm_content_setsubtype@{mm\_\-content\_\-setsubtype}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-content\_\-setsubtype (struct mm\_\-content $\ast$ {\em ct}, char $\ast$ {\em value}, int {\em copy})}\label{group__contenttype_g14b0738410d566ad2312405946f22212} + + +Sets the MIME sub type for a MIME Content-Type object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]The MIME Content-Type object \item[{\em value}]The value which to set the sub type to \item[{\em copy}]Whether to make a copy of the value (original value must be freed afterwards to prevent memory leaks). \end{description} +\end{Desc} + + +\begin{Desc} +\item[{\bf Bug}]The xfree() call could lead to undesirable results. Do we really need it? \end{Desc} +\index{contenttype@{contenttype}!mm_content_tostring@{mm\_\-content\_\-tostring}} +\index{mm_content_tostring@{mm\_\-content\_\-tostring}!contenttype@{contenttype}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-content\_\-tostring (struct mm\_\-content $\ast$ {\em ct})}\label{group__contenttype_g18a99c95e35a76f13a77a83c4231e738} + + +Creates a Content-Type header according to the object given + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ct}]A valid Content-Type object \end{description} +\end{Desc} diff --git a/main/minimime/mm-docs/latex/group__context.tex b/main/minimime/mm-docs/latex/group__context.tex new file mode 100644 index 0000000000..aa28a7ba53 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__context.tex @@ -0,0 +1,214 @@ +\section{Accessing and manipulating MIME contexts} +\label{group__context}\index{Accessing and manipulating MIME contexts@{Accessing and manipulating MIME contexts}} +\subsection*{Manipulating Mini\-MIME contexts} +\begin{CompactItemize} +\item +MM\_\-CTX $\ast$ {\bf mm\_\-context\_\-new} (void) +\item +void {\bf mm\_\-context\_\-free} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-attachpart} (MM\_\-CTX $\ast$ctx, struct mm\_\-mimepart $\ast$part) +\item +int {\bf mm\_\-context\_\-attachpart\_\-after} (MM\_\-CTX $\ast$ctx, struct mm\_\-mimepart $\ast$part, int pos) +\item +int {\bf mm\_\-context\_\-deletepart} (MM\_\-CTX $\ast$ctx, int which, int freemem) +\item +int {\bf mm\_\-context\_\-countparts} (MM\_\-CTX $\ast$ctx) +\item +mm\_\-mimepart $\ast$ {\bf mm\_\-context\_\-getpart} (MM\_\-CTX $\ast$ctx, int which) +\item +int {\bf mm\_\-context\_\-iscomposite} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-haswarnings} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-generateboundary} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-setpreamble} (MM\_\-CTX $\ast$ctx, char $\ast$preamble) +\item +char $\ast$ \textbf{mm\_\-context\_\-getpreamble} (MM\_\-CTX $\ast$ctx)\label{group__context_g1ebbdd51106ccdee77ca421f9692bde7} + +\item +int {\bf mm\_\-context\_\-flatten} (MM\_\-CTX $\ast$ctx, char $\ast$$\ast$flat, size\_\-t $\ast$length, int flags) +\end{CompactItemize} + + +\subsection{Detailed Description} +Each message in Mini\-MIME is represented by a so called ``context''. A context holds all necessary information given about a MIME message, such as the envelope, all MIME parts etc. + +\subsection{Function Documentation} +\index{context@{context}!mm_context_attachpart@{mm\_\-context\_\-attachpart}} +\index{mm_context_attachpart@{mm\_\-context\_\-attachpart}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-attachpart (MM\_\-CTX $\ast$ {\em ctx}, struct mm\_\-mimepart $\ast$ {\em part})}\label{group__context_gec3ca486a61b392ff68774242086768e} + + +Attaches a MIME part object to a Mini\-MIME context. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]the Mini\-MIME context \item[{\em part}]the MIME part object to attach \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure. Sets mm\_\-errno on failure.\end{Desc} +This function attaches a MIME part to a context, appending it to the end of the message. + +The MIME part should be initialized before attaching it using \doxyref{mm\_\-mimepart\_\-new()}{p.}{group__mimepart_g417e5dd361e30cddb91e1d9a5e30b223}. \index{context@{context}!mm_context_attachpart_after@{mm\_\-context\_\-attachpart\_\-after}} +\index{mm_context_attachpart_after@{mm\_\-context\_\-attachpart\_\-after}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-attachpart\_\-after (MM\_\-CTX $\ast$ {\em ctx}, struct mm\_\-mimepart $\ast$ {\em part}, int {\em pos})}\label{group__context_g73a3dd187053aeabca4836dc28a6c468} + + +Attaches a MIME part object to a Mini\-MIME context at a given position + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \item[{\em part}]The MIME part object to attach \item[{\em pos}]After which part to attach the object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 if the given position is invalid \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-context\_\-attachpart}{p.}{group__context_gec3ca486a61b392ff68774242086768e}\end{Desc} +This function attaches a MIME part object after a given position in the specified context. If the position is invalid (out of range), the part will not get attached to the message and the function returns -1. If the index was in range, the MIME part will get attached after the MIME part at the given position, moving any possible following MIME parts one down the hierarchy. \index{context@{context}!mm_context_countparts@{mm\_\-context\_\-countparts}} +\index{mm_context_countparts@{mm\_\-context\_\-countparts}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-countparts (MM\_\-CTX $\ast$ {\em ctx})}\label{group__context_gf5bb032ad1c481d31d7b1b0710939712} + + +Counts the number of attached MIME part objects in a given Mini\-MIME context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]The Mini\-MIME context \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The number of attached MIME part objects \end{Desc} +\index{context@{context}!mm_context_deletepart@{mm\_\-context\_\-deletepart}} +\index{mm_context_deletepart@{mm\_\-context\_\-deletepart}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-deletepart (MM\_\-CTX $\ast$ {\em ctx}, int {\em which}, int {\em freemem})}\label{group__context_g53d20c33a401539ef1ffa45f3dddb983} + + +Deletes a MIME part object from a Mini\-MIME context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context object \item[{\em which}]The number of the MIME part object to delete \item[{\em freemem}]Whether to free the memory associated with the MIME part object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure. Sets mm\_\-errno on failure.\end{Desc} +This function deletes a MIME part from a given context. The MIME part to delete is specified as numerical index by the parameter ``which''. If the parameter ``freemem'' is set to anything greater than 0, the memory that is associated will be free'd by using \doxyref{mm\_\-mimepart\_\-free()}{p.}{group__mimepart_gbf47790a0bb96b22bc5e236bc40cb32e}, otherwise the memory is left untouched (if you still have a pointer to the MIME part around). \index{context@{context}!mm_context_flatten@{mm\_\-context\_\-flatten}} +\index{mm_context_flatten@{mm\_\-context\_\-flatten}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-flatten (MM\_\-CTX $\ast$ {\em ctx}, char $\ast$$\ast$ {\em flat}, size\_\-t $\ast$ {\em length}, int {\em flags})}\label{group__context_g5288136ab923605f6508c09359ae5772} + + +Creates an ASCII message of the specified context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context object \item[{\em flat}]Where to store the message \item[{\em flags}]Flags that affect the flattening process\end{description} +\end{Desc} +This function ``flattens'' a Mini\-MIME context, that is, it creates an ASCII represantation of the message the context contains. The flags can be a bitwise combination of the following constants: + +\begin{itemize} +\item MM\_\-FLATTEN\_\-OPAQUE : use opaque MIME parts when flattening\item MM\_\-FLATTEN\_\-SKIPENVELOPE : do not flatten the envelope part\end{itemize} + + +Great care is taken to not produce invalid MIME output. \index{context@{context}!mm_context_free@{mm\_\-context\_\-free}} +\index{mm_context_free@{mm\_\-context\_\-free}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-context\_\-free (MM\_\-CTX $\ast$ {\em ctx})}\label{group__context_g76392d5269e9ef340c2f5f8336f7193b} + + +Releases a Mini\-MIME context object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \end{description} +\end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-context\_\-new}{p.}{group__context_g919fd41f85534d9c87c256857faa2610}\end{Desc} +This function releases all memory associated with Mini\-MIME context object that was created using \doxyref{mm\_\-context\_\-new()}{p.}{group__context_g919fd41f85534d9c87c256857faa2610}. It will also release all memory used for the MIME parts attached, and their specific properties (such as Content-Type information, headers, and the body data). \index{context@{context}!mm_context_generateboundary@{mm\_\-context\_\-generateboundary}} +\index{mm_context_generateboundary@{mm\_\-context\_\-generateboundary}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-generateboundary (MM\_\-CTX $\ast$ {\em ctx})}\label{group__context_g9710e485f51167099d90f0d659979068} + + +Generates a generic boundary string for a given context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure\end{Desc} +This function generates a default boundary string for the given context. If there is already a boundary for the context, the memory will be free()'d. \index{context@{context}!mm_context_getpart@{mm\_\-context\_\-getpart}} +\index{mm_context_getpart@{mm\_\-context\_\-getpart}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimepart$\ast$ mm\_\-context\_\-getpart (MM\_\-CTX $\ast$ {\em ctx}, int {\em which})}\label{group__context_g57fea229675f3e56a77eb40bb8193ee3} + + +Gets a specified MIME part object from a Mime\-MIME context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]The Mini\-MIME context \item[{\em which}]The number of the MIME part object to retrieve \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The requested MIME part object on success or a NULL pointer if there is no such part. \end{Desc} +\index{context@{context}!mm_context_haswarnings@{mm\_\-context\_\-haswarnings}} +\index{mm_context_haswarnings@{mm\_\-context\_\-haswarnings}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-haswarnings (MM\_\-CTX $\ast$ {\em ctx})}\label{group__context_g8733dee7d83d3205349a7ee4ee5b2750} + + +Checks whether there are any warnings associated with a given context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if there are warnings associated with the context, otherwise 0 \end{Desc} +\index{context@{context}!mm_context_iscomposite@{mm\_\-context\_\-iscomposite}} +\index{mm_context_iscomposite@{mm\_\-context\_\-iscomposite}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-iscomposite (MM\_\-CTX $\ast$ {\em ctx})}\label{group__context_g1e73cadba4acd3ef9dd148dd0c2c3e70} + + +Checks whether a given context represents a composite (multipart) message + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]1 if the context is a composite message or 0 if it's flat \end{Desc} +\index{context@{context}!mm_context_new@{mm\_\-context\_\-new}} +\index{mm_context_new@{mm\_\-context\_\-new}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}MM\_\-CTX$\ast$ mm\_\-context\_\-new (void)}\label{group__context_g919fd41f85534d9c87c256857faa2610} + + +Creates a new Mini\-MIME context object. + +\begin{Desc} +\item[Returns:]a new Mini\-MIME context object \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-context\_\-free}{p.}{group__context_g76392d5269e9ef340c2f5f8336f7193b}\end{Desc} +This function creates a new Mini\-MIME context, which will hold a message. The memory needed is allocated dynamically and should later be free'd using \doxyref{mm\_\-context\_\-free()}{p.}{group__context_g76392d5269e9ef340c2f5f8336f7193b}. + +Before a context can be created, the Mini\-MIME library needs to be initialized properly using mm\_\-library\_\-init(). \index{context@{context}!mm_context_setpreamble@{mm\_\-context\_\-setpreamble}} +\index{mm_context_setpreamble@{mm\_\-context\_\-setpreamble}!context@{context}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-context\_\-setpreamble (MM\_\-CTX $\ast$ {\em ctx}, char $\ast$ {\em preamble})}\label{group__context_gc0e7cc297516618d4773830a1988fc8d} + + +Sets a preamble for the given Mini\-MIME context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \item[{\em preamble}]The preamble to set \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure\end{Desc} +This function sets the MIME preamble (the text between the end of envelope headers and the beginning of the first MIME part) for a given context object. If preamble is a NULL-pointer then the preamble will be deleted, and the currently associated memory will be free automagically. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/group__envelope.tex b/main/minimime/mm-docs/latex/group__envelope.tex new file mode 100644 index 0000000000..613c879487 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__envelope.tex @@ -0,0 +1,65 @@ +\section{Accessing and manipulating a message's envelope} +\label{group__envelope}\index{Accessing and manipulating a message's envelope@{Accessing and manipulating a message's envelope}} +\subsection*{Accessing and manipulating a message's envelope} +\begin{CompactItemize} +\item +int {\bf mm\_\-envelope\_\-getheaders} (MM\_\-CTX $\ast$ctx, char $\ast$$\ast$result, size\_\-t $\ast$length) +\item +int {\bf mm\_\-envelope\_\-setheader} (MM\_\-CTX $\ast$ctx, const char $\ast$name, const char $\ast$fmt,...) +\item +int {\bf mm\_\-envelope\_\-getrecipients} (MM\_\-CTX $\ast$ctx, char $\ast$$\ast$result, size\_\-t $\ast$length) +\end{CompactItemize} + + +\subsection{Function Documentation} +\index{envelope@{envelope}!mm_envelope_getheaders@{mm\_\-envelope\_\-getheaders}} +\index{mm_envelope_getheaders@{mm\_\-envelope\_\-getheaders}!envelope@{envelope}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-envelope\_\-getheaders (MM\_\-CTX $\ast$ {\em ctx}, char $\ast$$\ast$ {\em result}, size\_\-t $\ast$ {\em length})}\label{group__envelope_g38f1164142cedfc3253b068a81f85563} + + +Gets an ASCII representation of all envelope headers + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \item[{\em result}]Where to store the resulting ASCII headers \item[{\em length}]Where to store the length of the result \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure. \end{Desc} +\begin{Desc} +\item[Note:]Sets mm\_\-errno on failure\end{Desc} +This is mainly a convinience function. It constructs an ASCII representation from all of the message's envelope headers and stores the result in headers. Memory is allocated dynamically, and the total length of the result is stored in length. This function takes care that the output is MIME conform, and folds long lines according to the MIME standard at position 78 of the string. It also nicely formats all MIME related header fields, such as the Content-Type header. + +Since the memory needed to store the result is allocated dynamically, one should take care of freeing it again when it's not needed anymore. If an error occurs, $\ast$result will be set to NULL, $\ast$length will be set to zero and mm\_\-errno will be set to a reasonable value. \index{envelope@{envelope}!mm_envelope_getrecipients@{mm\_\-envelope\_\-getrecipients}} +\index{mm_envelope_getrecipients@{mm\_\-envelope\_\-getrecipients}!envelope@{envelope}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-envelope\_\-getrecipients (MM\_\-CTX $\ast$ {\em ctx}, char $\ast$$\ast$ {\em result}, size\_\-t $\ast$ {\em length})}\label{group__envelope_ge63da17c56867ca2406a4eaf73230baf} + + +Gets the list of recipients for a MIME message + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \item[{\em result}]Where to store the result \item[{\em length}]Where to store the length of the result \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on error \end{Desc} +\begin{Desc} +\item[Note:]Sets mm\_\-errno on error\end{Desc} +This functions gets the list of recipients for a given MIME message. It does so by concatenating the \char`\"{}From\char`\"{} and \char`\"{}Cc\char`\"{} header fields, and storing the results in recipients. The memory needed to store the result is allocated dynamically, and the total length of the result is stored in length. + +One should take care to free() the result once it's not needed anymore. \index{envelope@{envelope}!mm_envelope_setheader@{mm\_\-envelope\_\-setheader}} +\index{mm_envelope_setheader@{mm\_\-envelope\_\-setheader}!envelope@{envelope}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-envelope\_\-setheader (MM\_\-CTX $\ast$ {\em ctx}, const char $\ast$ {\em name}, const char $\ast$ {\em fmt}, {\em ...})}\label{group__envelope_gb2c43c1645e42ae0860c902ce1dda788} + + +Sets a header field in the envelope + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context \item[{\em name}]The name of the header field to set \item[{\em fmt}]A format string specifying the value of the header field \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure\end{Desc} +This function generates a new MIME header and attaches it to the first MIME part (the envelope) found in the given context. If no part is attached already, the function will return an error. The function will store a copy of ``name'' as the header's name field, and dynamically allocate the memory needed to build the format string. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/group__error.tex b/main/minimime/mm-docs/latex/group__error.tex new file mode 100644 index 0000000000..c9c49034e4 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__error.tex @@ -0,0 +1,43 @@ +\section{Mini\-MIME error functions} +\label{group__error}\index{MiniMIME error functions@{MiniMIME error functions}} +\subsection*{Functions} +\begin{CompactItemize} +\item +void {\bf mm\_\-error\_\-init} (void) +\item +void {\bf mm\_\-error\_\-setmsg} (const char $\ast$fmt,...) +\item +char $\ast$ {\bf mm\_\-error\_\-string} (void) +\end{CompactItemize} + + +\subsection{Function Documentation} +\index{error@{error}!mm_error_init@{mm\_\-error\_\-init}} +\index{mm_error_init@{mm\_\-error\_\-init}!error@{error}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-error\_\-init (void)}\label{group__error_g69de7c9bee1d535593a55807590de543} + + +Initializes the global error object + +This function initializes the global error object mm\_\-error. This must be done when the library is initialized, and is automatically called from mm\_\-init\_\-library(). \index{error@{error}!mm_error_setmsg@{mm\_\-error\_\-setmsg}} +\index{mm_error_setmsg@{mm\_\-error\_\-setmsg}!error@{error}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-error\_\-setmsg (const char $\ast$ {\em fmt}, {\em ...})}\label{group__error_g92006c97728639d8f32f5bc4c6e2a47f} + + +Sets a descriptive error message + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em fmt}]The error message as format string\end{description} +\end{Desc} +This function is called from the various Mini\-MIME modules in case an error occured. Should never be called by the user. \index{error@{error}!mm_error_string@{mm\_\-error\_\-string}} +\index{mm_error_string@{mm\_\-error\_\-string}!error@{error}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-error\_\-string (void)}\label{group__error_g8654857a3ac349b87d798902912371a3} + + +Retrieves the current error message + +\begin{Desc} +\item[Returns:]The currently set error message\end{Desc} +This function can be used to retrieve a descriptive error message for the current error, much like strerror() function of libc. When this function is called without an error being set, it returns the string \char`\"{}No error\char`\"{}. The string returned does not need to be freed, since it is not dynamically allocated by the library. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/group__mimepart.tex b/main/minimime/mm-docs/latex/group__mimepart.tex new file mode 100644 index 0000000000..e9f9742d96 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__mimepart.tex @@ -0,0 +1,333 @@ +\section{Accessing and manipulating MIME parts} +\label{group__mimepart}\index{Accessing and manipulating MIME parts@{Accessing and manipulating MIME parts}} +\subsection*{Creating and destroying MIME parts} +\begin{CompactItemize} +\item +mm\_\-mimepart $\ast$ {\bf mm\_\-mimepart\_\-new} (void) +\item +mm\_\-mimepart $\ast$ {\bf mm\_\-mimepart\_\-fromfile} (const char $\ast$filename) +\item +void {\bf mm\_\-mimepart\_\-free} (struct mm\_\-mimepart $\ast$part) +\end{CompactItemize} +\subsection*{Accessing the MIME part's mail header} +\begin{CompactItemize} +\item +int {\bf mm\_\-mimepart\_\-attachheader} (struct mm\_\-mimepart $\ast$part, struct mm\_\-mimeheader $\ast$header) +\item +int {\bf mm\_\-mimepart\_\-countheaders} (struct mm\_\-mimepart $\ast$part) +\item +int {\bf mm\_\-mimepart\_\-countheaderbyname} (struct mm\_\-mimepart $\ast$part, const char $\ast$name) +\item +mm\_\-mimeheader $\ast$ {\bf mm\_\-mimepart\_\-getheaderbyname} (struct mm\_\-mimepart $\ast$part, const char $\ast$name, int idx) +\item +const char $\ast$ {\bf mm\_\-mimepart\_\-getheadervalue} (struct mm\_\-mimepart $\ast$part, const char $\ast$name, int idx) +\item +int {\bf mm\_\-mimepart\_\-headers\_\-start} (struct mm\_\-mimepart $\ast$part, struct mm\_\-mimeheader $\ast$$\ast$id) +\item +mm\_\-mimeheader $\ast$ {\bf mm\_\-mimepart\_\-headers\_\-next} (struct mm\_\-mimepart $\ast$part, struct mm\_\-mimeheader $\ast$$\ast$id) +\end{CompactItemize} +\subsection*{Accessing and manipulating the MIME part's body} +\begin{CompactItemize} +\item +char $\ast$ {\bf mm\_\-mimepart\_\-getbody} (struct mm\_\-mimepart $\ast$part, int opaque) +\item +void {\bf mm\_\-mimepart\_\-setbody} (struct mm\_\-mimepart $\ast$part, const char $\ast$data, int opaque) +\item +size\_\-t {\bf mm\_\-mimepart\_\-getlength} (struct mm\_\-mimepart $\ast$part) +\item +char $\ast$ {\bf mm\_\-mimepart\_\-decode} (struct mm\_\-mimepart $\ast$part) +\item +int {\bf mm\_\-mimepart\_\-flatten} (struct mm\_\-mimepart $\ast$part, char $\ast$$\ast$result, size\_\-t $\ast$length, int opaque) +\item +int {\bf mm\_\-mimepart\_\-setdefaultcontenttype} (struct mm\_\-mimepart $\ast$part, int composite) +\end{CompactItemize} +\subsection*{Accessing the MIME part's Content-Type information} +\begin{CompactItemize} +\item +void {\bf mm\_\-mimepart\_\-attachcontenttype} (struct mm\_\-mimepart $\ast$part, struct mm\_\-content $\ast$ct) +\item +mm\_\-content $\ast$ {\bf mm\_\-mimepart\_\-gettype} (struct mm\_\-mimepart $\ast$part) +\end{CompactItemize} + + +\subsection{Detailed Description} +MIME parts, also called entities, represent the structure of a MIME message. ``Normal'' internet messages have only a single part, and are called ``flat'' messages. Multipart messages have more then one part, and each MIME part can have it's own subset of headers. + +Provided here are functions to easily access all informations from a MIME part, including their specific headers and bodies. + +\subsection{Function Documentation} +\index{mimepart@{mimepart}!mm_mimepart_attachcontenttype@{mm\_\-mimepart\_\-attachcontenttype}} +\index{mm_mimepart_attachcontenttype@{mm\_\-mimepart\_\-attachcontenttype}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-mimepart\_\-attachcontenttype (struct mm\_\-mimepart $\ast$ {\em part}, struct mm\_\-content $\ast$ {\em ct})}\label{group__mimepart_g01822bc93b4741af75b5379384354e37} + + +Attaches a context type object to a MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em ct}]The content type object to attach \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]Nothing\end{Desc} +This function attaches a Content-Type object to a MIME part. It does not care whether the Content-Type suites the actual content in the MIME part, so the programmer should take care of that. \index{mimepart@{mimepart}!mm_mimepart_attachheader@{mm\_\-mimepart\_\-attachheader}} +\index{mm_mimepart_attachheader@{mm\_\-mimepart\_\-attachheader}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimepart\_\-attachheader (struct mm\_\-mimepart $\ast$ {\em part}, struct mm\_\-mimeheader $\ast$ {\em header})}\label{group__mimepart_g46a674ff6b9873c0c45fa4eb5d94fd62} + + +Attaches a mm\_\-mimeheader object to a MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em header}]A valid MIME header object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 if successfull or -1 if the header could not be attached \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_countheaderbyname@{mm\_\-mimepart\_\-countheaderbyname}} +\index{mm_mimepart_countheaderbyname@{mm\_\-mimepart\_\-countheaderbyname}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimepart\_\-countheaderbyname (struct mm\_\-mimepart $\ast$ {\em part}, const char $\ast$ {\em name})}\label{group__mimepart_gf89da502ac54306994bdb452448a8026} + + +Retrieves the number of MIME headers with a given name in a MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em name}]The name of the MIME header which to count for \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The number of MIME headers within the MIME part \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_countheaders@{mm\_\-mimepart\_\-countheaders}} +\index{mm_mimepart_countheaders@{mm\_\-mimepart\_\-countheaders}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimepart\_\-countheaders (struct mm\_\-mimepart $\ast$ {\em part})}\label{group__mimepart_g44c78abfb0535312bcb427a2cd220026} + + +Retrieves the number of MIME headers available in a MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The number of MIME headers within the MIME part \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_decode@{mm\_\-mimepart\_\-decode}} +\index{mm_mimepart_decode@{mm\_\-mimepart\_\-decode}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-mimepart\_\-decode (struct mm\_\-mimepart $\ast$ {\em part})}\label{group__mimepart_g4551bf4460e5d165bbcd9f32d4f625de} + + +Decodes a MIME part according to it's encoding using Mini\-MIME codecs + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em A}]valid MIME part object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 if the MIME part could be successfully decoded or -1 if not \end{Desc} +\begin{Desc} +\item[Note:]Sets mm\_\-errno on error\end{Desc} +This function decodes the body of a MIME part with a registered decoder according to it's Content-Transfer-Encoding header field. \index{mimepart@{mimepart}!mm_mimepart_flatten@{mm\_\-mimepart\_\-flatten}} +\index{mm_mimepart_flatten@{mm\_\-mimepart\_\-flatten}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimepart\_\-flatten (struct mm\_\-mimepart $\ast$ {\em part}, char $\ast$$\ast$ {\em result}, size\_\-t $\ast$ {\em length}, int {\em opaque})}\label{group__mimepart_gf19d3ace5ae174b3eaa35f9ddbe6e216} + + +Creates an ASCII representation of the given MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em result}]Where to store the result \item[{\em length}]Where to store the length of the result \item[{\em opaque}]Whether to use the opaque MIME part 0 on success or -1 on error. \end{description} +\end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-context\_\-flatten}{p.}{group__context_g5288136ab923605f6508c09359ae5772}\end{Desc} +This function creates an ASCII representation of a given MIME part. It will dynamically allocate the memory needed and stores the result in the memory region pointed to by result. The length of the result will be stored in length. If opaque is set to 1, mm\_\-mimepart\_\-flatten will store an opaque version of the MIME part in result, which means no headers will be created or sanitized. This is particulary useful if the part is digitally signed by e.g. PGP, and the signature spans the header fields of the part in question. \index{mimepart@{mimepart}!mm_mimepart_free@{mm\_\-mimepart\_\-free}} +\index{mm_mimepart_free@{mm\_\-mimepart\_\-free}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-mimepart\_\-free (struct mm\_\-mimepart $\ast$ {\em part})}\label{group__mimepart_gbf47790a0bb96b22bc5e236bc40cb32e} + + +Frees all memory allocated by a mm\_\-mimepart object. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A pointer to an allocated mm\_\-mimepart object \end{description} +\end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimepart\_\-new}{p.}{group__mimepart_g417e5dd361e30cddb91e1d9a5e30b223} \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_fromfile@{mm\_\-mimepart\_\-fromfile}} +\index{mm_mimepart_fromfile@{mm\_\-mimepart\_\-fromfile}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimepart$\ast$ mm\_\-mimepart\_\-fromfile (const char $\ast$ {\em filename})}\label{group__mimepart_ged8112012a337371ae8093adb1ab6d27} + + +Creates a MIME part from a file + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em filename}]The name of the file to create the MIME part from \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to a new MIME part object\end{Desc} +This function creates a new MIME part object from a file. The object should be freed using \doxyref{mm\_\-mimepart\_\-free()}{p.}{group__mimepart_gbf47790a0bb96b22bc5e236bc40cb32e} later on. This function does NOT set the Content-Type and neither does any encoding work. \index{mimepart@{mimepart}!mm_mimepart_getbody@{mm\_\-mimepart\_\-getbody}} +\index{mm_mimepart_getbody@{mm\_\-mimepart\_\-getbody}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-mimepart\_\-getbody (struct mm\_\-mimepart $\ast$ {\em part}, int {\em opaque})}\label{group__mimepart_g52dc9f27a2801e4f6abb1effd2ed838d} + + +Gets the pointer to the MIME part's body data + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em opaque}]Whether to get the opaque part or not \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the MIME part's body \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimepart\_\-setbody}{p.}{group__mimepart_gd1def098c00edc546b03e98e9ff8b27a} \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_getheaderbyname@{mm\_\-mimepart\_\-getheaderbyname}} +\index{mm_mimepart_getheaderbyname@{mm\_\-mimepart\_\-getheaderbyname}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimeheader$\ast$ mm\_\-mimepart\_\-getheaderbyname (struct mm\_\-mimepart $\ast$ {\em part}, const char $\ast$ {\em name}, int {\em idx})}\label{group__mimepart_ga3ca298eaa82f4ef3ea731511ac84e53} + + +Get a MIME header object from a MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em name}]The name of the MIME header which to retrieve \item[{\em idx}]Which header field to get (in case of multiple headers of the same name). \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the requested MIME header on success, or NULL if there either isn't a header with the requested name or idx is out of range. \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_getheadervalue@{mm\_\-mimepart\_\-getheadervalue}} +\index{mm_mimepart_getheadervalue@{mm\_\-mimepart\_\-getheadervalue}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ mm\_\-mimepart\_\-getheadervalue (struct mm\_\-mimepart $\ast$ {\em part}, const char $\ast$ {\em name}, int {\em idx})}\label{group__mimepart_g779f11f7a6a54f83763b5ef6ff87e48f} + + +Gets the value of a MIME header object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em name}]The name of the header field to get the value from \item[{\em idx}]The index of the header field to get, in case there are multiple headers with the same name. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the requested value on success, or NULL if there either isn't a header with the requested name or idx is out of range. \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_getlength@{mm\_\-mimepart\_\-getlength}} +\index{mm_mimepart_getlength@{mm\_\-mimepart\_\-getlength}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mm\_\-mimepart\_\-getlength (struct mm\_\-mimepart $\ast$ {\em part})}\label{group__mimepart_gf8ccae1737dc4b9b91958fe448da677f} + + +Gets the length of a given MIME part object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The size of the part's body in byte.\end{Desc} +This function returns the total length of the given MIME part's body. The length does not include the headers of the MIME parts. If the function returns 0, no body part is set currently. \index{mimepart@{mimepart}!mm_mimepart_gettype@{mm\_\-mimepart\_\-gettype}} +\index{mm_mimepart_gettype@{mm\_\-mimepart\_\-gettype}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-content$\ast$ mm\_\-mimepart\_\-gettype (struct mm\_\-mimepart $\ast$ {\em part})}\label{group__mimepart_g210e2ceee56f8349f6778006da87d080} + + +Gets the Content-Type of a given MIME part object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The Content-Type object of the specified MIME part\end{Desc} +This function returns a pointer to the Content-Type object of the given MIME part. This pointer might be set to NULL, indicating that there is no Content-Type object for the given MIME part currently. \index{mimepart@{mimepart}!mm_mimepart_headers_next@{mm\_\-mimepart\_\-headers\_\-next}} +\index{mm_mimepart_headers_next@{mm\_\-mimepart\_\-headers\_\-next}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimeheader$\ast$ mm\_\-mimepart\_\-headers\_\-next (struct mm\_\-mimepart $\ast$ {\em part}, struct mm\_\-mimeheader $\ast$$\ast$ {\em id})}\label{group__mimepart_g8e9064736efdeebf4b257cc45f8a6adf} + + +Returns the next MIME header of a given MIME part object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em id}]A previously initialized MIME header object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the MIME header object or NULL if end of headers was reached. \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimepart\_\-headers\_\-start}{p.}{group__mimepart_g4440bdcfddf88eb642b6a834a0557176} \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_headers_start@{mm\_\-mimepart\_\-headers\_\-start}} +\index{mm_mimepart_headers_start@{mm\_\-mimepart\_\-headers\_\-start}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimepart\_\-headers\_\-start (struct mm\_\-mimepart $\ast$ {\em part}, struct mm\_\-mimeheader $\ast$$\ast$ {\em id})}\label{group__mimepart_g4440bdcfddf88eb642b6a834a0557176} + + +Initializes a header loop for a given MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em id}]The address of a MIME header object (to allow reentrance) \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimepart\_\-headers\_\-next}{p.}{group__mimepart_g8e9064736efdeebf4b257cc45f8a6adf}\end{Desc} +Looping through headers can be done in the following way: + + + +\begin{Code}\begin{verbatim} struct mm_mimeheader *header, *lheader; + + mm_mimepart_headers_start(part, &lheader); + + while ((header = mm_mimepart_headers_next(part, &lheader)) != NULL) { + printf("%s: %s\n", header->name, header->value); + } +\end{verbatim}\end{Code} + + + +For convienience, the macro mm\_\-mimepart\_\-headers\_\-foreach() can be used to loop through headers in a one-shot manner. \index{mimepart@{mimepart}!mm_mimepart_new@{mm\_\-mimepart\_\-new}} +\index{mm_mimepart_new@{mm\_\-mimepart\_\-new}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimepart$\ast$ mm\_\-mimepart\_\-new (void)}\label{group__mimepart_g417e5dd361e30cddb91e1d9a5e30b223} + + +Allocates memory for a new mm\_\-mimepart structure and initializes it. + +\begin{Desc} +\item[Returns:]A pointer to a struct of type mm\_\-mimeheader or NULL on failure \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimepart\_\-free}{p.}{group__mimepart_gbf47790a0bb96b22bc5e236bc40cb32e} \end{Desc} +\begin{Desc} +\item[Note:]The memory must be freed by using \doxyref{mm\_\-mimepart\_\-free()}{p.}{group__mimepart_gbf47790a0bb96b22bc5e236bc40cb32e} later on. \end{Desc} +\index{mimepart@{mimepart}!mm_mimepart_setbody@{mm\_\-mimepart\_\-setbody}} +\index{mm_mimepart_setbody@{mm\_\-mimepart\_\-setbody}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-mimepart\_\-setbody (struct mm\_\-mimepart $\ast$ {\em part}, const char $\ast$ {\em data}, int {\em opaque})}\label{group__mimepart_gd1def098c00edc546b03e98e9ff8b27a} + + +Sets the MIME part's body data + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em data}]A pointer to the data which to set \end{description} +\end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimepart\_\-getbody}{p.}{group__mimepart_g52dc9f27a2801e4f6abb1effd2ed838d}\end{Desc} +This functions sets the body data for a given MIME part. The string pointed to by data must be NUL-terminated. The data is copied into the MIME part's body, and thus, the memory pointed to by data can be freed after the operation. \index{mimepart@{mimepart}!mm_mimepart_setdefaultcontenttype@{mm\_\-mimepart\_\-setdefaultcontenttype}} +\index{mm_mimepart_setdefaultcontenttype@{mm\_\-mimepart\_\-setdefaultcontenttype}!mimepart@{mimepart}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimepart\_\-setdefaultcontenttype (struct mm\_\-mimepart $\ast$ {\em part}, int {\em composite})}\label{group__mimepart_g164bb39a266559574c252f11266809ff} + + +Sets the default Content-Type for a given MIME part + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em part}]A valid MIME part object \item[{\em part}]Whether the Content-Type should be for composite or not \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure\end{Desc} +This function sets a default Content-Type according to RFC 2045 with a value of \char`\"{}text/plain; charset=\char`\"{}us-ascii\char`\"{}\char`\"{}. This function should only be used if the MIME part in question does not have a valid Content-Type specification. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/group__mimeutil.tex b/main/minimime/mm-docs/latex/group__mimeutil.tex new file mode 100644 index 0000000000..6de2599760 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__mimeutil.tex @@ -0,0 +1,2 @@ +\section{MIME related utility functions} +\label{group__mimeutil}\index{MIME related utility functions@{MIME related utility functions}} diff --git a/main/minimime/mm-docs/latex/group__param.tex b/main/minimime/mm-docs/latex/group__param.tex new file mode 100644 index 0000000000..320dd398cb --- /dev/null +++ b/main/minimime/mm-docs/latex/group__param.tex @@ -0,0 +1,127 @@ +\section{Accessing and manipulating MIME parameters} +\label{group__param}\index{Accessing and manipulating MIME parameters@{Accessing and manipulating MIME parameters}} +\subsection*{Functions for manipulating MIME parameters} +MIME parameters are properties attached to certain MIME headers, such as Content-Type and Content-Disposition. MIME parameters have a textual representations as in {\em name=value\/}. They contain important information about the MIME structure of a message, such as the boundary string used, which charset was used to encode the message and so on. This module provides simple to use functions to query or set MIME parameters. + +Each MIME header may hold an arbitrary amount of such parameters, which are delimeted by each other with a semicolon. \begin{CompactItemize} +\item +mm\_\-param $\ast$ {\bf mm\_\-param\_\-new} (void) +\item +void {\bf mm\_\-param\_\-free} (struct mm\_\-param $\ast$param) +\item +mm\_\-param $\ast$ {\bf mm\_\-param\_\-generate} (const char $\ast$name, const char $\ast$value) +\item +char $\ast$ {\bf mm\_\-param\_\-setname} (struct mm\_\-param $\ast$param, const char $\ast$name, int copy) +\item +char $\ast$ {\bf mm\_\-param\_\-setvalue} (struct mm\_\-param $\ast$param, const char $\ast$value, int copy) +\item +const char $\ast$ {\bf mm\_\-param\_\-getname} (struct mm\_\-param $\ast$param) +\item +const char $\ast$ {\bf mm\_\-param\_\-getvalue} (struct mm\_\-param $\ast$param) +\end{CompactItemize} + + +\subsection{Function Documentation} +\index{param@{param}!mm_param_free@{mm\_\-param\_\-free}} +\index{mm_param_free@{mm\_\-param\_\-free}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-param\_\-free (struct mm\_\-param $\ast$ {\em param})}\label{group__param_g46339038e995799e6a3e37512f442fc9} + + +Releases all memory associated with a MIME parameter object. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em param}]A valid MIME parameter object to be freed \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]Nothing \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-param\_\-new}{p.}{group__param_gd3ac756551bf5a29a07d5992bfdbde09} \end{Desc} +\index{param@{param}!mm_param_generate@{mm\_\-param\_\-generate}} +\index{mm_param_generate@{mm\_\-param\_\-generate}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-param$\ast$ mm\_\-param\_\-generate (const char $\ast$ {\em name}, const char $\ast$ {\em value})}\label{group__param_gd3970def45b8bede334f4b89a41dec15} + + +Generates a new Content-Type parameter with the given name and value + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em name}]The name of the MIME parameter \item[{\em value}]The value of the MIME parameter \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A new MIME parameter object \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-param\_\-free}{p.}{group__param_g46339038e995799e6a3e37512f442fc9} + +\doxyref{mm\_\-param\_\-new}{p.}{group__param_gd3ac756551bf5a29a07d5992bfdbde09}\end{Desc} +This function generates a new MIME parameter, with the name and value given as the arguments. The needed memory for the operation is allocated dynamically. It stores a copy of name and value in the actual object, so the memory holding the arguments can safely be freed after successfull return of this function. \index{param@{param}!mm_param_getname@{mm\_\-param\_\-getname}} +\index{mm_param_getname@{mm\_\-param\_\-getname}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ mm\_\-param\_\-getname (struct mm\_\-param $\ast$ {\em param})}\label{group__param_g0e0ddccf47a2b1e0ad5bcc52c7b39753} + + +Gets the name of a MIME parameter object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em param}]A valid MIME parameter object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The name of the MIME parameter \end{Desc} +\index{param@{param}!mm_param_getvalue@{mm\_\-param\_\-getvalue}} +\index{mm_param_getvalue@{mm\_\-param\_\-getvalue}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ mm\_\-param\_\-getvalue (struct mm\_\-param $\ast$ {\em param})}\label{group__param_g3c6f8cddd409de3000c31584e140561e} + + +Gets the value of a MIME parameter object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em param}]A valid MIME parameter object \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The value of the MIME parameter \end{Desc} +\index{param@{param}!mm_param_new@{mm\_\-param\_\-new}} +\index{mm_param_new@{mm\_\-param\_\-new}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-param$\ast$ mm\_\-param\_\-new (void)}\label{group__param_gd3ac756551bf5a29a07d5992bfdbde09} + + +Creates a new object to hold a MIME parameter. + +\begin{Desc} +\item[Returns:]An object representing a MIME parameter \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-param\_\-free}{p.}{group__param_g46339038e995799e6a3e37512f442fc9} \end{Desc} +\begin{Desc} +\item[Note:]The allocated memory must later be freed using \doxyref{mm\_\-param\_\-free()}{p.}{group__param_g46339038e995799e6a3e37512f442fc9} \end{Desc} +\index{param@{param}!mm_param_setname@{mm\_\-param\_\-setname}} +\index{mm_param_setname@{mm\_\-param\_\-setname}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-param\_\-setname (struct mm\_\-param $\ast$ {\em param}, const char $\ast$ {\em name}, int {\em copy})}\label{group__param_g2a266c63c7e89cf829b2af8e995e55e8} + + +Sets the name of the given MIME parameter + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em param}]A valid MIME parameter object \item[{\em name}]The new name of the parameter \item[{\em copy}]If set to $>$ 0, copy the value stored in name \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The address of the previous name for passing to free() \end{Desc} +\index{param@{param}!mm_param_setvalue@{mm\_\-param\_\-setvalue}} +\index{mm_param_setvalue@{mm\_\-param\_\-setvalue}!param@{param}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-param\_\-setvalue (struct mm\_\-param $\ast$ {\em param}, const char $\ast$ {\em value}, int {\em copy})}\label{group__param_gca3e636ab5700462eb32ca5bc19e4cc6} + + +Sets the value of the given MIME parameter + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em param}]A valid MIME parameter object \item[{\em name}]The new value for the parameter \item[{\em copy}]If set to $>$ 0, copy the value stored in value \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]The address of the previous value for passing to free() \end{Desc} diff --git a/main/minimime/mm-docs/latex/group__util.tex b/main/minimime/mm-docs/latex/group__util.tex new file mode 100644 index 0000000000..00a3c20da3 --- /dev/null +++ b/main/minimime/mm-docs/latex/group__util.tex @@ -0,0 +1,128 @@ +\section{General purpose utility functions} +\label{group__util}\index{General purpose utility functions@{General purpose utility functions}} +\subsection*{Utility functions} +\begin{CompactItemize} +\item +void \textbf{xfree} (void $\ast$)\label{group__util_g35c4383ff0dee2de18985e6edfed1ae6} + +\item +char $\ast$ \textbf{xstrdup} (const char $\ast$)\label{group__util_g2961ae74e91b0b28acdf9822438a581c} + +\end{CompactItemize} +\subsection*{Functions} +\begin{CompactItemize} +\item +void $\ast$ {\bf xmalloc} (size\_\-t size) +\item +void $\ast$ {\bf xrealloc} (void $\ast$p, size\_\-t size) +\item +char $\ast$ {\bf mm\_\-unquote} (const char $\ast$string) +\item +char $\ast$ {\bf mm\_\-uncomment} (const char $\ast$string) +\item +char $\ast$ {\bf xstrsep} (char $\ast$$\ast$stringp, const char $\ast$delim) +\item +char $\ast$ {\bf mm\_\-stripchars} (char $\ast$input, char $\ast$strip) +\item +char $\ast$ {\bf mm\_\-addchars} (char $\ast$input, char $\ast$add, u\_\-int16\_\-t linelength) +\end{CompactItemize} + + +\subsection{Function Documentation} +\index{util@{util}!mm_addchars@{mm\_\-addchars}} +\index{mm_addchars@{mm\_\-addchars}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-addchars (char $\ast$ {\em input}, char $\ast$ {\em add}, u\_\-int16\_\-t {\em linelength})}\label{group__util_g0747d4b4e33644263e6d73d2d8d4818b} + + +Adds characters to a string at given positions + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em input}]The string to which to add characters \item[{\em add}]The character string to add \item[{\em linelength}]The position where to add the character \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A copy of the string with characters added\end{Desc} +This function adds the characters add at each linelength positions and returns this new string. \index{util@{util}!mm_stripchars@{mm\_\-stripchars}} +\index{mm_stripchars@{mm\_\-stripchars}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-stripchars (char $\ast$ {\em input}, char $\ast$ {\em strip})}\label{group__util_gf62be7dd21e545f8db72f3c9e3b6a3c3} + + +Strips a given character set from a string + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em input}]The string which to strip \item[{\em strip}]The character set to strip off \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A copy of the original string with all chars stripped \end{Desc} +\index{util@{util}!mm_uncomment@{mm\_\-uncomment}} +\index{mm_uncomment@{mm\_\-uncomment}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-uncomment (const char $\ast$ {\em string})}\label{group__util_g49c016ff4cfd02f1b019c4dce5aac357} + + +Removes MIME comments from a string + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em string}]The string to uncomment \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the uncommented string or NULL on error. Sets mm\_\-errno.\end{Desc} +This function removes MIME comments from a string (included in parantheses). It returns a pointer to a newly allocated memory region in which the uncommented string is stored. The returned string needs to be freed when it's not used anymore. \index{util@{util}!mm_unquote@{mm\_\-unquote}} +\index{mm_unquote@{mm\_\-unquote}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ mm\_\-unquote (const char $\ast$ {\em string})}\label{group__util_gf0f89a29a634f6f1f833abb1e214a6b1} + + +Unquotes a string + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em string}]The quoted string to unquote \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the unquoted string\end{Desc} +This function unquotes a string. That is, it returns a pointer to a newly allocated memory region in which the unquoted string is stored. Only leading and trailing double-qoutes are removed. The string needs to be freed when it is not needed anymore. \index{util@{util}!xmalloc@{xmalloc}} +\index{xmalloc@{xmalloc}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ xmalloc (size\_\-t {\em size})}\label{group__util_g2ff4ef58da7e543466e75f20f2a2d8b7} + + +Allocates a block of memory + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em size}]The size of the memory region to allocate \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the allocated memory region\end{Desc} +\doxyref{xmalloc()}{p.}{group__util_g2ff4ef58da7e543466e75f20f2a2d8b7} calls abort() if either the size argument is negative or the requested memory amount could not be allocated via an assert() call. \index{util@{util}!xrealloc@{xrealloc}} +\index{xrealloc@{xrealloc}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ xrealloc (void $\ast$ {\em p}, size\_\-t {\em size})}\label{group__util_ge14637b4672461f1f0bee822406d68dc} + + +realloc() wrapper + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em p}]Pointer to a memory region which should be reallocated \item[{\em size}]The new size of the memory region \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the reallocated memory region\end{Desc} +\doxyref{xrealloc()}{p.}{group__util_ge14637b4672461f1f0bee822406d68dc} is a wrapper around realloc() which calls abort() if either the size argument is negative or the requested memory amount could not be allocated. \index{util@{util}!xstrsep@{xstrsep}} +\index{xstrsep@{xstrsep}!util@{util}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ xstrsep (char $\ast$$\ast$ {\em stringp}, const char $\ast$ {\em delim})}\label{group__util_g3ae25483c8a42f6562f2a916a511228f} + + +separate strings + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em stringp}]A pointer to the string being splitted \item[{\em delim}]The delimeter string\end{description} +\end{Desc} +This function works similar to strsep(), with the difference that delim is treated as a whole. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__codecs_8c.tex b/main/minimime/mm-docs/latex/mm__codecs_8c.tex new file mode 100644 index 0000000000..1dad6cf963 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__codecs_8c.tex @@ -0,0 +1,41 @@ +\section{mm\_\-codecs.c File Reference} +\label{mm__codecs_8c}\index{mm_codecs.c@{mm\_\-codecs.c}} +{\tt \#include $<$sys/types.h$>$}\par +{\tt \#include $<$sys/stat.h$>$}\par +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$unistd.h$>$}\par +{\tt \#include $<$fcntl.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +\subsection*{Functions} +\begin{Indent}{\bf Codec manipulation}\par +\begin{CompactItemize} +\item +int {\bf mm\_\-codec\_\-hasdecoder} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-hasencoder} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-isregistered} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-register} (const char $\ast$encoding, char $\ast$($\ast$encoder)(char $\ast$data, u\_\-int32\_\-t i), char $\ast$($\ast$decoder)(char $\ast$data)) +\item +int {\bf mm\_\-codec\_\-unregister} (const char $\ast$encoding) +\item +int {\bf mm\_\-codec\_\-unregisterall} (void) +\item +void {\bf mm\_\-codec\_\-registerdefaultcodecs} (void) +\end{CompactItemize} +\end{Indent} +\subsection*{Variables} +\begin{CompactItemize} +\item +mm\_\-codecs \textbf{codecs}\label{mm__codecs_8c_b669b6dc7c7d10408d8da81b3f1a30d3} + +\end{CompactItemize} + + +\subsection{Detailed Description} +This module contains functions to manipulate Mini\-MIME codecs \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__contenttype_8c.tex b/main/minimime/mm-docs/latex/mm__contenttype_8c.tex new file mode 100644 index 0000000000..71a88cf626 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__contenttype_8c.tex @@ -0,0 +1,61 @@ +\section{mm\_\-contenttype.c File Reference} +\label{mm__contenttype_8c}\index{mm_contenttype.c@{mm\_\-contenttype.c}} +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$stdarg.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$ctype.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +\subsection*{Data Structures} +\begin{CompactItemize} +\item +struct \textbf{mm\_\-encoding\_\-mappings} +\end{CompactItemize} +\subsection*{Functions} +\begin{Indent}{\bf Functions for manipulating Content-Type objects}\par +\begin{CompactItemize} +\item +mm\_\-content $\ast$ {\bf mm\_\-content\_\-new} (void) +\item +void {\bf mm\_\-content\_\-free} (struct mm\_\-content $\ast$ct) +\item +int {\bf mm\_\-content\_\-attachparam} (struct mm\_\-content $\ast$ct, struct mm\_\-param $\ast$param) +\item +char $\ast$ {\bf mm\_\-content\_\-getparambyname} (struct mm\_\-content $\ast$ct, const char $\ast$name) +\item +mm\_\-param $\ast$ \textbf{mm\_\-content\_\-getparamobjbyname} (struct mm\_\-content $\ast$ct, const char $\ast$name)\label{group__contenttype_g1ba63e679d2b49aceb6cfec8a6752581} + +\item +int {\bf mm\_\-content\_\-setmaintype} (struct mm\_\-content $\ast$ct, char $\ast$value, int copy) +\item +char $\ast$ {\bf mm\_\-content\_\-getmaintype} (struct mm\_\-content $\ast$ct) +\item +char $\ast$ {\bf mm\_\-content\_\-getsubtype} (struct mm\_\-content $\ast$ct) +\item +char $\ast$ \textbf{mm\_\-content\_\-gettype} (struct mm\_\-content $\ast$ct)\label{group__contenttype_ga6d8453eb35bd695c4944e53b7040b65} + +\item +int {\bf mm\_\-content\_\-setsubtype} (struct mm\_\-content $\ast$ct, char $\ast$value, int copy) +\item +int \textbf{mm\_\-content\_\-settype} (struct mm\_\-content $\ast$ct, const char $\ast$fmt,...)\label{group__contenttype_g878686678ea2ba97aa8edb1206a564d8} + +\item +int {\bf mm\_\-content\_\-iscomposite} (struct mm\_\-content $\ast$ct) +\item +int {\bf mm\_\-content\_\-isvalidencoding} (const char $\ast$encoding) +\item +int {\bf mm\_\-content\_\-setencoding} (struct mm\_\-content $\ast$ct, const char $\ast$encoding) +\item +int {\bf mm\_\-content\_\-getencoding} (struct mm\_\-content $\ast$ct, const char $\ast$encoding) +\item +char $\ast$ {\bf mm\_\-content\_\-paramstostring} (struct mm\_\-content $\ast$ct) +\item +char $\ast$ {\bf mm\_\-content\_\-tostring} (struct mm\_\-content $\ast$ct) +\end{CompactItemize} +\end{Indent} + + +\subsection{Detailed Description} +This module contains functions for manipulating Content-Type objects. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__context_8c.tex b/main/minimime/mm-docs/latex/mm__context_8c.tex new file mode 100644 index 0000000000..78ba141e57 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__context_8c.tex @@ -0,0 +1,44 @@ +\section{mm\_\-context.c File Reference} +\label{mm__context_8c}\index{mm_context.c@{mm\_\-context.c}} +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$stdarg.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +\subsection*{Functions} +\begin{Indent}{\bf Manipulating Mini\-MIME contexts}\par +\begin{CompactItemize} +\item +MM\_\-CTX $\ast$ {\bf mm\_\-context\_\-new} (void) +\item +void {\bf mm\_\-context\_\-free} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-attachpart} (MM\_\-CTX $\ast$ctx, struct mm\_\-mimepart $\ast$part) +\item +int {\bf mm\_\-context\_\-attachpart\_\-after} (MM\_\-CTX $\ast$ctx, struct mm\_\-mimepart $\ast$part, int pos) +\item +int {\bf mm\_\-context\_\-deletepart} (MM\_\-CTX $\ast$ctx, int which, int freemem) +\item +int {\bf mm\_\-context\_\-countparts} (MM\_\-CTX $\ast$ctx) +\item +mm\_\-mimepart $\ast$ {\bf mm\_\-context\_\-getpart} (MM\_\-CTX $\ast$ctx, int which) +\item +int {\bf mm\_\-context\_\-iscomposite} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-haswarnings} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-generateboundary} (MM\_\-CTX $\ast$ctx) +\item +int {\bf mm\_\-context\_\-setpreamble} (MM\_\-CTX $\ast$ctx, char $\ast$preamble) +\item +char $\ast$ \textbf{mm\_\-context\_\-getpreamble} (MM\_\-CTX $\ast$ctx)\label{group__context_g1ebbdd51106ccdee77ca421f9692bde7} + +\item +int {\bf mm\_\-context\_\-flatten} (MM\_\-CTX $\ast$ctx, char $\ast$$\ast$flat, size\_\-t $\ast$length, int flags) +\end{CompactItemize} +\end{Indent} + + +\subsection{Detailed Description} +Modules for manipulating Mini\-MIME contexts \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__envelope_8c.tex b/main/minimime/mm-docs/latex/mm__envelope_8c.tex new file mode 100644 index 0000000000..841a6b5501 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__envelope_8c.tex @@ -0,0 +1,25 @@ +\section{mm\_\-envelope.c File Reference} +\label{mm__envelope_8c}\index{mm_envelope.c@{mm\_\-envelope.c}} +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$stdarg.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$ctype.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +\subsection*{Functions} +\begin{Indent}{\bf Accessing and manipulating a message's envelope}\par +\begin{CompactItemize} +\item +int {\bf mm\_\-envelope\_\-getheaders} (MM\_\-CTX $\ast$ctx, char $\ast$$\ast$result, size\_\-t $\ast$length) +\item +int {\bf mm\_\-envelope\_\-setheader} (MM\_\-CTX $\ast$ctx, const char $\ast$name, const char $\ast$fmt,...) +\item +int {\bf mm\_\-envelope\_\-getrecipients} (MM\_\-CTX $\ast$ctx, char $\ast$$\ast$result, size\_\-t $\ast$length) +\end{CompactItemize} +\end{Indent} + + +\subsection{Detailed Description} +This module contains functions for accessing a message's envelope. This are mainly wrapper functions for easy access. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__error_8c.tex b/main/minimime/mm-docs/latex/mm__error_8c.tex new file mode 100644 index 0000000000..47ae033142 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__error_8c.tex @@ -0,0 +1,29 @@ +\section{mm\_\-error.c File Reference} +\label{mm__error_8c}\index{mm_error.c@{mm\_\-error.c}} +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$stdarg.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include $<$errno.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +\subsection*{Functions} +\begin{CompactItemize} +\item +void {\bf mm\_\-error\_\-init} (void) +\item +void {\bf mm\_\-error\_\-setmsg} (const char $\ast$fmt,...) +\item +void \textbf{mm\_\-error\_\-setlineno} (int lineno)\label{mm__error_8c_190c991d7bb378b6cd6f995ffc3011f7} + +\item +char $\ast$ {\bf mm\_\-error\_\-string} (void) +\item +int \textbf{mm\_\-error\_\-lineno} (void)\label{mm__error_8c_c84acacac29f1e6efd10bb3a89eab272} + +\end{CompactItemize} + + +\subsection{Detailed Description} +This module contains functions for Mini\-MIME error information/manipulation \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__header_8c.tex b/main/minimime/mm-docs/latex/mm__header_8c.tex new file mode 100644 index 0000000000..651a5a4e95 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__header_8c.tex @@ -0,0 +1,63 @@ +\section{mm\_\-header.c File Reference} +\label{mm__header_8c}\index{mm_header.c@{mm\_\-header.c}} +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$stdarg.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$ctype.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +\subsection*{Functions} +\begin{CompactItemize} +\item +mm\_\-mimeheader $\ast$ {\bf mm\_\-mimeheader\_\-new} (void) +\item +void {\bf mm\_\-mimeheader\_\-free} (struct mm\_\-mimeheader $\ast$header) +\item +mm\_\-mimeheader $\ast$ {\bf mm\_\-mimeheader\_\-generate} (const char $\ast$name, const char $\ast$value) +\item +int \textbf{mm\_\-mimeheader\_\-uncomment} (struct mm\_\-mimeheader $\ast$header)\label{mm__header_8c_26657e44385646fde63712d7110492d7} + +\item +int \textbf{mm\_\-mimeheader\_\-uncommentbyname} (struct mm\_\-mimepart $\ast$part, const char $\ast$name)\label{mm__header_8c_2081ee4c43e88d5a318a783069a5d471} + +\item +int \textbf{mm\_\-mimeheader\_\-uncommentall} (struct mm\_\-mimepart $\ast$part)\label{mm__header_8c_9f9bcb0fb26461bd349c15366748ecb7} + +\end{CompactItemize} + + +\subsection{Detailed Description} +This module contains functions for manipulating MIME headers + +\subsection{Function Documentation} +\index{mm_header.c@{mm\_\-header.c}!mm_mimeheader_free@{mm\_\-mimeheader\_\-free}} +\index{mm_mimeheader_free@{mm\_\-mimeheader\_\-free}!mm_header.c@{mm\_\-header.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void mm\_\-mimeheader\_\-free (struct mm\_\-mimeheader $\ast$ {\em header})}\label{mm__header_8c_61e3e62728f720ac381196ec59303064} + + +Frees a MIME header object + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em header}]The MIME header object which to free \end{description} +\end{Desc} +\index{mm_header.c@{mm\_\-header.c}!mm_mimeheader_generate@{mm\_\-mimeheader\_\-generate}} +\index{mm_mimeheader_generate@{mm\_\-mimeheader\_\-generate}!mm_header.c@{mm\_\-header.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimeheader$\ast$ mm\_\-mimeheader\_\-generate (const char $\ast$ {\em name}, const char $\ast$ {\em value})}\label{mm__header_8c_07a7f7dcebc91aa86f5478e1d84341a1} + + +Creates a new MIME header, but does no checks whatsoever (create as-is) \index{mm_header.c@{mm\_\-header.c}!mm_mimeheader_new@{mm\_\-mimeheader\_\-new}} +\index{mm_mimeheader_new@{mm\_\-mimeheader\_\-new}!mm_header.c@{mm\_\-header.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}struct mm\_\-mimeheader$\ast$ mm\_\-mimeheader\_\-new (void)}\label{mm__header_8c_2f2c5f2f640111caf3096ed46b5986a4} + + +Creates a new MIME header object + +\begin{Desc} +\item[Returns:]A new and initialized MIME header object \end{Desc} +\begin{Desc} +\item[See also:]\doxyref{mm\_\-mimeheader\_\-free}{p.}{mm__header_8c_61e3e62728f720ac381196ec59303064}\end{Desc} +This function creates and initializes a new MIME header object, which must later be freed using \doxyref{mm\_\-mimeheader\_\-free()}{p.}{mm__header_8c_61e3e62728f720ac381196ec59303064} \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__internal_8h.tex b/main/minimime/mm-docs/latex/mm__internal_8h.tex new file mode 100644 index 0000000000..017f05bc00 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__internal_8h.tex @@ -0,0 +1,45 @@ +\section{mm\_\-internal.h File Reference} +\label{mm__internal_8h}\index{mm_internal.h@{mm\_\-internal.h}} +{\tt \#include \char`\"{}mm.h\char`\"{}}\par +\subsection*{Defines} +\begin{CompactItemize} +\item +\#define \textbf{debugp}(m,...) +\end{CompactItemize} +\subsection*{Functions} +\begin{Indent}{\bf Utility functions}\par +\begin{CompactItemize} +\item +void $\ast$ {\bf xmalloc} (size\_\-t) +\item +void $\ast$ {\bf xrealloc} (void $\ast$, size\_\-t) +\item +void \textbf{xfree} (void $\ast$)\label{group__util_g35c4383ff0dee2de18985e6edfed1ae6} + +\item +char $\ast$ \textbf{xstrdup} (const char $\ast$)\label{group__util_g2961ae74e91b0b28acdf9822438a581c} + +\item +char $\ast$ {\bf xstrsep} (char $\ast$$\ast$, const char $\ast$) +\end{CompactItemize} +\end{Indent} + + +\subsection{Detailed Description} +Data definitions for Mini\-MIME + +\subsection{Define Documentation} +\index{mm_internal.h@{mm\_\-internal.h}!debugp@{debugp}} +\index{debugp@{debugp}!mm_internal.h@{mm\_\-internal.h}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\#define debugp(m, {\em ...})}\label{mm__internal_8h_089dd7bda22f552c35ebdc06a8849c56} + + +\textbf{Value:} + +\begin{Code}\begin{verbatim}do { \ + fprintf(stderr, "%s:%d:: ", __FILE__, __LINE__); \ + fprintf(stderr, m, ## __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + fflush(stderr); \ +} while (0); +\end{verbatim}\end{Code} diff --git a/main/minimime/mm-docs/latex/mm__mimepart_8c.tex b/main/minimime/mm-docs/latex/mm__mimepart_8c.tex new file mode 100644 index 0000000000..247887efda --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__mimepart_8c.tex @@ -0,0 +1,69 @@ +\section{mm\_\-mimepart.c File Reference} +\label{mm__mimepart_8c}\index{mm_mimepart.c@{mm\_\-mimepart.c}} +{\tt \#include $<$sys/types.h$>$}\par +{\tt \#include $<$sys/stat.h$>$}\par +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$unistd.h$>$}\par +{\tt \#include $<$fcntl.h$>$}\par +{\tt \#include $<$ctype.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +\subsection*{Functions} +\begin{Indent}{\bf Creating and destroying MIME parts}\par +\begin{CompactItemize} +\item +mm\_\-mimepart $\ast$ {\bf mm\_\-mimepart\_\-new} (void) +\item +mm\_\-mimepart $\ast$ {\bf mm\_\-mimepart\_\-fromfile} (const char $\ast$filename) +\item +void {\bf mm\_\-mimepart\_\-free} (struct mm\_\-mimepart $\ast$part) +\end{CompactItemize} +\end{Indent} +\begin{Indent}{\bf Accessing the MIME part's mail header}\par +\begin{CompactItemize} +\item +int {\bf mm\_\-mimepart\_\-attachheader} (struct mm\_\-mimepart $\ast$part, struct mm\_\-mimeheader $\ast$header) +\item +int {\bf mm\_\-mimepart\_\-countheaders} (struct mm\_\-mimepart $\ast$part) +\item +int {\bf mm\_\-mimepart\_\-countheaderbyname} (struct mm\_\-mimepart $\ast$part, const char $\ast$name) +\item +mm\_\-mimeheader $\ast$ {\bf mm\_\-mimepart\_\-getheaderbyname} (struct mm\_\-mimepart $\ast$part, const char $\ast$name, int idx) +\item +const char $\ast$ {\bf mm\_\-mimepart\_\-getheadervalue} (struct mm\_\-mimepart $\ast$part, const char $\ast$name, int idx) +\item +int {\bf mm\_\-mimepart\_\-headers\_\-start} (struct mm\_\-mimepart $\ast$part, struct mm\_\-mimeheader $\ast$$\ast$id) +\item +mm\_\-mimeheader $\ast$ {\bf mm\_\-mimepart\_\-headers\_\-next} (struct mm\_\-mimepart $\ast$part, struct mm\_\-mimeheader $\ast$$\ast$id) +\end{CompactItemize} +\end{Indent} +\begin{Indent}{\bf Accessing and manipulating the MIME part's body}\par +\begin{CompactItemize} +\item +char $\ast$ {\bf mm\_\-mimepart\_\-getbody} (struct mm\_\-mimepart $\ast$part, int opaque) +\item +void {\bf mm\_\-mimepart\_\-setbody} (struct mm\_\-mimepart $\ast$part, const char $\ast$data, int opaque) +\item +size\_\-t {\bf mm\_\-mimepart\_\-getlength} (struct mm\_\-mimepart $\ast$part) +\item +char $\ast$ {\bf mm\_\-mimepart\_\-decode} (struct mm\_\-mimepart $\ast$part) +\item +int {\bf mm\_\-mimepart\_\-flatten} (struct mm\_\-mimepart $\ast$part, char $\ast$$\ast$result, size\_\-t $\ast$length, int opaque) +\item +int {\bf mm\_\-mimepart\_\-setdefaultcontenttype} (struct mm\_\-mimepart $\ast$part, int composite) +\end{CompactItemize} +\end{Indent} +\begin{Indent}{\bf Accessing the MIME part's Content-Type information}\par +\begin{CompactItemize} +\item +void {\bf mm\_\-mimepart\_\-attachcontenttype} (struct mm\_\-mimepart $\ast$part, struct mm\_\-content $\ast$ct) +\item +mm\_\-content $\ast$ {\bf mm\_\-mimepart\_\-gettype} (struct mm\_\-mimepart $\ast$part) +\end{CompactItemize} +\end{Indent} + + +\subsection{Detailed Description} +This module contains functions for manipulating MIME header objects. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__mimeutil_8c.tex b/main/minimime/mm-docs/latex/mm__mimeutil_8c.tex new file mode 100644 index 0000000000..5ac2599b65 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__mimeutil_8c.tex @@ -0,0 +1,50 @@ +\section{mm\_\-mimeutil.c File Reference} +\label{mm__mimeutil_8c}\index{mm_mimeutil.c@{mm\_\-mimeutil.c}} +{\tt \#include $<$sys/time.h$>$}\par +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$time.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +\subsection*{Defines} +\begin{CompactItemize} +\item +\#define \textbf{MM\_\-DATE\_\-LENGTH}~50\label{mm__mimeutil_8c_257774e1a30f8190b3d99891be64210a} + +\end{CompactItemize} +\subsection*{Functions} +\begin{CompactItemize} +\item +int {\bf mm\_\-mimeutil\_\-gendate} (char $\ast$$\ast$result) +\item +int \textbf{mm\_\-mimeutil\_\-genboundary} (char $\ast$prefix, size\_\-t length, char $\ast$$\ast$result)\label{mm__mimeutil_8c_a72e503ba7ce2552456c6bd5935febe9} + +\end{CompactItemize} + + +\subsection{Detailed Description} +This module contains various MIME related utility functions. + +\subsection{Function Documentation} +\index{mm_mimeutil.c@{mm\_\-mimeutil.c}!mm_mimeutil_gendate@{mm\_\-mimeutil\_\-gendate}} +\index{mm_mimeutil_gendate@{mm\_\-mimeutil\_\-gendate}!mm_mimeutil.c@{mm\_\-mimeutil.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-mimeutil\_\-gendate (char $\ast$$\ast$ {\em result})}\label{mm__mimeutil_8c_a7b7f63b42dfa7a7f907b615aa4cd057} + + +Generates an RFC 2822 conform date string + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em timezone}]Whether to include timezone information \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]A pointer to the actual date string \end{Desc} +\begin{Desc} +\item[Note:]The pointer returned must be freed some time\end{Desc} +This function generates an RFC 2822 conform date string to use in message headers. It allocates memory to hold the string and returns a pointer to it. The generated date is in the format (example): + +Thu, 25 December 2003 16:35:22 +0100 (CET) + +This function dynamically allocates memory and returns a pointer to it. This memory should be released with free() once not needed anymore. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__param_8c.tex b/main/minimime/mm-docs/latex/mm__param_8c.tex new file mode 100644 index 0000000000..a3bc27e192 --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__param_8c.tex @@ -0,0 +1,38 @@ +\section{mm\_\-param.c File Reference} +\label{mm__param_8c}\index{mm_param.c@{mm\_\-param.c}} +{\tt \#include $<$sys/types.h$>$}\par +{\tt \#include $<$sys/stat.h$>$}\par +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$unistd.h$>$}\par +{\tt \#include $<$fcntl.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$ctype.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +\subsection*{Functions} +\begin{Indent}{\bf Functions for manipulating MIME parameters}\par +{\em MIME parameters are properties attached to certain MIME headers, such as Content-Type and Content-Disposition. MIME parameters have a textual representations as in {\em name=value\/}. They contain important information about the MIME structure of a message, such as the boundary string used, which charset was used to encode the message and so on. This module provides simple to use functions to query or set MIME parameters. + +Each MIME header may hold an arbitrary amount of such parameters, which are delimeted by each other with a semicolon. }\begin{CompactItemize} +\item +mm\_\-param $\ast$ {\bf mm\_\-param\_\-new} (void) +\item +void {\bf mm\_\-param\_\-free} (struct mm\_\-param $\ast$param) +\item +mm\_\-param $\ast$ {\bf mm\_\-param\_\-generate} (const char $\ast$name, const char $\ast$value) +\item +char $\ast$ {\bf mm\_\-param\_\-setname} (struct mm\_\-param $\ast$param, const char $\ast$name, int copy) +\item +char $\ast$ {\bf mm\_\-param\_\-setvalue} (struct mm\_\-param $\ast$param, const char $\ast$value, int copy) +\item +const char $\ast$ {\bf mm\_\-param\_\-getname} (struct mm\_\-param $\ast$param) +\item +const char $\ast$ {\bf mm\_\-param\_\-getvalue} (struct mm\_\-param $\ast$param) +\end{CompactItemize} +\end{Indent} + + +\subsection{Detailed Description} +Functions to manipulate MIME parameters \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__parse_8c.tex b/main/minimime/mm-docs/latex/mm__parse_8c.tex new file mode 100644 index 0000000000..36613ad6cd --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__parse_8c.tex @@ -0,0 +1,90 @@ +\section{mm\_\-parse.c File Reference} +\label{mm__parse_8c}\index{mm_parse.c@{mm\_\-parse.c}} +{\tt \#include $<$sys/types.h$>$}\par +{\tt \#include $<$sys/stat.h$>$}\par +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$unistd.h$>$}\par +{\tt \#include $<$fcntl.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$ctype.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +{\tt \#include \char`\"{}mm\_\-util.h\char`\"{}}\par +{\tt \#include \char`\"{}mimeparser.h\char`\"{}}\par +{\tt \#include \char`\"{}mimeparser.tab.h\char`\"{}}\par +\subsection*{Functions} +\begin{CompactItemize} +\item +void {\bf PARSER\_\-initialize} (MM\_\-CTX $\ast$, int) +\item +void \textbf{PARSER\_\-setbuffer} (const char $\ast$)\label{mm__parse_8c_92d7d8e20b6def16fcf2649e0d88651f} + +\item +void \textbf{PARSER\_\-setfp} (FILE $\ast$)\label{mm__parse_8c_04446354e4248226578b90007d728a7b} + +\item +int {\bf mm\_\-parse\_\-mem} (MM\_\-CTX $\ast$ctx, const char $\ast$text, int parsemode, int flags) +\item +int {\bf mm\_\-parse\_\-file} (MM\_\-CTX $\ast$ctx, const char $\ast$filename, int parsemode, int flags) +\end{CompactItemize} + + +\subsection{Detailed Description} +Functions to parse MIME messages + +\subsection{Function Documentation} +\index{mm_parse.c@{mm\_\-parse.c}!mm_parse_file@{mm\_\-parse\_\-file}} +\index{mm_parse_file@{mm\_\-parse\_\-file}!mm_parse.c@{mm\_\-parse.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-parse\_\-file (MM\_\-CTX $\ast$ {\em ctx}, const char $\ast$ {\em filename}, int {\em parsemode}, int {\em flags})}\label{mm__parse_8c_cc9f623682b05f330c46e72e4e9d66cc} + + +Parses a file into a Mini\-MIME context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context object \item[{\em filename}]The name of the file to parse \item[{\em parsemode}]The parsemode \item[{\em flags}]The flags to pass to the parser \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure \end{Desc} +\begin{Desc} +\item[Note:]Sets mm\_\-errno if an error occurs\end{Desc} +This function parses a MIME message, stored in the filesystem according to the parseflags and stores the results in the Mini\-MIME context specified by ctx. + +The following modes can be used to specify how the message should be parsed: + +\begin{itemize} +\item MM\_\-PARSE\_\-STRICT: Do not tolerate MIME violations\item MM\_\-PARSE\_\-LOOSE: Tolerate as much MIME violations as possible\end{itemize} + + +The context needs to be initialized before using \doxyref{mm\_\-context\_\-new()}{p.}{group__context_g919fd41f85534d9c87c256857faa2610} and may be freed using \doxyref{mm\_\-context\_\-free()}{p.}{group__context_g76392d5269e9ef340c2f5f8336f7193b}. \index{mm_parse.c@{mm\_\-parse.c}!mm_parse_mem@{mm\_\-parse\_\-mem}} +\index{mm_parse_mem@{mm\_\-parse\_\-mem}!mm_parse.c@{mm\_\-parse.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int mm\_\-parse\_\-mem (MM\_\-CTX $\ast$ {\em ctx}, const char $\ast$ {\em text}, int {\em parsemode}, int {\em flags})}\label{mm__parse_8c_58c960b6017f13d4e4ec5f09b3c38495} + + +Parses a NUL-terminated string into a Mini\-MIME context + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em ctx}]A valid Mini\-MIME context object \item[{\em text}]The NUL-terminated string to parse \item[{\em parsemode}]The parsemode \item[{\em flags}]The flags to pass to the parser \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]0 on success or -1 on failure \end{Desc} +\begin{Desc} +\item[Note:]Sets mm\_\-errno if an error occurs\end{Desc} +This function parses a MIME message, stored in the memory region pointed to by text (must be NUL-terminated) according to the parseflags and stores the results in the Mini\-MIME context specified by ctx. + +The following modes can be used to specify how the message should be parsed: + +\begin{itemize} +\item MM\_\-PARSE\_\-STRICT: Do not tolerate MIME violations\item MM\_\-PARSE\_\-LOOSE: Tolerate as much MIME violations as possible\end{itemize} + + +The context needs to be initialized before using \doxyref{mm\_\-context\_\-new()}{p.}{group__context_g919fd41f85534d9c87c256857faa2610} and may be freed using \doxyref{mm\_\-context\_\-free()}{p.}{group__context_g76392d5269e9ef340c2f5f8336f7193b}. \index{mm_parse.c@{mm\_\-parse.c}!PARSER_initialize@{PARSER\_\-initialize}} +\index{PARSER_initialize@{PARSER\_\-initialize}!mm_parse.c@{mm\_\-parse.c}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void PARSER\_\-initialize (MM\_\-CTX $\ast$ {\em newctx}, int {\em mode})}\label{mm__parse_8c_187cf71c0f6c2da1384823e3f20aa1a2} + + +Initializes the parser engine. \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/mm__util_8c.tex b/main/minimime/mm-docs/latex/mm__util_8c.tex new file mode 100644 index 0000000000..929efe9bcf --- /dev/null +++ b/main/minimime/mm-docs/latex/mm__util_8c.tex @@ -0,0 +1,38 @@ +\section{mm\_\-util.c File Reference} +\label{mm__util_8c}\index{mm_util.c@{mm\_\-util.c}} +{\tt \#include $<$stdio.h$>$}\par +{\tt \#include $<$stdlib.h$>$}\par +{\tt \#include $<$string.h$>$}\par +{\tt \#include $<$time.h$>$}\par +{\tt \#include $<$assert.h$>$}\par +{\tt \#include \char`\"{}mm\_\-internal.h\char`\"{}}\par +\subsection*{Functions} +\begin{CompactItemize} +\item +void $\ast$ {\bf xmalloc} (size\_\-t size) +\item +void $\ast$ {\bf xrealloc} (void $\ast$p, size\_\-t size) +\item +char $\ast$ \textbf{xstrdup} (const char $\ast$str)\label{mm__util_8c_700bf3013e33311eacdd1f20d13bdc9a} + +\item +void \textbf{xfree} (void $\ast$p)\label{mm__util_8c_91fc771d8aa78ca2ac43244c491da52d} + +\item +char $\ast$ {\bf mm\_\-unquote} (const char $\ast$string) +\item +char $\ast$ {\bf mm\_\-uncomment} (const char $\ast$string) +\item +char $\ast$ {\bf xstrsep} (char $\ast$$\ast$stringp, const char $\ast$delim) +\item +char $\ast$ {\bf mm\_\-stripchars} (char $\ast$input, char $\ast$strip) +\item +char $\ast$ {\bf mm\_\-addchars} (char $\ast$input, char $\ast$add, u\_\-int16\_\-t linelength) +\item +void \textbf{mm\_\-striptrailing} (char $\ast$$\ast$what, const char $\ast$charset)\label{mm__util_8c_a965d3d1c625253beffd53051b38548e} + +\end{CompactItemize} + + +\subsection{Detailed Description} +This module contains utility functions for the Mini\-MIME library \ No newline at end of file diff --git a/main/minimime/mm-docs/latex/modules.tex b/main/minimime/mm-docs/latex/modules.tex new file mode 100644 index 0000000000..95e134be32 --- /dev/null +++ b/main/minimime/mm-docs/latex/modules.tex @@ -0,0 +1,12 @@ +\section{Mini\-MIME Modules} +Here is a list of all modules:\begin{CompactList} +\item \contentsline{section}{Manipulating Mini\-MIME codecs}{\pageref{group__codecs}}{} +\item \contentsline{section}{Accessing and manipulating Content-Type objects}{\pageref{group__contenttype}}{} +\item \contentsline{section}{Accessing and manipulating MIME contexts}{\pageref{group__context}}{} +\item \contentsline{section}{Accessing and manipulating a message's envelope}{\pageref{group__envelope}}{} +\item \contentsline{section}{Mini\-MIME error functions}{\pageref{group__error}}{} +\item \contentsline{section}{Accessing and manipulating MIME parts}{\pageref{group__mimepart}}{} +\item \contentsline{section}{MIME related utility functions}{\pageref{group__mimeutil}}{} +\item \contentsline{section}{Accessing and manipulating MIME parameters}{\pageref{group__param}}{} +\item \contentsline{section}{General purpose utility functions}{\pageref{group__util}}{} +\end{CompactList} diff --git a/main/minimime/mm-docs/latex/pages.tex b/main/minimime/mm-docs/latex/pages.tex new file mode 100644 index 0000000000..9fdec66bc0 --- /dev/null +++ b/main/minimime/mm-docs/latex/pages.tex @@ -0,0 +1,5 @@ +\section{Mini\-MIME Related Pages} +Here is a list of all related documentation pages:\begin{CompactList} +\item \contentsline{section}{Bug List}{\pageref{bug}}{} + +\end{CompactList} diff --git a/main/minimime/mm-docs/latex/refman.tex b/main/minimime/mm-docs/latex/refman.tex new file mode 100644 index 0000000000..0346dcdc7d --- /dev/null +++ b/main/minimime/mm-docs/latex/refman.tex @@ -0,0 +1,62 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large Mini\-MIME Reference Manual}\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.5.1}\\ +\vspace*{0.5cm} +{\small Thu Mar 29 17:59:08 2007}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\chapter{Mini\-MIME Module Index} +\input{modules} +\chapter{Mini\-MIME File Index} +\input{files} +\chapter{Mini\-MIME Page Index} +\input{pages} +\chapter{Mini\-MIME Module Documentation} +\input{group__codecs} +\include{group__contenttype} +\include{group__context} +\include{group__envelope} +\include{group__error} +\include{group__mimepart} +\include{group__mimeutil} +\include{group__param} +\include{group__util} +\chapter{Mini\-MIME File Documentation} +\input{mm__codecs_8c} +\include{mm__contenttype_8c} +\include{mm__context_8c} +\include{mm__envelope_8c} +\include{mm__error_8c} +\include{mm__header_8c} +\include{mm__internal_8h} +\include{mm__mimepart_8c} +\include{mm__mimeutil_8c} +\include{mm__param_8c} +\include{mm__parse_8c} +\include{mm__util_8c} +\chapter{Mini\-MIME Page Documentation} +\input{bug} +\printindex +\end{document} diff --git a/main/minimime/mm-docs/refman.pdf b/main/minimime/mm-docs/refman.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dc77d05e7ab293b0f5a80bf299b298dc5aed4e14 GIT binary patch literal 261943 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�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 H+R6VPSUA98 literal 0 HcmV?d00001 diff --git a/main/minimime/mm.h b/main/minimime/mm.h new file mode 100644 index 0000000000..adaf2db1d7 --- /dev/null +++ b/main/minimime/mm.h @@ -0,0 +1,368 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _MM_H_INCLUDED +#define _MM_H_INCLUDED + +#include <sys/types.h> +#include <assert.h> +#include "mm_queue.h" +#include "mm_mem.h" + +#define MM_MIME_LINELEN 998 +#define MM_BASE64_LINELEN 76 + +TAILQ_HEAD(mm_mimeheaders, mm_mimeheader); +TAILQ_HEAD(mm_mimeparts, mm_mimepart); +TAILQ_HEAD(mm_params, mm_param); +SLIST_HEAD(mm_codecs, mm_codec); +SLIST_HEAD(mm_warnings, mm_warning); + +/* + * Parser modes + */ +enum mm_parsemodes +{ + /** Parse loosely, accept some MIME quirks */ + MM_PARSE_LOOSE = 0, + /** Parse as strict as possible */ + MM_PARSE_STRICT +}; + +/* + * Available parser flags + */ +enum mm_parseflags +{ + MM_PARSE_NONE = (1L << 0), + MM_PARSE_STRIPCOMMENTS = (1L << 1) +}; + +/* + * Enumeration of MIME encodings + */ +enum mm_encoding +{ + MM_ENCODING_NONE = 0, + MM_ENCODING_BASE64, + MM_ENCODING_QUOTEDPRINTABLE, + MM_ENCODING_UNKNOWN +}; + +/* + * Message type + */ +enum mm_messagetype +{ + /** Flat message */ + MM_MSGTYPE_FLAT = 0, + /** Composite message */ + MM_MSGTYPE_MULTIPART +}; + +/* + * Enumeration of error categories + */ +enum mm_errors +{ + MM_ERROR_NONE = 0, + MM_ERROR_UNDEF, + MM_ERROR_ERRNO, + MM_ERROR_PARSE, + MM_ERROR_MIME, + MM_ERROR_CODEC, + MM_ERROR_PROGRAM +}; + +enum mm_warning_ids +{ + MM_WARN_NONE = 0, + MM_WARN_PARSE, + MM_WARN_MIME, + MM_WARN_CODEC +}; + +enum mm_addressfields { + MM_ADDR_TO = 0, + MM_ADDR_CC, + MM_ADDR_BCC, + MM_ADDR_FROM, + MM_ADDR_SENDER, + MM_ADDR_REPLY_TO +}; + +enum mm_flatten_flags { + MM_FLATTEN_NONE = 0, + MM_FLATTEN_SKIPENVELOPE = (1L << 1), + MM_FLATTEN_OPAQUE = (1L << 2), + MM_FLATTEN_NOPREAMBLE = (1L << 3) +}; + +/* + * More information about an error + */ +struct mm_error_data +{ + int error_id; + int error_where; + int lineno; + char error_msg[128]; +}; + +extern int mm_errno; +extern struct mm_error_data mm_error; + +enum mm_warning_code +{ + MM_WARNING_NONE = 0, + MM_WARNING_INVHDR, +}; + +/* + * A parser warning + */ +struct mm_warning +{ + enum mm_warning_code warning; + u_int32_t lineno; + SLIST_ENTRY(mm_warning) next; +}; + +/* + * Representation of a MiniMIME codec object + */ +struct mm_codec +{ + enum mm_encoding id; + char *encoding; + + char *(*encoder)(char *, u_int32_t); + char *(*decoder)(char *); + + SLIST_ENTRY(mm_codec) next; +}; + +/* + * Representation of a MIME Content-Type parameter + */ +struct mm_param +{ + char *name; + char *value; + + TAILQ_ENTRY(mm_param) next; +}; + +/* + * Representation of a mail or MIME header field + */ +struct mm_mimeheader +{ + char *name; + char *value; + + struct mm_params params; + + TAILQ_ENTRY(mm_mimeheader) next; +}; + +/* + * Representation of a MIME Content-Type object + */ +struct mm_content +{ + char *maintype; + char *subtype; + char *disposition_type; + + struct mm_params type_params; + struct mm_params disposition_params; + + char *encstring; + enum mm_encoding encoding; +}; + +/* + * Representation of a MIME part + */ +struct mm_mimepart +{ + struct mm_mimeheaders headers; + + size_t opaque_length; + char *opaque_body; + + size_t length; + char *body; + + struct mm_content *type; + + TAILQ_ENTRY(mm_mimepart) next; +}; + +/* + * Represantation of a MiniMIME context + */ +struct mm_context +{ + struct mm_mimeparts parts; + enum mm_messagetype messagetype; + struct mm_warnings warnings; + struct mm_codecs codecs; + char *boundary; + char *preamble; + size_t max_message_size; +}; + +typedef struct mm_context MM_CTX; +typedef struct mm_context mm_ctx_t; + +char *mm_unquote(const char *); +char *mm_uncomment(const char *); +char *mm_stripchars(char *, char *); +char *mm_addchars(char *, char *, u_int16_t); +int mm_gendate(char **); +void mm_striptrailing(char **, const char *); +int mm_mimeutil_genboundary(char *, size_t, char **); + +int mm_library_init(void); +int mm_library_isinitialized(void); + +int mm_parse_mem(MM_CTX *, const char *, int, int); +int mm_parse_file(MM_CTX *, const char *, int, int); +int mm_parse_fileptr(MM_CTX *, FILE *, int, int); + +MM_CTX *mm_context_new(void); +void mm_context_free(MM_CTX *); +int mm_context_attachpart(MM_CTX *, struct mm_mimepart *); +int mm_context_deletepart(MM_CTX *, int, int); +int mm_context_countparts(MM_CTX *); +struct mm_mimepart *mm_context_getpart(MM_CTX *, int); +int mm_context_iscomposite(MM_CTX *); +int mm_context_haswarnings(MM_CTX *); +int mm_context_flatten(MM_CTX *, char **, size_t *, int); + +int mm_envelope_getheaders(MM_CTX *, char **, size_t *); +int mm_envelope_setheader(MM_CTX *, const char *, const char *, ...); + +struct mm_mimeheader *mm_mimeheader_new(void); +void mm_mimeheader_free(struct mm_mimeheader *); +struct mm_mimeheader *mm_mimeheader_generate(const char *, const char *); +int mm_mimeheader_uncomment(struct mm_mimeheader *); +int mm_mimeheader_uncommentbyname(struct mm_mimepart *, const char *); +int mm_mimeheader_uncommentall(struct mm_mimepart *); +int mm_mimeheader_tostring(struct mm_mimeheader *); +char *mm_mimeheader_getparambyname(struct mm_mimeheader *hdr, const char *name); +int mm_mimeheader_attachparam(struct mm_mimeheader *hdr, struct mm_param *param); + +struct mm_mimepart *mm_mimepart_new(void); +void mm_mimepart_free(struct mm_mimepart *); +int mm_mimepart_attachheader(struct mm_mimepart *, struct mm_mimeheader *); +int mm_mimepart_countheaders(struct mm_mimepart *part); +int mm_mimepart_countheaderbyname(struct mm_mimepart *, const char *); +struct mm_mimeheader *mm_mimepart_getheaderbyname(struct mm_mimepart *, const char *, int); +const char *mm_mimepart_getheadervalue(struct mm_mimepart *, const char *, int); +int mm_mimepart_headers_start(struct mm_mimepart *, struct mm_mimeheader **); +struct mm_mimeheader *mm_mimepart_headers_next(struct mm_mimepart *, struct mm_mimeheader **); +char *mm_mimepart_decode(struct mm_mimepart *); +struct mm_content *mm_mimepart_getcontent(struct mm_mimepart *); +size_t mm_mimepart_getlength(struct mm_mimepart *); +char *mm_mimepart_getbody(struct mm_mimepart *, int); +void mm_mimepart_attachcontenttype(struct mm_mimepart *, struct mm_content *); +int mm_mimepart_setdefaultcontenttype(struct mm_mimepart *, int); +int mm_mimepart_flatten(struct mm_mimepart *, char **, size_t *, int); +struct mm_mimepart *mm_mimepart_fromfile(const char *); + +struct mm_content *mm_content_new(void); +void mm_content_free(struct mm_content *); +int mm_content_attachtypeparam(struct mm_content *, struct mm_param *); +int mm_content_attachdispositionparam(struct mm_content *, struct mm_param *); +struct mm_content *mm_content_parse(const char *, int); +char *mm_content_gettypeparambyname(struct mm_content *, const char *); +char *mm_content_getdispositionparambyname(struct mm_content *, const char *); +struct mm_param *mm_content_gettypeparamobjbyname(struct mm_content *, const char *); +struct mm_param *mm_content_getdispositionparamobjbyname(struct mm_content *, const char *); +int mm_content_setmaintype(struct mm_content *, char *, int); +int mm_content_setsubtype(struct mm_content *, char *, int); +int mm_content_settype(struct mm_content *, const char *, ...); +int mm_content_setdispositiontype(struct mm_content *ct, char *value, int copy); +char *mm_content_getmaintype(struct mm_content *); +char *mm_content_getsubtype(struct mm_content *); +char *mm_content_gettype(struct mm_content *); +char *mm_content_getdispositiontype(struct mm_content *ct); +int mm_content_iscomposite(struct mm_content *); +int mm_content_isvalidencoding(const char *); +int mm_content_setencoding(struct mm_content *, const char *); +char *mm_content_typeparamstostring(struct mm_content *); +char *mm_content_dispositionparamstostring(struct mm_content *); +char *mm_content_tostring(struct mm_content *); + +struct mm_param *mm_param_new(void); +void mm_param_free(struct mm_param *); + +char *mm_flatten_mimepart(struct mm_mimepart *); +char *mm_flatten_context(MM_CTX *); + +int mm_codec_isregistered(const char *); +int mm_codec_hasdecoder(const char *); +int mm_codec_hasencoder(const char *); +int mm_codec_register(const char *, char *(*encoder)(char *, u_int32_t), char *(*decoder)(char *)); +int mm_codec_unregister(const char *); +int mm_codec_unregisterall(void); +void mm_codec_registerdefaultcodecs(void); + +char *mm_base64_decode(char *); +char *mm_base64_encode(char *, u_int32_t); + +void mm_error_init(void); +void mm_error_setmsg(const char *, ...); +void mm_error_setlineno(int lineno); +char *mm_error_string(void); +int mm_error_lineno(void); + +void mm_warning_add(MM_CTX *, int, const char *, ...); +struct mm_warning *mm_warning_next(MM_CTX *, struct mm_warning **); + +#ifndef HAVE_STRLCPY +size_t strlcpy(char *, const char *, size_t); +#endif /* ! HAVE_STRLCPY */ +#ifndef HAVE_STRLCAT +size_t strlcat(char *, const char *, size_t); +#endif /* ! HAVE_STRLCAT */ + +#define MM_ISINIT() do { \ + assert(mm_library_isinitialized() == 1); \ +} while (0); + +#endif /* ! _MM_H_INCLUDED */ diff --git a/main/minimime/mm_base64.c b/main/minimime/mm_base64.c new file mode 100644 index 0000000000..86d7f30c86 --- /dev/null +++ b/main/minimime/mm_base64.c @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2003 Jann Fischer <jfi@openbsd.de> + * All rights reserved. + * + * XXX: This piece of software is not nearly MIME compatible as it should be. + * + * This is based on third-party code, see the copyright notice below. + * + */ + +/* $Id$ */ + +/*********************************************************** + Copyright 1998 by Carnegie Mellon University + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Carnegie Mellon +University not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +******************************************************************/ +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> + +#include "mm_internal.h" + +#define XX 127 + +static int _mm_base64_decode(char *); +static char *_mm_base64_encode(char *, u_int32_t); + +/* + * Tables for encoding/decoding base64 + */ +static const char basis_64[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static const char index_64[256] = { + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,62, XX,XX,XX,63, + 52,53,54,55, 56,57,58,59, 60,61,XX,XX, XX,XX,XX,XX, + XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, + 15,16,17,18, 19,20,21,22, 23,24,25,XX, XX,XX,XX,XX, + XX,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, + 41,42,43,44, 45,46,47,48, 49,50,51,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, + XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, +}; +#define CHAR64(c) (index_64[(unsigned char)(c)]) + +/* + * mm_base64_decode() + * + * Decodes the data pointed to by 'data' from the BASE64 encoding to the data + * format it was encoded from. Returns a pointer to a string on success or + * NULL on error. The string returned needs to be freed by the caller at some + * later point. + * + */ +char * +mm_base64_decode(char *data) +{ + char *buf; + + assert(data != NULL); + + buf = mm_stripchars(data, "\r\n"); + assert(buf != NULL); + + _mm_base64_decode(buf); + assert(buf != NULL); + return(buf); +} + +/* + * mm_base64_encode() + * + * Encodes the data pointed to by 'data', which is of the length specified in + * 'len' to the BASE64 format. Returns a pointer to a string containing the + * BASE64 encoding, whose lines are broken at the MIME recommended linelength + * of 76 characters. If an error occured, returns NULL. The string returned + * needs to be freed by the caller at some later point. + * + */ +char * +mm_base64_encode(char *data, u_int32_t len) { + char *buf; + char *ret; + + assert(data != NULL); + + buf = _mm_base64_encode(data, len); + assert(buf != NULL); + + ret = mm_addchars(buf, "\r\n", MM_BASE64_LINELEN); + xfree(buf); + assert(ret != NULL); + return ret; +} + +/* + * Decode in-place the base64 data in 'input'. Returns the length + * of the decoded data, or -1 if there was an error. + */ +static int +_mm_base64_decode(char *input) +{ + u_int32_t len = 0; + unsigned char *output = (unsigned char *)input; + int c1, c2, c3, c4; + + while (*input) { + c1 = *input++; + if (CHAR64(c1) == XX) return -1; + c2 = *input++; + if (CHAR64(c2) == XX) return -1; + c3 = *input++; + if (c3 != '=' && CHAR64(c3) == XX) return -1; + c4 = *input++; + if (c4 != '=' && CHAR64(c4) == XX) return -1; + *output++ = (CHAR64(c1) << 2) | (CHAR64(c2) >> 4); + ++len; + if (c3 == '=') break; + *output++ = ((CHAR64(c2) << 4) & 0xf0) | (CHAR64(c3) >> 2); + ++len; + if (c4 == '=') break; + *output++ = ((CHAR64(c3) << 6) & 0xc0) | CHAR64(c4); + ++len; + } + *output = 0; + + return len; +} + +/* + * Encode the given binary string of length 'len' and return Base64 + * in a char buffer. It allocates the space for buffer. + * caller must free the space. + */ +static char * +_mm_base64_encode(char *data, u_int32_t len) +{ + char *buf; + u_int32_t buflen; + int c1; + int c2; + int c3; + u_int32_t maxbuf; + + buflen = 0; + +#ifdef RUBBISH + maxbuf = len*4/3 + 1; /* size after expantion */ +#endif + maxbuf = len*2 + 20; /* size after expantion */ + + buf = (char *)xmalloc(maxbuf); + + while (len && buflen < (maxbuf - 6)) { + + c1 = (unsigned char)*data++; + buf[buflen++] = basis_64[c1>>2]; + + if (--len == 0) c2 = 0; + else c2 = (unsigned char)*data++; + buf[buflen++] = basis_64[((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)]; + + if (len == 0) { + buf[buflen++] = '='; + buf[buflen++] = '='; + break; + } + + if (--len == 0) c3 = 0; + else c3 = (unsigned char)*data++; + + buf[buflen++] = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)]; + if (len == 0) { + buf[buflen++] = '='; + + break; + } + + --len; + buf[buflen++] = basis_64[c3 & 0x3F]; + } + + buf[buflen]=0; + return buf; +} diff --git a/main/minimime/mm_codecs.c b/main/minimime/mm_codecs.c new file mode 100644 index 0000000000..28603e5131 --- /dev/null +++ b/main/minimime/mm_codecs.c @@ -0,0 +1,250 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <assert.h> + +#include "mm_internal.h" +#include "mm_util.h" + +extern struct mm_codecs codecs; + +/** @file mm_codecs.c + * + * This module contains functions to manipulate MiniMIME codecs + * + */ + +/** @defgroup codecs Manipulating MiniMIME codecs */ + +/** @{ + * @name Codec manipulation + */ + +/** + * Looks up whether a context has an decoder installed for a given encoding + * + * @param encoding The encoding specifier to look up + * @return 1 if a decoder is installed or 0 if not + * @ingroup codecs + */ +int +mm_codec_hasdecoder(const char *encoding) +{ + struct mm_codec *codec; + + assert(encoding != NULL); + + SLIST_FOREACH(codec, &codecs, next) { + assert(codec->encoding != NULL); + if (!strcasecmp(codec->encoding, encoding)) { + if (codec->decoder != NULL) + return 1; + else + return 0; + } + } + + return 0; +} + +/** + * Looks up whether a context has an encoder installed for a given encoding + * + * @param ctx A valid MIME context + * @param encoding The encoding specifier to look up + * @return 1 if an encoder is installed or 0 if not + * @ingroup codecs + */ +int +mm_codec_hasencoder(const char *encoding) +{ + struct mm_codec *codec; + + assert(encoding != NULL); + + SLIST_FOREACH(codec, &codecs, next) { + assert(codec->encoding != NULL); + if (!strcasecmp(codec->encoding, encoding)) { + if (codec->encoder != NULL) + return 1; + else + return 0; + } + } + + return 0; +} + +/** + * Looks up whether a codec for a given encoding is installed to a context + * + * @param encoding The encoding specifier to look up + * @return 1 if a codec was found or 0 if not + * @ingroup codecs + */ +int +mm_codec_isregistered(const char *encoding) +{ + struct mm_codec *codec; + + assert(encoding != NULL); + + SLIST_FOREACH(codec, &codecs, next) { + if (!strcasecmp(codec->encoding, encoding)) { + return 1; + } + } + + return 0; +} + +/** + * Registers a codec with the MiniMIME library + * + * @param encoding The encoding specifier for which to register the codec + * @param encoder The encoder function for this encoding + * @param decoder The decoder function for this encoding + * @return 1 if successfull or 0 if not + * @ingroup codecs + * + * This function registers a codec for a given MiniMIME context. The codec + * may provide an decoder, an encoder or both (but not none). If there is + * a codec already installed for this encoding, the function will puke. + */ +int +mm_codec_register(const char *encoding, + char *(*encoder)(char *data, u_int32_t i), + char *(*decoder)(char *data)) +{ + struct mm_codec *codec; + + assert(encoding != NULL); + + assert(mm_codec_isregistered(encoding) != 1); + + codec = (struct mm_codec *)xmalloc(sizeof(struct mm_codec)); + + codec->encoding = xstrdup(encoding); + codec->encoder = encoder; + codec->decoder = decoder; + + if (SLIST_EMPTY(&codecs)) { + SLIST_INSERT_HEAD(&codecs, codec, next); + return 1; + } else { + struct mm_codec *lcodec, *tcodec; + tcodec = NULL; + SLIST_FOREACH(lcodec, &codecs, next) { + if (lcodec != NULL) + tcodec = lcodec; + } + assert(tcodec != NULL); + SLIST_INSERT_AFTER(tcodec, codec, next); + return 1; + } + + return 0; +} + +/** + * Unregisters a MiniMIME codec + * + * @param encoding The encoding specifier which to unregister + * @return 0 if unregistered successfully, or -1 if there was no such codec + * @ingroup codecs + */ +int +mm_codec_unregister(const char *encoding) +{ + struct mm_codec *codec; + + assert(encoding != NULL); + + SLIST_FOREACH(codec, &codecs, next) { + if (!strcasecmp(codec->encoding, encoding)) { + xfree(codec->encoding); + xfree(codec); + codec = NULL; + return 0; + } + } + + return -1; +} + +/** + * Unregisters all codecs within a context + * + * @param ctx A valid MiniMIME context + * @return 0 if all codecs were unregistered successfully or -1 if an error + * occured. + * @note Foobar + */ +int +mm_codec_unregisterall(void) +{ + struct mm_codec *codec; + + SLIST_FOREACH(codec, &codecs, next) { + if (mm_codec_unregister(codec->encoding) == -1) { + return -1; + } + } + + return 0; +} + +/** + * Registers the default codecs to a MiniMIME context + * + * This functions registers the codecs for the following encodings to a + * MiniMIME context: + * + * - Base64 + * - (TODO:) Quoted-Printable + */ +void +mm_codec_registerdefaultcodecs(void) +{ + mm_codec_register("base64", mm_base64_encode, mm_base64_decode); +} + + +/** @} */ diff --git a/main/minimime/mm_contenttype.c b/main/minimime/mm_contenttype.c new file mode 100644 index 0000000000..ff978df85d --- /dev/null +++ b/main/minimime/mm_contenttype.c @@ -0,0 +1,757 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" +#include "mm_util.h" + +/* This file is documented using Doxygen */ + +/** + * @file mm_contenttype.c + * + * This module contains functions for manipulating Content-Type objects. + */ + +/** @defgroup contenttype Accessing and manipulating Content-Type objects */ + +struct mm_encoding_mappings { + const char *idstring; + int type; +}; + +static struct mm_encoding_mappings mm_content_enctypes[] = { + { "Base64", MM_ENCODING_BASE64 }, + { "Quoted-Printable", MM_ENCODING_QUOTEDPRINTABLE }, + { NULL, - 1}, +}; + +static const char *mm_composite_maintypes[] = { + "multipart", + "message", + NULL, +}; + +static const char *mm_composite_encodings[] = { + "7bit", + "8bit", + "binary", + NULL, +}; + +/** @{ + * @name Functions for manipulating Content objects + */ + +/** + * Creates a new object to hold a Content representation. + * The allocated memory must later be freed using mm_content_free() + * + * @return An object representing a MIME Content-Type + * @see mm_content_free + * @ingroup contenttype + */ +struct mm_content * +mm_content_new(void) +{ + struct mm_content *ct; + + ct = (struct mm_content *)xmalloc(sizeof(struct mm_content)); + + ct->maintype = NULL; + ct->subtype = NULL; + + TAILQ_INIT(&ct->type_params); + TAILQ_INIT(&ct->disposition_params); + + ct->encoding = MM_ENCODING_NONE; + ct->encstring = NULL; + + return ct; +} + +/** + * Releases all memory associated with an Content object + * + * @param ct A Content-Type object + * @return Nothing + * @ingroup contenttype + */ +void +mm_content_free(struct mm_content *ct) +{ + struct mm_param *param; + + assert(ct != NULL); + + if (ct->maintype != NULL) { + xfree(ct->maintype); + ct->maintype = NULL; + } + if (ct->subtype != NULL) { + xfree(ct->subtype); + ct->subtype = NULL; + } + if (ct->encstring != NULL) { + xfree(ct->encstring); + ct->encstring = NULL; + } + + TAILQ_FOREACH(param, &ct->type_params, next) { + TAILQ_REMOVE(&ct->type_params, param, next); + mm_param_free(param); + } + TAILQ_FOREACH(param, &ct->disposition_params, next) { + TAILQ_REMOVE(&ct->disposition_params, param, next); + mm_param_free(param); + } + + xfree(ct); +} + +/** + * Attaches a content-type parameter to a Content object + * + * @param ct The target Content object + * @param param The Content-Type parameter which to attach + * @return 0 on success and -1 on failure + * @ingroup contenttype + */ +int +mm_content_attachtypeparam(struct mm_content *ct, struct mm_param *param) +{ + assert(ct != NULL); + assert(param != NULL); + + if (TAILQ_EMPTY(&ct->type_params)) { + TAILQ_INSERT_HEAD(&ct->type_params, param, next); + } else { + TAILQ_INSERT_TAIL(&ct->type_params, param, next); + } + + return 0; +} + + +/** + * Attaches a content-disposition parameter to a Content-Disposition object + * + * @param ct The target Content object + * @param param The Content-Type parameter which to attach + * @return 0 on success and -1 on failure + * @ingroup contenttype + */ +int +mm_content_attachdispositionparam(struct mm_content *ct, struct mm_param *param) +{ + assert(ct != NULL); + assert(param != NULL); + + if (TAILQ_EMPTY(&ct->disposition_params)) { + TAILQ_INSERT_HEAD(&ct->disposition_params, param, next); + } else { + TAILQ_INSERT_TAIL(&ct->disposition_params, param, next); + } + + return 0; +} + + +/** + * Gets a Content-Type parameter value from a Content object. + * + * @param ct the Content object + * @param name the name of the parameter to retrieve + * @return The value of the parameter on success or a NULL pointer on failure + * @ingroup contenttype + */ +char * +mm_content_gettypeparambyname(struct mm_content *ct, const char *name) +{ + struct mm_param *param; + + assert(ct != NULL); + + TAILQ_FOREACH(param, &ct->type_params, next) { + if (!strcasecmp(param->name, name)) { + return param->value; + } + } + + return NULL; +} + +/** + * Gets a Content-Disposition parameter value from a Content object. + * + * @param ct the Content object + * @param name the name of the parameter to retrieve + * @return The value of the parameter on success or a NULL pointer on failure + * @ingroup contenttype + */ +char * +mm_content_getdispositionparambyname(struct mm_content *ct, const char *name) +{ + struct mm_param *param; + + assert(ct != NULL); + + TAILQ_FOREACH(param, &ct->disposition_params, next) { + if (!strcasecmp(param->name, name)) { + return param->value; + } + } + + return NULL; +} + +struct mm_param * +mm_content_gettypeparamobjbyname(struct mm_content *ct, const char *name) +{ + struct mm_param *param; + + assert(ct != NULL); + + TAILQ_FOREACH(param, &ct->type_params, next) { + if (!strcasecmp(param->name, name)) { + return param; + } + } + + return NULL; +} + +struct mm_param * +mm_content_getdispositionparamobjbyname(struct mm_content *ct, const char *name) +{ + struct mm_param *param; + + assert(ct != NULL); + + TAILQ_FOREACH(param, &ct->disposition_params, next) { + if (!strcasecmp(param->name, name)) { + return param; + } + } + + return NULL; +} + +/** + * Sets the MIME main Content-Type for a MIME Content object + * + * @param ct The MIME Content object + * @param value The value which to set the main type to + * @param copy Whether to make a copy of the value (original value must be + * freed afterwards to prevent memory leaks). + */ +int +mm_content_setmaintype(struct mm_content *ct, char *value, int copy) +{ + assert(ct != NULL); + assert(value != NULL); + + if (copy) { + /** + * @bug The xfree() call could lead to undesirable results. + * Do we really need it? + */ + if (ct->maintype != NULL) { + xfree(ct->maintype); + } + ct->maintype = xstrdup(value); + } else { + ct->maintype = value; + } + + return 0; +} + +/** + * Retrieves the main MIME Content-Type stored in a Content object + * + * @param ct A valid Content object + * @returns A pointer to the string representing the main type + * @ingroup contenttype + */ +char * +mm_content_getmaintype(struct mm_content *ct) +{ + assert(ct != NULL); + assert(ct->maintype != NULL); + + return ct->maintype; +} + +/** + * Sets the MIME Content-Disposition type for a MIME Content object + * + * @param ct The MIME Content object + * @param value The value which to set the main type to + * @param copy Whether to make a copy of the value (original value must be + * freed afterwards to prevent memory leaks). + */ +int +mm_content_setdispositiontype(struct mm_content *ct, char *value, int copy) +{ + assert(ct != NULL); + assert(value != NULL); + + if (copy) { + /** + * @bug The xfree() call could lead to undesirable results. + * Do we really need it? + */ + if (ct->disposition_type != NULL) { + xfree(ct->disposition_type); + } + ct->disposition_type = xstrdup(value); + } else { + ct->disposition_type = value; + } + + return 0; +} + +/** + * Retrieves the Content-Disposition MIME type stored in a Content object + * + * @param ct A valid Content-Type object + * @returns A pointer to the string representing the main type + * @ingroup contenttype + */ +char * +mm_content_getdispositiontype(struct mm_content *ct) +{ + assert(ct != NULL); + assert(ct->disposition_type != NULL); + + return ct->disposition_type; +} + +/** + * Retrieves the sub MIME Content-Type stored in a Content object + * + * @param ct A valid Content-Type object + * @return A pointer to the string holding the current sub MIME type + * @ingroup contenttype + */ +char * +mm_content_getsubtype(struct mm_content *ct) +{ + assert(ct != NULL); + assert(ct->subtype != NULL); + + return ct->subtype; +} + +/** + * Sets the MIME sub Content-Type for a MIME Content object + * + * @param ct The MIME Content-Type object + * @param value The value which to set the sub type to + * @param copy Whether to make a copy of the value (original value must be + * freed afterwards to prevent memory leaks). + */ +int +mm_content_setsubtype(struct mm_content *ct, char *value, int copy) +{ + assert(ct != NULL); + assert(value != NULL); + + if (copy) { + /** + * @bug The xfree() call could lead to undesirable results. + * Do we really need it? + */ + if (ct->subtype != NULL) { + xfree(ct->subtype); + } + ct->subtype = xstrdup(value); + } else { + ct->subtype = value; + } + + return 0; +} + +int +mm_content_settype(struct mm_content *ct, const char *fmt, ...) +{ + char *maint, *subt; + char buf[512], *parse; + va_list ap; + + mm_errno = MM_ERROR_NONE; + + va_start(ap, fmt); + /* Make sure no truncation occurs */ + if (vsnprintf(buf, sizeof buf, fmt, ap) > sizeof buf) { + mm_errno = MM_ERROR_ERRNO; + mm_error_setmsg("Input string too long"); + return -1; + } + va_end(ap); + + parse = buf; + maint = strsep(&parse, "/"); + if (maint == NULL) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("Invalid type specifier: %s", buf); + return -1; + } + ct->maintype = xstrdup(maint); + + subt = strsep(&parse, ""); + if (subt == NULL) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("Invalid type specifier: %s", buf); + return -1; + } + ct->subtype = xstrdup(subt); + + return 0; +} + +/** + * Checks whether the Content-Type represents a composite message or not + * + * @param ct A valid Content-Type object + * @returns 1 if the Content-Type object represents a composite message or + * 0 if not. + */ +int +mm_content_iscomposite(struct mm_content *ct) +{ + int i; + + for (i = 0; mm_composite_maintypes[i] != NULL; i++) { + if (!strcasecmp(ct->maintype, mm_composite_maintypes[i])) { + return 1; + } + } + + /* Not found */ + return 0; +} + +/** + * Verifies whether a string represents a valid encoding or not. + * + * @param encoding The string to verify + * @return 1 if the encoding string is valid or 0 if not + * + */ +int +mm_content_isvalidencoding(const char *encoding) +{ + int i; + + for (i = 0; mm_composite_encodings[i] != NULL; i++) { + if (!strcasecmp(encoding, mm_composite_encodings[i])) { + return 1; + } + } + + /* Not found */ + return 0; +} + +/** + * Set the encoding of a MIME entitity according to a mapping table + * + * @param ct A valid content type object + * @param encoding A string representing the content encoding + * @return 0 if successfull or -1 if not (i.e. unknown content encoding) + */ +int +mm_content_setencoding(struct mm_content *ct, const char *encoding) +{ + int i; + + assert(ct != NULL); + assert(encoding != NULL); + + for (i = 0; mm_content_enctypes[i].idstring != NULL; i++) { + if (!strcasecmp(mm_content_enctypes[i].idstring, encoding)) { + ct->encoding = mm_content_enctypes[i].type; + ct->encstring = xstrdup(encoding); + return 0; + } + } + + /* If we didn't find a mapping, set the encoding to unknown */ + ct->encoding = MM_ENCODING_UNKNOWN; + ct->encstring = NULL; + return 1; +} + +/** + * Gets the numerical ID of a content encoding identifier + * + * @param ct A valid Content Type object + * @param encoding A string representing the content encoding identifier + * @return The numerical ID of the content encoding + */ +int +mm_content_getencoding(struct mm_content *ct, const char *encoding) +{ + int i; + + assert(ct != NULL); + + for (i = 0; mm_content_enctypes[i].idstring != NULL; i++) { + if (!strcasecmp(mm_content_enctypes[i].idstring, encoding)) { + return mm_content_enctypes[i].type; + } + } + + /* Not found */ + return MM_ENCODING_UNKNOWN; +} + +/** + * Constructs a MIME conform string of Content-Type parameters. + * + * @param ct A valid Content Type object + * @return A pointer to a string representing the Content-Type parameters + * in MIME terminology, or NULL if either the Content-Type object + * is invalid, has no parameters or no memory could be allocated. + * + * This function constructs a MIME conform string including all the parameters + * associated with the given Content-Type object. It should NOT be used if + * you need an opaque copy of the current MIME part (e.g. for PGP purposes). + */ +char * +mm_content_typeparamstostring(struct mm_content *ct) +{ + size_t size, new_size; + struct mm_param *param; + char *param_string, *cur_param; + char *buf; + + size = 1; + param_string = NULL; + cur_param = NULL; + + param_string = (char *) xmalloc(size); + *param_string = '\0'; + + /* Concatenate all Content-Type parameters attached to the current + * Content-Type object to a single string. + */ + TAILQ_FOREACH(param, &ct->type_params, next) { + if (asprintf(&cur_param, "; %s=\"%s\"", param->name, + param->value) == -1) { + goto cleanup; + } + + new_size = size + strlen(cur_param) + 1; + + if (new_size < 0 || new_size > 1000) { + size = 0; + goto cleanup; + } + + buf = (char *) xrealloc(param_string, new_size); + if (buf == NULL) { + size = 0; + goto cleanup; + } + + param_string = buf; + size = new_size; + strlcat(param_string, cur_param, size); + + xfree(cur_param); + cur_param = NULL; + } + + return param_string; + +cleanup: + if (param_string != NULL) { + xfree(param_string); + param_string = NULL; + } + if (cur_param != NULL) { + xfree(cur_param); + cur_param = NULL; + } + return NULL; +} + +/** + * Constructs a MIME conformant string of Content-Disposition parameters. + * + * @param ct A valid Content object + * @return A pointer to a string representing the Content-Disposition parameters + * in MIME terminology, or NULL if either the Content object + * is invalid, has no Disposition parameters or no memory could be allocated. + * + * This function constructs a MIME conforming string including all the parameters + * associated with the given Content-Disposition object. It should NOT be used if + * you need an opaque copy of the current MIME part (e.g. for PGP purposes). + */ +char * +mm_content_dispositionparamstostring(struct mm_content *ct) +{ + size_t size, new_size; + struct mm_param *param; + char *param_string, *cur_param; + char *buf; + + size = 1; + param_string = NULL; + cur_param = NULL; + + param_string = (char *) xmalloc(size); + *param_string = '\0'; + + /* Concatenate all Content-Disposition parameters attached to the current + * Content object to a single string. + */ + TAILQ_FOREACH(param, &ct->disposition_params, next) { + if (asprintf(&cur_param, "; %s=\"%s\"", param->name, + param->value) == -1) { + goto cleanup; + } + + new_size = size + strlen(cur_param) + 1; + + if (new_size < 0 || new_size > 1000) { + size = 0; + goto cleanup; + } + + buf = (char *) xrealloc(param_string, new_size); + if (buf == NULL) { + size = 0; + goto cleanup; + } + + param_string = buf; + size = new_size; + strlcat(param_string, cur_param, size); + + xfree(cur_param); + cur_param = NULL; + } + + return param_string; + +cleanup: + if (param_string != NULL) { + xfree(param_string); + param_string = NULL; + } + if (cur_param != NULL) { + xfree(cur_param); + cur_param = NULL; + } + return NULL; +} + +/** + * Creates a Content-Type header according to the object given + * + * @param ct A valid Content-Type object + * + */ +char * +mm_content_tostring(struct mm_content *ct) +{ + char *paramstring; + char *buf; + char *headerstring; + size_t size; + + paramstring = NULL; + headerstring = NULL; + buf = NULL; + + if (ct == NULL) { + return NULL; + } + if (ct->maintype == NULL || ct->subtype == NULL) { + return NULL; + } + + size = strlen(ct->maintype) + strlen(ct->subtype) + 2; + headerstring = (char *)xmalloc(size); + snprintf(headerstring, size, "%s/%s", ct->maintype, ct->subtype); + + paramstring = mm_content_typeparamstostring(ct); + if (paramstring == NULL) { + goto cleanup; + } + + size += strlen(paramstring) + strlen("Content-Type: ") + 1; + buf = (char *)malloc(size); + if (buf == NULL) { + goto cleanup; + } + + snprintf(buf, size, "Content-Type: %s%s", headerstring, paramstring); + + xfree(headerstring); + xfree(paramstring); + + headerstring = NULL; + paramstring = NULL; + + return buf; + +cleanup: + if (paramstring != NULL) { + xfree(paramstring); + paramstring = NULL; + } + if (headerstring != NULL) { + xfree(headerstring); + headerstring = NULL; + } + if (buf != NULL) { + xfree(buf); + buf = NULL; + } + return NULL; +} + +/** @} */ diff --git a/main/minimime/mm_context.c b/main/minimime/mm_context.c new file mode 100644 index 0000000000..e655b925aa --- /dev/null +++ b/main/minimime/mm_context.c @@ -0,0 +1,604 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <assert.h> + +#include "mm_internal.h" + +/** @file mm_context.c + * + * Modules for manipulating MiniMIME contexts + */ + +/** @defgroup context Accessing and manipulating MIME contexts + * + * Each message in MiniMIME is represented by a so called ``context''. A + * context holds all necessary information given about a MIME message, such + * as the envelope, all MIME parts etc. + */ + +/** @{ + * @name Manipulating MiniMIME contexts + */ + +/** + * Creates a new MiniMIME context object. + * + * @return a new MiniMIME context object + * @see mm_context_free + * + * This function creates a new MiniMIME context, which will hold a message. + * The memory needed is allocated dynamically and should later be free'd + * using mm_context_free(). + * + * Before a context can be created, the MiniMIME library needs to be + * initialized properly using mm_library_init(). + * + */ +MM_CTX * +mm_context_new(void) +{ + MM_CTX *ctx; + + MM_ISINIT(); + + ctx = (MM_CTX *)xmalloc(sizeof(MM_CTX)); + ctx->messagetype = MM_MSGTYPE_FLAT; /* This is the default */ + ctx->boundary = NULL; + ctx->preamble = xstrdup("This is a message in MIME format, generated " + "by MiniMIME 0.1"); + + TAILQ_INIT(&ctx->parts); + SLIST_INIT(&ctx->warnings); + + return ctx; +} + +/** + * Releases a MiniMIME context object + * + * @param ctx A valid MiniMIME context + * @see mm_context_new + * + * This function releases all memory associated with MiniMIME context object + * that was created using mm_context_new(). It will also release all memory + * used for the MIME parts attached, and their specific properties (such as + * Content-Type information, headers, and the body data). + */ +void +mm_context_free(MM_CTX *ctx) +{ + struct mm_mimepart *part; + struct mm_warning *warning, *nxt; + + assert(ctx != NULL); + + TAILQ_FOREACH(part, &ctx->parts, next) { + TAILQ_REMOVE(&ctx->parts, part, next); + mm_mimepart_free(part); + } + + if (ctx->boundary != NULL) { + xfree(ctx->boundary); + ctx->boundary = NULL; + } + + if (ctx->preamble != NULL) { + xfree(ctx->preamble); + ctx->preamble = NULL; + } + + for (warning = SLIST_FIRST(&ctx->warnings); + warning != SLIST_END(&ctx->warnings); + warning = nxt) { + nxt = SLIST_NEXT(warning, next); + SLIST_REMOVE(&ctx->warnings, warning, mm_warning, next); + xfree(warning); + warning = NULL; + } + + xfree(ctx); + ctx = NULL; +} + +/** + * Attaches a MIME part object to a MiniMIME context. + * + * @param ctx the MiniMIME context + * @param part the MIME part object to attach + * @return 0 on success or -1 on failure. Sets mm_errno on failure. + * + * This function attaches a MIME part to a context, appending it to the end + * of the message. + * + * The MIME part should be initialized before attaching it using + * mm_mimepart_new(). + */ +int +mm_context_attachpart(MM_CTX *ctx, struct mm_mimepart *part) +{ + assert(ctx != NULL); + assert(part != NULL); + + if (TAILQ_EMPTY(&ctx->parts)) { + TAILQ_INSERT_HEAD(&ctx->parts, part, next); + } else { + TAILQ_INSERT_TAIL(&ctx->parts, part, next); + } + + return 0; +} + +/** + * Attaches a MIME part object to a MiniMIME context at a given position + * + * @param ctx A valid MiniMIME context + * @param part The MIME part object to attach + * @param pos After which part to attach the object + * @return 0 on success or -1 if the given position is invalid + * @see mm_context_attachpart + * + * This function attaches a MIME part object after a given position in the + * specified context. If the position is invalid (out of range), the part + * will not get attached to the message and the function returns -1. If + * the index was in range, the MIME part will get attached after the MIME + * part at the given position, moving any possible following MIME parts one + * down the hierarchy. + */ +int +mm_context_attachpart_after(MM_CTX *ctx, struct mm_mimepart *part, int pos) +{ + struct mm_mimepart *p; + int where; + + where = 0; + p = NULL; + + TAILQ_FOREACH(part, &ctx->parts, next) { + if (where == pos) { + p = part; + } + } + + if (p == NULL) { + return(-1); + } + + TAILQ_INSERT_AFTER(&ctx->parts, p, part, next); + + return(0); +} + +/** + * Deletes a MIME part object from a MiniMIME context + * + * @param ctx A valid MiniMIME context object + * @param which The number of the MIME part object to delete + * @param freemem Whether to free the memory associated with the MIME part + * object + * @return 0 on success or -1 on failure. Sets mm_errno on failure. + * + * This function deletes a MIME part from a given context. The MIME part to + * delete is specified as numerical index by the parameter ``which''. If the + * parameter ``freemem'' is set to anything greater than 0, the memory that + * is associated will be free'd by using mm_mimepart_free(), otherwise the + * memory is left untouched (if you still have a pointer to the MIME part + * around). + */ +int +mm_context_deletepart(MM_CTX *ctx, int which, int freemem) +{ + struct mm_mimepart *part; + int cur; + + assert(ctx != NULL); + assert(which >= 0); + + cur = 0; + + TAILQ_FOREACH(part, &ctx->parts, next) { + if (cur == which) { + TAILQ_REMOVE(&ctx->parts, part, next); + if (freemem) + mm_mimepart_free(part); + return 0; + } + cur++; + } + + return -1; +} + +/** + * Counts the number of attached MIME part objects in a given MiniMIME context + * + * @param ctx The MiniMIME context + * @returns The number of attached MIME part objects + */ +int +mm_context_countparts(MM_CTX *ctx) +{ + int count; + struct mm_mimepart *part; + + assert(ctx != NULL); + + count = 0; + + if (TAILQ_EMPTY(&ctx->parts)) { + return 0; + } else { + TAILQ_FOREACH(part, &ctx->parts, next) { + count++; + } + } + + assert(count > -1); + + return count; +} + +/** + * Gets a specified MIME part object from a MimeMIME context + * + * @param ctx The MiniMIME context + * @param which The number of the MIME part object to retrieve + * @returns The requested MIME part object on success or a NULL pointer if + * there is no such part. + */ +struct mm_mimepart * +mm_context_getpart(MM_CTX *ctx, int which) +{ + struct mm_mimepart *part; + int cur; + + assert(ctx != NULL); + + cur = 0; + + TAILQ_FOREACH(part, &ctx->parts, next) { + if (cur == which) { + return part; + } + cur++; + } + + return NULL; +} + +/** + * Checks whether a given context represents a composite (multipart) message + * + * @param ctx A valid MiniMIME context object + * @return 1 if the context is a composite message or 0 if it's flat + * + */ +int +mm_context_iscomposite(MM_CTX *ctx) +{ + if (ctx->messagetype == MM_MSGTYPE_MULTIPART) { + return 1; + } else { + return 0; + } +} + +/** + * Checks whether there are any warnings associated with a given context + * + * @param ctx A valid MiniMIME context + * @return 1 if there are warnings associated with the context, otherwise 0 + */ +int +mm_context_haswarnings(MM_CTX *ctx) +{ + if (SLIST_EMPTY(&ctx->warnings)) { + return 0; + } else { + return 1; + } +} + +/** + * Generates a generic boundary string for a given context + * + * @param ctx A valid MiniMIME context + * @return 0 on success or -1 on failure + * + * This function generates a default boundary string for the given context. + * If there is already a boundary for the context, the memory will be free()'d. + */ +int +mm_context_generateboundary(MM_CTX *ctx) +{ + char *boundary; + struct mm_mimepart *part; + struct mm_param *param; + + if (mm_mimeutil_genboundary("++MiniMIME++", 20, &boundary) == -1) { + return(-1); + } + + if (ctx->boundary != NULL) { + xfree(ctx->boundary); + ctx->boundary = NULL; + } + + /* If we already have an envelope, make sure that we also justify the + * "boundary" parameter of the envelope. + */ + part = mm_context_getpart(ctx, 0); + if (part == NULL) { + return(0); + } + if (part->type != NULL) { + param = mm_content_gettypeparamobjbyname(part->type, "boundary"); + if (param == NULL) { + param = mm_param_new(); + param->name = xstrdup("boundary"); + param->value = xstrdup(boundary); + mm_content_attachtypeparam(part->type, param); + } else { + if (param->value != NULL) { + xfree(param->value); + param->value = NULL; + } + param->value = xstrdup(boundary); + } + } + + ctx->boundary = boundary; + return(0); +} + +/** + * Sets a preamble for the given MiniMIME context + * + * @param ctx A valid MiniMIME context + * @param preamble The preamble to set + * @return 0 on success or -1 on failure + * + * This function sets the MIME preamble (the text between the end of envelope + * headers and the beginning of the first MIME part) for a given context + * object. If preamble is a NULL-pointer then the preamble will be deleted, + * and the currently associated memory will be free automagically. + */ +int +mm_context_setpreamble(MM_CTX *ctx, char *preamble) +{ + if (ctx == NULL) + return(-1); + + if (preamble == NULL) { + if (ctx->preamble != NULL) { + xfree(ctx->preamble); + } + ctx->preamble = NULL; + } else { + ctx->preamble = xstrdup(preamble); + } + return(0); +} + +char * +mm_context_getpreamble(MM_CTX *ctx) +{ + if (ctx == NULL) + return(NULL); + + return(ctx->preamble); +} + +/** + * Creates an ASCII message of the specified context + * + * @param ctx A valid MiniMIME context object + * @param flat Where to store the message + * @param flags Flags that affect the flattening process + * + * This function ``flattens'' a MiniMIME context, that is, it creates an ASCII + * represantation of the message the context contains. The flags can be a + * bitwise combination of the following constants: + * + * - MM_FLATTEN_OPAQUE : use opaque MIME parts when flattening + * - MM_FLATTEN_SKIPENVELOPE : do not flatten the envelope part + * + * Great care is taken to not produce invalid MIME output. + */ +int +mm_context_flatten(MM_CTX *ctx, char **flat, size_t *length, int flags) +{ + struct mm_mimepart *part; + char *message; + char *flatpart; + char *buf; + char *envelope_headers; + size_t message_size; + size_t tmp_size; + char envelope; + + mm_errno = MM_ERROR_NONE; + envelope = 1; + + message = NULL; + message_size = 0; + + if (ctx->boundary == NULL) { + if (mm_context_iscomposite(ctx)) { + mm_context_generateboundary(ctx); + } + } + + TAILQ_FOREACH(part, &ctx->parts, next) { + if (envelope) { + if (flags & MM_FLATTEN_SKIPENVELOPE) { + envelope = 0; + if ((message = (char *) malloc(1)) == NULL) { + mm_errno = MM_ERROR_ERRNO; + goto cleanup; + } + *message = '\0'; + continue; + } + + if (part->type == NULL && mm_context_countparts(ctx) > 1) { + if (mm_mimepart_setdefaultcontenttype(part, 1) + == -1) { + goto cleanup; + } + if (mm_context_generateboundary(ctx) == -1) { + goto cleanup; + } + ctx->messagetype = MM_MSGTYPE_MULTIPART; + } + + if (mm_envelope_getheaders(ctx, &envelope_headers, + &tmp_size) == -1) { + return -1; + } + + message = envelope_headers; + message_size = tmp_size; + envelope = 0; + + if (ctx->preamble != NULL + && mm_context_iscomposite(ctx) + && !(flags & MM_FLATTEN_NOPREAMBLE)) { + tmp_size += strlen(ctx->preamble) + + (strlen("\r\n") * 2); + buf = (char *)xrealloc(message, tmp_size); + if (buf == NULL) { + goto cleanup; + } + message_size += tmp_size; + message = buf; + strlcat(message, "\r\n", message_size); + strlcat(message, ctx->preamble, message_size); + strlcat(message, "\r\n", message_size); + } + } else { + /* Enforce Content-Type if none exist */ + if (part->type == NULL) { + if (mm_mimepart_setdefaultcontenttype(part, 0) + == -1) { + goto cleanup; + } + } + + /* Append a boundary if necessary */ + if (ctx->boundary != NULL) { + tmp_size = strlen(ctx->boundary) + + (strlen("\r\n") * 2) + strlen("--"); + + if (tmp_size < 1) { + return(-1); + } + if (message_size + tmp_size < 1) { + return(-1); + } + + buf = (char *)xrealloc(message, message_size + + tmp_size); + if (buf == NULL) { + goto cleanup; + } + message_size += tmp_size; + message = buf; + strlcat(message, "\r\n", message_size); + strlcat(message, "--", message_size); + strlcat(message, ctx->boundary, message_size); + strlcat(message, "\r\n", message_size); + } + + if (mm_mimepart_flatten(part, &flatpart, &tmp_size, + (flags & MM_FLATTEN_OPAQUE)) == -1) { + goto cleanup; + } + + if (tmp_size < 1) { + goto cleanup; + } + + buf = (char *) xrealloc(message, message_size + + tmp_size); + if (buf == NULL) { + goto cleanup; + } + + message_size += tmp_size; + message = buf; + + strlcat(message, flatpart, message_size); + xfree(flatpart); + flatpart = NULL; + } + } + + /* Append end boundary */ + if (ctx->boundary != NULL && mm_context_iscomposite(ctx)) { + tmp_size = strlen(ctx->boundary) + (strlen("\r\n") * 2) + + (strlen("--") * 2); + buf = (char *)xrealloc(message, message_size + tmp_size); + if (buf == NULL) { + goto cleanup; + } + + message_size += tmp_size; + message = buf; + if (message[strlen(message)-1] != 13) + strlcat(message, "\r", message_size); + strlcat(message, "\n", message_size); + strlcat(message, "--", message_size); + strlcat(message, ctx->boundary, message_size); + strlcat(message, "--", message_size); + strlcat(message, "\r\n", message_size); + } + + *flat = message; + *length = message_size; + + return 0; + +cleanup: + if (message != NULL) { + xfree(message); + message = NULL; + } + return -1; +} + +/** @} */ diff --git a/main/minimime/mm_envelope.c b/main/minimime/mm_envelope.c new file mode 100644 index 0000000000..e94bc475df --- /dev/null +++ b/main/minimime/mm_envelope.c @@ -0,0 +1,269 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" +#include "mm_util.h" + +/** @file mm_envelope.c + * + * This module contains functions for accessing a message's envelope. This + * are mainly wrapper functions for easy access. + */ + +/** @defgroup envelope Accessing and manipulating a message's envelope + */ + +/** @{ + * @name Accessing and manipulating a message's envelope + */ + +/** + * Gets an ASCII representation of all envelope headers + * + * @param ctx A valid MiniMIME context + * @param result Where to store the resulting ASCII headers + * @param length Where to store the length of the result + * @returns 0 on success or -1 on failure. + * @note Sets mm_errno on failure + * + * This is mainly a convinience function. It constructs an ASCII representation + * from all of the message's envelope headers and stores the result in headers. + * Memory is allocated dynamically, and the total length of the result is + * stored in length. This function takes care that the output is MIME conform, + * and folds long lines according to the MIME standard at position 78 of the + * string. It also nicely formats all MIME related header fields, such as + * the Content-Type header. + * + * Since the memory needed to store the result is allocated dynamically, one + * should take care of freeing it again when it's not needed anymore. If an + * error occurs, *result will be set to NULL, *length will be set to zero + * and mm_errno will be set to a reasonable value. + * + */ +int +mm_envelope_getheaders(MM_CTX *ctx, char **result, size_t *length) +{ + struct mm_mimepart *part; + struct mm_mimeheader *hdr; + char *buf, *hdrbuf; + size_t headers_length, tmp_length; + + headers_length = 1; + buf = NULL; + + part = mm_context_getpart(ctx, 0); + if (part == NULL) { + return -1; + } + + /* Initialize our buffer */ + if ((buf = (char *)xmalloc(headers_length)) == NULL) { + mm_errno = MM_ERROR_ERRNO; + goto cleanup; + } + *buf = '\0'; + + /* Store each envelope header */ + TAILQ_FOREACH(hdr, &part->headers, next) { + tmp_length = strlen(hdr->name) + strlen(hdr->value) + + strlen(": \r\n"); + hdrbuf = (char *) xrealloc(buf, headers_length + tmp_length); + if (hdrbuf == NULL) { + mm_errno = MM_ERROR_ERRNO; + goto cleanup; + } + + headers_length += tmp_length; + buf = hdrbuf; + + strlcat(buf, hdr->name, headers_length); + strlcat(buf, ": ", headers_length); + strlcat(buf, hdr->value, headers_length); + strlcat(buf, "\r\n", headers_length); + } + + /* Construct and store MIME headers */ + if (part->type != NULL) { + char *typebuf; + typebuf = mm_content_tostring(part->type); + if (typebuf == NULL) { + goto cleanup; + } + tmp_length = strlen(typebuf) + strlen("\r\n"); + + hdrbuf = (char *) xrealloc(buf, headers_length + tmp_length); + if (hdrbuf == NULL) { + mm_errno = MM_ERROR_ERRNO; + goto cleanup; + } + + headers_length += tmp_length; + buf = hdrbuf; + + strlcat(buf, typebuf, headers_length); + strlcat(buf, "\r\n", headers_length); + } + + *result = buf; + *length = headers_length; + + return 0; + +cleanup: + if (buf != NULL) { + xfree(buf); + buf = NULL; + } + *result = NULL; + *length = 0; + return -1; +} + +/** + * Sets a header field in the envelope + * + * @param ctx A valid MiniMIME context + * @param name The name of the header field to set + * @param fmt A format string specifying the value of the header field + * @return 0 on success or -1 on failure + * + * This function generates a new MIME header and attaches it to the first + * MIME part (the envelope) found in the given context. If no part is + * attached already, the function will return an error. The function will + * store a copy of ``name'' as the header's name field, and dynamically + * allocate the memory needed to build the format string. + */ +int +mm_envelope_setheader(MM_CTX *ctx, const char *name, const char *fmt, ...) +{ + va_list ap; + char *buf; + struct mm_mimeheader *hdr; + struct mm_mimepart *part; + + part = mm_context_getpart(ctx, 0); + if (part == NULL) { + return(-1); + } + + hdr = mm_mimeheader_new(); + if (hdr == NULL) { + return(-1); + } + + hdr->name = xstrdup(name); + + va_start(ap, fmt); + if (vasprintf(&buf, fmt, ap) == -1) { + goto cleanup; + } + va_end(ap); + + hdr->value = buf; + + if (mm_mimepart_attachheader(part, hdr) == -1) { + goto cleanup; + } + + return(0); + +cleanup: + if (hdr != NULL) { + if (hdr->name != NULL) { + xfree(hdr->name); + hdr->name = NULL; + } + if (hdr->value != NULL) { + xfree(hdr->value); + hdr->value = NULL; + } + } + return(-1); +} + +/** + * Gets the list of recipients for a MIME message + * + * @param ctx A valid MiniMIME context + * @param result Where to store the result + * @param length Where to store the length of the result + * @returns 0 on success or -1 on error + * @note Sets mm_errno on error + * + * This functions gets the list of recipients for a given MIME message. It + * does so by concatenating the "From" and "Cc" header fields, and storing + * the results in recipients. The memory needed to store the result is + * allocated dynamically, and the total length of the result is stored in + * length. + * + * One should take care to free() the result once it's not needed anymore. + */ +int +mm_envelope_getrecipients(MM_CTX *ctx, char **result, size_t *length) +{ + struct mm_mimepart *part; + struct mm_mimeheader *to, *cc; + size_t recipients_length; + + part = mm_context_getpart(ctx, 0); + if (part == NULL) { + return -1; + } + + to = mm_mimepart_getheaderbyname(part, "From", 0); + cc = mm_mimepart_getheaderbyname(part, "Cc", 0); + + if (to == NULL || cc == NULL) { + *result = NULL; + *length = 0; + return -1; + } + + if (to != NULL) { + recipients_length += strlen(to->value); + } + if (cc != NULL) { + recipients_length += strlen(cc->value); + } + + return 0; +} + +/** @} */ diff --git a/main/minimime/mm_error.c b/main/minimime/mm_error.c new file mode 100644 index 0000000000..5b27bf724c --- /dev/null +++ b/main/minimime/mm_error.c @@ -0,0 +1,123 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <assert.h> +#include <errno.h> + +#include "mm_internal.h" +#include "mm_util.h" + +/** @file mm_error.c + * + * This module contains functions for MiniMIME error information/manipulation + */ + +/** @defgroup error MiniMIME error functions */ + +/** + * Initializes the global error object + * + * @ingroup error + * + * This function initializes the global error object mm_error. This must be + * done when the library is initialized, and is automatically called from + * mm_init_library(). + */ +void +mm_error_init(void) +{ + mm_error.error_id = 0; + mm_error.error_where = 0; + mm_error.lineno = 0; + memset(&mm_error.error_msg, '\0', sizeof(mm_error.error_msg)); +} + +/** + * Sets a descriptive error message + * + * @param fmt The error message as format string + * @ingroup error + * + * This function is called from the various MiniMIME modules in case an + * error occured. Should never be called by the user. + */ +void +mm_error_setmsg(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vsnprintf(mm_error.error_msg, sizeof(mm_error.error_msg), fmt, ap); + va_end(ap); + +} + +void +mm_error_setlineno(int lineno) +{ + mm_error.lineno = lineno; +} + +/** + * Retrieves the current error message + * + * @return The currently set error message + * @ingroup error + * + * This function can be used to retrieve a descriptive error message for the + * current error, much like strerror() function of libc. When this function + * is called without an error being set, it returns the string "No error". + * The string returned does not need to be freed, since it is not dynamically + * allocated by the library. + */ +char * +mm_error_string(void) +{ + if (mm_errno != MM_ERROR_ERRNO && mm_error.error_msg[0] == '\0') { + return "No error"; + } else if (mm_errno == MM_ERROR_ERRNO) { + return strerror(errno); + } else { + return mm_error.error_msg; + } +} + +int +mm_error_lineno(void) +{ + return mm_error.lineno; +} diff --git a/main/minimime/mm_header.c b/main/minimime/mm_header.c new file mode 100644 index 0000000000..827c19cacd --- /dev/null +++ b/main/minimime/mm_header.c @@ -0,0 +1,213 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" +#include "mm_util.h" + +/** @file mm_header.c + * + * This module contains functions for manipulating MIME headers + */ + +/** + * Creates a new MIME header object + * + * @return A new and initialized MIME header object + * @see mm_mimeheader_free + * + * This function creates and initializes a new MIME header object, which must + * later be freed using mm_mimeheader_free() + */ +struct mm_mimeheader * +mm_mimeheader_new(void) +{ + struct mm_mimeheader *header; + + header = (struct mm_mimeheader *)xmalloc(sizeof(struct mm_mimeheader)); + + header->name = NULL; + header->value = NULL; + TAILQ_INIT(&header->params); + + return header; +} + +/** + * Frees a MIME header object + * + * @param header The MIME header object which to free + */ +void +mm_mimeheader_free(struct mm_mimeheader *header) +{ + struct mm_param *param; + assert(header != NULL); + + if (header->name != NULL) { + xfree(header->name); + header->name = NULL; + } + if (header->value != NULL) { + xfree(header->value); + header->value = NULL; + } + + TAILQ_FOREACH(param, &header->params, next) { + TAILQ_REMOVE(&header->params, param, next); + mm_param_free(param); + } +xfree(header); + header = NULL; +} + +/** + * Creates a new MIME header, but does no checks whatsoever (create as-is) + */ +struct mm_mimeheader * +mm_mimeheader_generate(const char *name, const char *value) +{ + struct mm_mimeheader *header; + + header = mm_mimeheader_new(); + + header->name = xstrdup(name); + header->value = xstrdup(value); + + return header; +} + +/** + * Attaches a parameter to a MimeHeader object + * + * @param hdr The target MimeHeader object + * @param param The parameter to attach + * @return 0 on success and -1 on failure + * @ingroup mimeheader + */ +int +mm_mimeheader_attachparam(struct mm_mimeheader *hdr, struct mm_param *param) +{ + assert(hdr != NULL); + assert(param != NULL); + + if (TAILQ_EMPTY(&hdr->params)) { + TAILQ_INSERT_HEAD(&hdr->params, param, next); + } else { + TAILQ_INSERT_TAIL(&hdr->params, param, next); + } + + return 0; +} + + +/** + * Gets a parameter value from a MimeHeader object. + * + * @param hdr the MimeHeader object + * @param name the name of the parameter to retrieve + * @return The value of the parameter on success or a NULL pointer on failure + * @ingroup mimeheader + */ +char * +mm_mimeheader_getparambyname(struct mm_mimeheader *hdr, const char *name) +{ + struct mm_param *param; + + assert(hdr != NULL); + + TAILQ_FOREACH(param, &hdr->params, next) { + if (!strcasecmp(param->name, name)) { + return param->value; + } + } + + return NULL; +} + +int +mm_mimeheader_uncomment(struct mm_mimeheader *header) +{ + char *new; + + assert(header != NULL); + assert(header->name != NULL); + assert(header->value != NULL); + + new = mm_uncomment(header->value); + if (new == NULL) + return -1; + + xfree(header->value); + header->value = new; + + return 0; +} + +int +mm_mimeheader_uncommentbyname(struct mm_mimepart *part, const char *name) +{ + struct mm_mimeheader *header; + + TAILQ_FOREACH(header, &part->headers, next) { + if (!strcasecmp(header->name, name)) { + return mm_mimeheader_uncomment(header); + } + } + + /* Not found */ + return -1; +} + +int +mm_mimeheader_uncommentall(struct mm_mimepart *part) +{ + struct mm_mimeheader *header; + int ret, r; + + ret = 0; + + TAILQ_FOREACH(header, &part->headers, next) { + if ((r = mm_mimeheader_uncomment(header)) == -1) { + ret = -1; + } + } + + return ret; +} diff --git a/main/minimime/mm_init.c b/main/minimime/mm_init.c new file mode 100644 index 0000000000..2ec37db6b4 --- /dev/null +++ b/main/minimime/mm_init.c @@ -0,0 +1,65 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#include "mm_internal.h" + +int mm_errno; +struct mm_error_data mm_error; +static int mm_initialized; +struct mm_codecs codecs; + +int +mm_library_init(void) +{ + assert(mm_initialized != 1); + + mm_errno = MM_ERROR_NONE; + mm_initialized = 1; + + SLIST_INIT(&codecs); + + mm_error_init(); + + return 0; +} + +int +mm_library_isinitialized(void) +{ + return mm_initialized; +} diff --git a/main/minimime/mm_internal.h b/main/minimime/mm_internal.h new file mode 100644 index 0000000000..155591487c --- /dev/null +++ b/main/minimime/mm_internal.h @@ -0,0 +1,65 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** @file mm_internal.h + * Data definitions for MiniMIME + */ +#ifndef _MM_INTERNAL_H_INCLUDED +#define _MM_INTERNAL_H_INCLUDED + +#include "mm.h" + +#define debugp(m, ...) do { \ + fprintf(stderr, "%s:%d:: ", __FILE__, __LINE__); \ + fprintf(stderr, m, ## __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + fflush(stderr); \ +} while (0); + +/** + * @{ + * @name Utility functions + */ +#ifndef __HAVE_LEAK_DETECTION +void *xmalloc(size_t); +void *xrealloc(void *, size_t); +void xfree(void *); +char *xstrdup(const char *); +#endif + +char *xstrsep(char **, const char *); + +/* THIS FILE IS INTENTIONALLY LEFT BLANK */ + +#endif /* ! _MM_INTERNAL_H_INCLUDED */ diff --git a/main/minimime/mm_mem.c b/main/minimime/mm_mem.c new file mode 100644 index 0000000000..91ad3b987f --- /dev/null +++ b/main/minimime/mm_mem.c @@ -0,0 +1,171 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/types.h> +#include <sys/param.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <err.h> +#include <assert.h> + +#include "mm_internal.h" + +#ifdef __HAVE_LEAK_DETECTION +# include "mm_mem.h" + +static struct MM_chunks chunks; + +void * +MM_malloc(size_t size, char *filename, int line) +{ + struct MM_mem_chunk *chunk; + void *pointer; + + pointer = malloc(size); + if (pointer == NULL) + err(1, "malloc"); + + chunk = (struct MM_mem_chunk *)malloc(sizeof(struct MM_mem_chunk)); + if (chunk == NULL) + err(1, "malloc"); + + chunk->address = pointer; + chunk->size = size; + chunk->filename = filename; + chunk->line = line; + + TAILQ_INSERT_TAIL(&chunks, chunk, next); + + return pointer; +} + +char * +MM_strdup(const char *s, char *filename, int line) +{ + char *r; + + r = (char *)MM_malloc(strlen(s)+1, filename, line); + strlcpy(r, s, strlen(s) + 1); + if (strlen(r) != strlen(s)) { + debugp("%d:%d", strlen(s), strlen(r)); + } + return r; + +} + +void * +MM_realloc(void *p, size_t new_size, char *filename, int line) +{ + void *r; + void *a; + struct MM_mem_chunk *chunk; + struct MM_mem_chunk *last; + + a = p; + chunk = NULL; + last = NULL; + + assert(new_size > 0); + + TAILQ_FOREACH(chunk, &chunks, next) { + if (chunk->address == p) { + last = chunk; + } + } + + if (last == NULL) { + debugp("MM_realloc: did not find chunk at %p (%s:%d) " + ", creating new", p, filename, line); + return MM_malloc(new_size, filename, line); + } + + r = realloc(p, new_size); + if (r == NULL) + return NULL; + + last->address = r; + last->size = new_size; + last->filename = filename; + last->line = line; + + return r; +} + +void +MM_free(void *pointer, char *filename, int line, char *name) +{ + struct MM_mem_chunk *chunk, *nxt; + + for (chunk = TAILQ_FIRST(&chunks); chunk != TAILQ_END(&chunks); + chunk = nxt) { + nxt = TAILQ_NEXT(&chunks, next); + if (chunk->address == pointer) { + TAILQ_REMOVE(&chunks, chunk, next); + free(chunk->address); + free(chunk); + return; + } + } + + debugp("FREE: did not find storage %s (at %p), %s:%d", name, pointer, + filename, line); +} + +void +MM_leakd_flush(void) +{ + debugp("flushing memory informations"); + while (!TAILQ_EMPTY(&chunks)) + SLIST_REMOVE_HEAD(&chunks, next); +} + +void +MM_leakd_printallocated(void) +{ + struct MM_mem_chunk *chunk; + debugp("printing dynamic memory allocations"); + TAILQ_FOREACH(chunk, &chunks, next) { + debugp(" chunk: %p (alloc'ed at %s:%d, size %d)\n", + chunk->address, chunk->filename, chunk->line, chunk->size); + } +} + +void +MM_leakd_init(void) +{ + TAILQ_INIT(&chunks); +} + +#endif /* !__HAVE_LEAK_DETECTOR */ diff --git a/main/minimime/mm_mem.h b/main/minimime/mm_mem.h new file mode 100644 index 0000000000..5b00e4beea --- /dev/null +++ b/main/minimime/mm_mem.h @@ -0,0 +1,32 @@ +#ifndef __MEM_H +#define __MEM_H + +#ifdef __HAVE_LEAK_DETECTION + +#define NAMEOF(v) #v +#define xmalloc(x) MM_malloc(x, __FILE__, __LINE__) +#define xfree(x) MM_free(x, __FILE__, __LINE__, NAMEOF(x)) +#define xstrdup(x) MM_strdup(x, __FILE__, __LINE__) +#define xrealloc(x, y) MM_realloc(x, y, __FILE__, __LINE__) + +TAILQ_HEAD(MM_chunks, MM_mem_chunk); + +struct MM_mem_chunk { + void *address; + const char *filename; + u_int32_t line; + size_t size; + + TAILQ_ENTRY(MM_mem_chunk) next; +}; + +void *MM_malloc(size_t, char *, int); +void *MM_realloc(void *, size_t, char *, int); +void MM_free(void *, char *, int, char *); +char *MM_strdup(const char *, char *, int); +void MM_leakd_init(void); +void MM_leakd_printallocated(void); +void MM_leakd_flush(void); + +#endif /* __HAVE_LEAK_DETECTION */ +#endif /* ! HAVE_MEM_H */ diff --git a/main/minimime/mm_mimepart.c b/main/minimime/mm_mimepart.c new file mode 100644 index 0000000000..3d22874278 --- /dev/null +++ b/main/minimime/mm_mimepart.c @@ -0,0 +1,657 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" + +/** @file mm_mimepart.c + * + * This module contains functions for manipulating MIME header objects. + */ + +/** @defgroup mimepart Accessing and manipulating MIME parts + * + * MIME parts, also called entities, represent the structure of a MIME + * message. ``Normal'' internet messages have only a single part, and + * are called ``flat'' messages. Multipart messages have more then one + * part, and each MIME part can have it's own subset of headers. + * + * Provided here are functions to easily access all informations from + * a MIME part, including their specific headers and bodies. + */ + +/** @{ + * @name Creating and destroying MIME parts + */ + +/** + * Allocates memory for a new mm_mimepart structure and initializes it. + * + * @return A pointer to a struct of type mm_mimeheader or NULL on failure + * @see mm_mimepart_free + * @note The memory must be freed by using mm_mimepart_free() later on. + */ +struct mm_mimepart * +mm_mimepart_new(void) +{ + struct mm_mimepart *part; + + part = (struct mm_mimepart *)xmalloc(sizeof(struct mm_mimepart)); + + TAILQ_INIT(&part->headers); + + part->opaque_length = 0; + part->opaque_body = NULL; + + part->length = 0; + part->body = NULL; + + part->type = NULL; + + return part; +} + +/** + * Creates a MIME part from a file + * + * @param filename The name of the file to create the MIME part from + * @return A pointer to a new MIME part object + * + * This function creates a new MIME part object from a file. The object should + * be freed using mm_mimepart_free() later on. This function does NOT set the + * Content-Type and neither does any encoding work. + */ +struct mm_mimepart * +mm_mimepart_fromfile(const char *filename) +{ + int fd; + char *data; + size_t r; + struct stat st; + struct mm_mimepart *part; + + mm_errno = MM_ERROR_NONE; + + if ((fd = open(filename, O_RDONLY)) == -1) { + mm_errno = MM_ERROR_ERRNO; + return NULL; + } + + if ((stat(filename, &st)) == -1) { + mm_errno = MM_ERROR_ERRNO; + close(fd); + return NULL; + } + + data = xmalloc(st.st_size); + r = read(fd, data, st.st_size); + if (r != st.st_size) { + mm_errno = MM_ERROR_ERRNO; + close(fd); + return(NULL); + } + + data[r] = '\0'; + close(fd); + + part = mm_mimepart_new(); + part->length = r; + part->body = data; + + return part; +} + + +/** + * Frees all memory allocated by a mm_mimepart object. + * + * @param part A pointer to an allocated mm_mimepart object + * @see mm_mimepart_new + */ +void +mm_mimepart_free(struct mm_mimepart *part) +{ + struct mm_mimeheader *header; + + assert(part != NULL); + + TAILQ_FOREACH(header, &part->headers, next) { + mm_mimeheader_free(header); + TAILQ_REMOVE(&part->headers, header, next); + } + + if (part->opaque_body != NULL) { + xfree(part->opaque_body); + part->opaque_body = NULL; + part->body = NULL; + } else if (part->body != NULL) { + xfree(part->body); + part->body = NULL; + } + + if (part->type != NULL) { + mm_content_free(part->type); + part->type = NULL; + } + + xfree(part); + part = NULL; +} + +/** @} */ + +/** @{ + * @name Accessing the MIME part's mail header + */ + +/** + * Attaches a mm_mimeheader object to a MIME part + * + * @param part A valid MIME part object + * @param header A valid MIME header object + * @return 0 if successfull or -1 if the header could not be attached + */ +int +mm_mimepart_attachheader(struct mm_mimepart *part, struct mm_mimeheader *header) +{ + assert(part != NULL); + assert(header != NULL); + + if (TAILQ_EMPTY(&part->headers)) { + TAILQ_INSERT_HEAD(&part->headers, header, next); + } else { + TAILQ_INSERT_TAIL(&part->headers, header, next); + } + + return(0); +} + +/** + * Retrieves the number of MIME headers available in a MIME part + * + * @param part A valid MIME part object + * @return The number of MIME headers within the MIME part + */ +int +mm_mimepart_countheaders(struct mm_mimepart *part) +{ + int found; + struct mm_mimeheader *header; + + assert(part != NULL); + + found = 0; + + TAILQ_FOREACH(header, &part->headers, next) { + found++; + } + + return found; +} + +/** + * Retrieves the number of MIME headers with a given name in a MIME part + * + * @param part A valid MIME part object + * @param name The name of the MIME header which to count for + * @return The number of MIME headers within the MIME part + */ +int +mm_mimepart_countheaderbyname(struct mm_mimepart *part, const char *name) +{ + int found; + struct mm_mimeheader *header; + + assert(part != NULL); + + found = 0; + + TAILQ_FOREACH(header, &part->headers, next) { + if (strcasecmp(header->name, name) == 0) { + found++; + } + } + + return found; +} + +/** + * Get a MIME header object from a MIME part + * + * @param part A valid MIME part object + * @param name The name of the MIME header which to retrieve + * @param idx Which header field to get (in case of multiple headers of the + * same name). + * @return A pointer to the requested MIME header on success, or NULL if there + * either isn't a header with the requested name or idx is out of + * range. + */ +struct mm_mimeheader * +mm_mimepart_getheaderbyname(struct mm_mimepart *part, const char *name, int idx) +{ + struct mm_mimeheader *header; + int curidx; + + curidx = 0; + + TAILQ_FOREACH(header, &part->headers, next) { + if (!strcasecmp(header->name, name)) { + if (curidx == idx) + return header; + else + curidx++; + } + } + + /* Not found */ + return NULL; +} + +/** + * Gets the value of a MIME header object + * + * @param part A valid MIME part object + * @param name The name of the header field to get the value from + * @param idx The index of the header field to get, in case there are multiple + * headers with the same name. + * @return A pointer to the requested value on success, or NULL if there either + * isn't a header with the requested name or idx is out of range. + * + */ +const char * +mm_mimepart_getheadervalue(struct mm_mimepart *part, const char *name, int idx) +{ + struct mm_mimeheader *header; + + header = mm_mimepart_getheaderbyname(part, name, idx); + if (header == NULL) + return NULL; + else + return header->value; +} + +/** + * Initializes a header loop for a given MIME part + * + * @param part A valid MIME part object + * @param id The address of a MIME header object (to allow reentrance) + * @return 0 on success or -1 on failure + * @see mm_mimepart_headers_next + * + * Looping through headers can be done in the following way: + * + * @code + * struct mm_mimeheader *header, *lheader; + * + * mm_mimepart_headers_start(part, &lheader); + * + * while ((header = mm_mimepart_headers_next(part, &lheader)) != NULL) { + * printf("%s: %s\n", header->name, header->value); + * } + * + * @endcode + * + * For convienience, the macro mm_mimepart_headers_foreach() can be used to + * loop through headers in a one-shot manner. + */ +int +mm_mimepart_headers_start(struct mm_mimepart *part, struct mm_mimeheader **id) +{ + assert(part != NULL); + + if (TAILQ_EMPTY(&part->headers)) { + return -1; + } + *id = NULL; + return 0; +} + +/** + * Returns the next MIME header of a given MIME part object + * + * @param part A valid MIME part object + * @param id A previously initialized MIME header object + * @return A pointer to the MIME header object or NULL if end of headers was + * reached. + * @see mm_mimepart_headers_start + */ +struct mm_mimeheader * +mm_mimepart_headers_next(struct mm_mimepart *part, struct mm_mimeheader **id) +{ + struct mm_mimeheader *header; + + assert(part != NULL); + + if (*id == NULL) { + header = TAILQ_FIRST(&part->headers); + } else { + header = TAILQ_NEXT(*id, next); + } + *id = header; + + return header; +} + +/** @} */ + +/** @{ + * @name Accessing and manipulating the MIME part's body + */ + +/** + * Gets the pointer to the MIME part's body data + * + * @param part A valid MIME part object + * @param opaque Whether to get the opaque part or not + * @return A pointer to the MIME part's body + * @see mm_mimepart_setbody + * + */ +char * +mm_mimepart_getbody(struct mm_mimepart *part, int opaque) +{ + assert(part != NULL); + + if (opaque) + return part->opaque_body; + else + return part->body; +} + +/** + * Sets the MIME part's body data + * + * @param part A valid MIME part object + * @param data A pointer to the data which to set + * @see mm_mimepart_getbody + * + * This functions sets the body data for a given MIME part. The string pointed + * to by data must be NUL-terminated. The data is copied into the MIME part's + * body, and thus, the memory pointed to by data can be freed after the + * operation. + */ +void +mm_mimepart_setbody(struct mm_mimepart *part, const char *data, int opaque) +{ + assert(part != NULL); + assert(data != NULL); + + if (opaque) { + part->opaque_body = xstrdup(data); + part->body = part->opaque_body; + } else { + part->body = xstrdup(data); + } + part->length = strlen(data); +} + +/** + * Gets the length of a given MIME part object + * + * @param part A valid MIME part object + * @returns The size of the part's body in byte. + * + * This function returns the total length of the given MIME part's body. The + * length does not include the headers of the MIME parts. If the function + * returns 0, no body part is set currently. + */ +size_t +mm_mimepart_getlength(struct mm_mimepart *part) +{ + assert(part != NULL); + + return part->length; +} + + +/** + * Decodes a MIME part according to it's encoding using MiniMIME codecs + * + * @param A valid MIME part object + * @return 0 if the MIME part could be successfully decoded or -1 if not + * @note Sets mm_errno on error + * + * This function decodes the body of a MIME part with a registered decoder + * according to it's Content-Transfer-Encoding header field. + */ +char * +mm_mimepart_decode(struct mm_mimepart *part) +{ + extern struct mm_codecs codecs; + struct mm_codec *codec; + void *decoded; + + assert(part != NULL); + assert(part->type != NULL); + + decoded = NULL; + + /* No encoding associated */ + if (part->type->encstring == NULL) + return NULL; + + /* Loop through codecs and find a suitable one */ + SLIST_FOREACH(codec, &codecs, next) { + if (!strcasecmp(part->type->encstring, codec->encoding)) { + decoded = codec->decoder((char *)part->body); + break; + } + } + + return decoded; +} + +/** + * Creates an ASCII representation of the given MIME part + * + * @param part A valid MIME part object + * @param result Where to store the result + * @param length Where to store the length of the result + * @param opaque Whether to use the opaque MIME part + * @returtn 0 on success or -1 on error. + * @see mm_context_flatten + * + * This function creates an ASCII representation of a given MIME part. It will + * dynamically allocate the memory needed and stores the result in the memory + * region pointed to by result. The length of the result will be stored in + * length. If opaque is set to 1, mm_mimepart_flatten will store an opaque + * version of the MIME part in result, which means no headers will be created + * or sanitized. This is particulary useful if the part is digitally signed by + * e.g. PGP, and the signature spans the header fields of the part in question. + * + */ +int +mm_mimepart_flatten(struct mm_mimepart *part, char **result, size_t *length, + int opaque) +{ + size_t part_length; + char *buf; + char *ct_hdr; + + *result = NULL; + *length = 0; + buf = NULL; + ct_hdr = NULL; + part_length = 0; + + if (opaque && part->opaque_body != NULL) { + part_length = strlen(part->opaque_body); + *result = xstrdup(part->opaque_body); + *length = part_length; + return(0); + } else { + if (part->type == NULL) { + return(-1); + } + + ct_hdr = mm_content_tostring(part->type); + if (ct_hdr == NULL) { + return(-1); + } + + part_length += strlen(ct_hdr) + 2; + part_length += strlen("\r\n") * 2; + part_length += strlen(part->body); + + if (part_length < 0) { + goto cleanup; + } + + buf = (char *) xmalloc(part_length); + if (buf == NULL) { + goto cleanup; + } + + snprintf(buf, part_length, + "%s\r\n\r\n%s\r\n", + ct_hdr, + part->body); + + xfree(ct_hdr); + ct_hdr = NULL; + + *result = buf; + *length = part_length; + } + + return(0); + +cleanup: + if (ct_hdr != NULL) { + xfree(ct_hdr); + ct_hdr = NULL; + } + if (buf != NULL) { + xfree(buf); + buf = NULL; + } + + *result = NULL; + *length = 0; + + return -1; +} + +/** + * Sets the default Content-Type for a given MIME part + * + * @param part A valid MIME part object + * @param part Whether the Content-Type should be for composite or not + * @return 0 on success or -1 on failure + * + * This function sets a default Content-Type according to RFC 2045 with a value + * of "text/plain; charset="us-ascii"". This function should only be used if + * the MIME part in question does not have a valid Content-Type specification. + */ +int +mm_mimepart_setdefaultcontenttype(struct mm_mimepart *part, int composite) +{ + struct mm_content *type; + struct mm_param *param; + + if (part == NULL) { + return(-1); + } + + if (part->type != NULL) { + mm_content_free(part->type); + part->type = NULL; + } + + type = mm_content_new(); + if (composite) { + type->maintype = xstrdup("multipart"); + type->subtype = xstrdup("mixed"); + } else { + type->maintype = xstrdup("text"); + type->subtype = xstrdup("plain"); + param = mm_param_new(); + param->name = xstrdup("charset"); + param->value = xstrdup("us-ascii"); + mm_content_attachtypeparam(type, param); + } + + mm_mimepart_attachcontenttype(part, type); + + return (0); +} + +/** @{ + * @name Accessing the MIME part's Content-Type information + */ + +/** + * Attaches a context type object to a MIME part + * + * @param part A valid MIME part object + * @param ct The content type object to attach + * @return Nothing + * + * This function attaches a Content-Type object to a MIME part. It does not + * care whether the Content-Type suites the actual content in the MIME part, + * so the programmer should take care of that. + */ +void +mm_mimepart_attachcontenttype(struct mm_mimepart *part, struct mm_content *ct) +{ + part->type = ct; +} + +/** + * Gets the Content-Type of a given MIME part object + * + * @param part A valid MIME part object + * @return The Content-Type object of the specified MIME part + * + * This function returns a pointer to the Content-Type object of the given + * MIME part. This pointer might be set to NULL, indicating that there is + * no Content-Type object for the given MIME part currently. + */ +struct mm_content * +mm_mimepart_getcontent(struct mm_mimepart *part) +{ + assert(part != NULL); + + return part->type; +} + +/** @} */ diff --git a/main/minimime/mm_mimeutil.c b/main/minimime/mm_mimeutil.c new file mode 100644 index 0000000000..4e52a6acfe --- /dev/null +++ b/main/minimime/mm_mimeutil.c @@ -0,0 +1,136 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2004 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/time.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <assert.h> + +#include "mm_internal.h" + +#define MM_DATE_LENGTH 50 + +static const char boundary_charset[] = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.="; + +/** @file mm_mimeutil.c + * + * This module contains various MIME related utility functions. + */ + +/** @defgroup mimeutil MIME related utility functions */ + +/** + * Generates an RFC 2822 conform date string + * + * @param timezone Whether to include timezone information + * @returns A pointer to the actual date string + * @note The pointer returned must be freed some time + * + * This function generates an RFC 2822 conform date string to use in message + * headers. It allocates memory to hold the string and returns a pointer to + * it. The generated date is in the format (example): + * + * Thu, 25 December 2003 16:35:22 +0100 (CET) + * + * This function dynamically allocates memory and returns a pointer to it. + * This memory should be released with free() once not needed anymore. + */ +int +mm_mimeutil_gendate(char **result) +{ + time_t curtime; + struct tm *curtm; + + if (result != NULL) { + curtime = time(NULL); + curtm = localtime(&curtime); + if ((*result = (char *) malloc(MM_DATE_LENGTH)) == NULL) { + return(-1); + } + return(strftime(*result, MM_DATE_LENGTH, + "%a, %d %b %G %T %z (%Z)", curtm)); + } else { + return(-1); + } +} + + +int +mm_mimeutil_genboundary(char *prefix, size_t length, char **result) +{ + size_t total; + size_t preflen; + struct timeval curtm; + int i; + int pos; + + total = 0; + preflen = 0; + + if (result == NULL) { + return(-1); + } + *result = NULL; + + gettimeofday(&curtm, NULL); + srandom(curtm.tv_usec); + + if (prefix != NULL) { + total = strlen(prefix); + preflen = total; + } + + total += length; + + if ((*result = (char *) xmalloc(total + 1)) == NULL) { + mm_errno = MM_ERROR_ERRNO; + return(-1); + } + + *result = '\0'; + + if (prefix != NULL) { + strlcat(*result, prefix, total); + } + + for (i = 0; i < length - 1; i++) { + pos = random() % strlen(boundary_charset); + *result[i + preflen] = boundary_charset[pos]; + } + *result[total] = '\0'; + + return (0); +} diff --git a/main/minimime/mm_param.c b/main/minimime/mm_param.c new file mode 100644 index 0000000000..8877c3e131 --- /dev/null +++ b/main/minimime/mm_param.c @@ -0,0 +1,215 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" +#include "mm_util.h" + +/** + * @file mm_param.c + * + * Functions to manipulate MIME parameters + */ + +/** @defgroup param Accessing and manipulating MIME parameters */ + +/** @{ + * + * @name Functions for manipulating MIME parameters + * + * MIME parameters are properties attached to certain MIME headers, such as + * Content-Type and Content-Disposition. MIME parameters have a textual + * representations as in <i>name=value</i>. They contain important information + * about the MIME structure of a message, such as the boundary string used, + * which charset was used to encode the message and so on. This module + * provides simple to use functions to query or set MIME parameters. + * + * Each MIME header may hold an arbitrary amount of such parameters, which + * are delimeted by each other with a semicolon. + */ + +/** + * Creates a new object to hold a MIME parameter. + * + * @return An object representing a MIME parameter + * @see mm_param_free + * @note The allocated memory must later be freed using mm_param_free() + */ +struct mm_param * +mm_param_new(void) +{ + struct mm_param *param; + + param = (struct mm_param *)xmalloc(sizeof(struct mm_param)); + + param->name = NULL; + param->value = NULL; + + return param; +} + +/** + * Releases all memory associated with a MIME parameter object. + * + * @param param A valid MIME parameter object to be freed + * @return Nothing + * @see mm_param_new + */ +void +mm_param_free(struct mm_param *param) +{ + assert(param != NULL); + + if (param->name != NULL) { + xfree(param->name); + param->name = NULL; + } + if (param->value != NULL) { + xfree(param->value); + param->value = NULL; + } + xfree(param); +} + +/** + * Generates a new Content-Type parameter with the given name and value + * + * @param name The name of the MIME parameter + * @param value The value of the MIME parameter + * @returns A new MIME parameter object + * @see mm_param_free + * @see mm_param_new + * + * This function generates a new MIME parameter, with the name + * and value given as the arguments. The needed memory for the operation + * is allocated dynamically. It stores a copy of name and value in the + * actual object, so the memory holding the arguments can safely be + * freed after successfull return of this function. + */ +struct mm_param * +mm_param_generate(const char *name, const char *value) +{ + struct mm_param *param; + + param = mm_param_new(); + + param->name = xstrdup(name); + param->value = xstrdup(value); + + return param; +} + +/** + * Sets the name of the given MIME parameter + * + * @param param A valid MIME parameter object + * @param name The new name of the parameter + * @param copy If set to > 0, copy the value stored in name + * @returns The address of the previous name for passing to free() + */ +char * +mm_param_setname(struct mm_param *param, const char *name, int copy) +{ + char *retadr; + assert(param != NULL); + + retadr = param->name; + + if (copy) + param->name = xstrdup(name); + else + param->name = (char *)name; + + return retadr; +} + +/** + * Sets the value of the given MIME parameter + * + * @param param A valid MIME parameter object + * @param name The new value for the parameter + * @param copy If set to > 0, copy the value stored in value + * @returns The address of the previous value for passing to free() + */ +char * +mm_param_setvalue(struct mm_param *param, const char *value, int copy) +{ + char *retadr; + assert(param != NULL); + + retadr = param->value; + + if (copy) + param->value = xstrdup(value); + else + param->value = (char *)value; + + return retadr; +} + +/** + * Gets the name of a MIME parameter object + * + * @param param A valid MIME parameter object + * @returns The name of the MIME parameter + */ +const char * +mm_param_getname(struct mm_param *param) +{ + assert(param != NULL); + return param->name; +} + +/** + * Gets the value of a MIME parameter object + * + * @param param A valid MIME parameter object + * @returns The value of the MIME parameter + */ +const char * +mm_param_getvalue(struct mm_param *param) +{ + assert(param != NULL); + return param->value; +} + +/** @} */ diff --git a/main/minimime/mm_parse.c b/main/minimime/mm_parse.c new file mode 100644 index 0000000000..5080f5bc1f --- /dev/null +++ b/main/minimime/mm_parse.c @@ -0,0 +1,181 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" +#include "mm_util.h" + +#include "mimeparser.h" +#include "mimeparser.tab.h" + +int yyparse (struct parser_state *pstate, void *yyscanner); +void PARSER_initialize(struct parser_state *, void *); +void PARSER_setbuffer(const char *); +void PARSER_setfp(FILE *,void *yyscanner); + +/** @file mm_parse.c + * + * Functions to parse MIME messages + */ + +/** + * Parses a NUL-terminated string into a MiniMIME context + * + * @param ctx A valid MiniMIME context object + * @param text The NUL-terminated string to parse + * @param parsemode The parsemode + * @param flags The flags to pass to the parser + * @returns 0 on success or -1 on failure + * @note Sets mm_errno if an error occurs + * + * This function parses a MIME message, stored in the memory region pointed to + * by text (must be NUL-terminated) according to the parseflags and stores the + * results in the MiniMIME context specified by ctx. + * + * The following modes can be used to specify how the message should be + * parsed: + * + * - MM_PARSE_STRICT: Do not tolerate MIME violations + * - MM_PARSE_LOOSE: Tolerate as much MIME violations as possible + * + * The context needs to be initialized before using mm_context_new() and may + * be freed using mm_context_free(). + */ +int +mm_parse_mem(MM_CTX *ctx, const char *text, int parsemode, int flags) +{ + void *yyscanner; + int res; + struct parser_state pstate; + typedef void *yyscan_t; + int mimeparser_yylex_init (yyscan_t* scanner); + int mimeparser_yylex_destroy (yyscan_t yyscanner ); + + pstate.ctx = ctx; + pstate.parsemode = parsemode; + + mimeparser_yylex_init(&yyscanner); + PARSER_initialize(&pstate, yyscanner); + + PARSER_setbuffer(text); + PARSER_setfp(NULL,yyscanner); + + res = mimeparser_yyparse(&pstate,yyscanner); + mimeparser_yylex_destroy(yyscanner); + return res; +} + +/** + * Parses a file into a MiniMIME context + * + * @param ctx A valid MiniMIME context object + * @param filename The name of the file to parse + * @param parsemode The parsemode + * @param flags The flags to pass to the parser + * @returns 0 on success or -1 on failure + * @note Sets mm_errno if an error occurs + * + * This function parses a MIME message, stored in the filesystem according to + * the parseflags and stores the results in the MiniMIME context specified by + * ctx. + * + * The following modes can be used to specify how the message should be + * parsed: + * + * - MM_PARSE_STRICT: Do not tolerate MIME violations + * - MM_PARSE_LOOSE: Tolerate as much MIME violations as possible + * + * The context needs to be initialized before using mm_context_new() and may + * be freed using mm_context_free(). + */ +typedef void *yyscan_t; +int +mm_parse_file(MM_CTX *ctx, const char *filename, int parsemode, int flags) +{ + FILE *fp; + int res; + void *yyscanner; + struct parser_state pstate; + int mimeparser_yylex_init (yyscan_t* scanner); + int mimeparser_yylex_destroy (yyscan_t yyscanner ); + + mimeparser_yylex_init(&yyscanner); + + if ((fp = fopen(filename, "r")) == NULL) { + mm_errno = MM_ERROR_ERRNO; + return -1; + } + + PARSER_setfp(fp,yyscanner); + PARSER_initialize(&pstate, yyscanner); + + pstate.ctx = ctx; + pstate.parsemode = parsemode; + + res = mimeparser_yyparse(&pstate,yyscanner); + mimeparser_yylex_destroy(yyscanner); + fclose(fp); + return res; +} + +int +mm_parse_fileptr(MM_CTX *ctx, FILE *f, int parsemode, int flags) +{ + int res; + void *yyscanner; + struct parser_state pstate; + int mimeparser_yylex_init (yyscan_t* scanner); + int mimeparser_yylex_destroy (yyscan_t yyscanner ); + + mimeparser_yylex_init(&yyscanner); + + PARSER_setfp(f, yyscanner); + PARSER_initialize(&pstate, yyscanner); + + pstate.ctx = ctx; + pstate.parsemode = parsemode; + + res = mimeparser_yyparse(&pstate,yyscanner); + mimeparser_yylex_destroy(yyscanner); + + return res; +} diff --git a/main/minimime/mm_queue.h b/main/minimime/mm_queue.h new file mode 100644 index 0000000000..893e2fae29 --- /dev/null +++ b/main/minimime/mm_queue.h @@ -0,0 +1,508 @@ +/* $OpenBSD: queue.h,v 1.25 2004/04/08 16:08:21 henning Exp $ */ +/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ + +/* + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + */ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +/* + * This file defines five types of data structures: singly-linked lists, + * lists, simple queues, tail queues, and circular queues. + * + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A simple queue is headed by a pair of pointers, one the head of the + * list and the other to the tail of the list. The elements are singly + * linked to save space, so elements can only be removed from the + * head of the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the + * list. A simple queue may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * A circle queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the list. + * A circle queue may be traversed in either direction, but has a more + * complex end of list detection. + * + * For details on the use of these macros, see the queue(3) manual page. + */ + +/* + * Singly-linked List definitions. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List access methods. + */ +#define SLIST_FIRST(head) ((head)->slh_first) +#define SLIST_END(head) NULL +#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_FOREACH(var, head, field) \ + for((var) = SLIST_FIRST(head); \ + (var) != SLIST_END(head); \ + (var) = SLIST_NEXT(var, field)) + +#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ + for ((varp) = &SLIST_FIRST((head)); \ + ((var) = *(varp)) != SLIST_END(head); \ + (varp) = &SLIST_NEXT((var), field)) + +/* + * Singly-linked List functions. + */ +#define SLIST_INIT(head) { \ + SLIST_FIRST(head) = SLIST_END(head); \ +} + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + (elm)->field.sle_next = (slistelm)->field.sle_next; \ + (slistelm)->field.sle_next = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.sle_next = (head)->slh_first; \ + (head)->slh_first = (elm); \ +} while (0) + +#define SLIST_REMOVE_NEXT(head, elm, field) do { \ + (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + (head)->slh_first = (head)->slh_first->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + if ((head)->slh_first == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = (head)->slh_first; \ + while( curelm->field.sle_next != (elm) ) \ + curelm = curelm->field.sle_next; \ + curelm->field.sle_next = \ + curelm->field.sle_next->field.sle_next; \ + } \ +} while (0) + +/* + * List definitions. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List access methods + */ +#define LIST_FIRST(head) ((head)->lh_first) +#define LIST_END(head) NULL +#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_FOREACH(var, head, field) \ + for((var) = LIST_FIRST(head); \ + (var)!= LIST_END(head); \ + (var) = LIST_NEXT(var, field)) + +/* + * List functions. + */ +#define LIST_INIT(head) do { \ + LIST_FIRST(head) = LIST_END(head); \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ + (listelm)->field.le_next->field.le_prev = \ + &(elm)->field.le_next; \ + (listelm)->field.le_next = (elm); \ + (elm)->field.le_prev = &(listelm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + (elm)->field.le_next = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &(elm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ + (head)->lh_first = (elm); \ + (elm)->field.le_prev = &(head)->lh_first; \ +} while (0) + +#define LIST_REMOVE(elm, field) do { \ + if ((elm)->field.le_next != NULL) \ + (elm)->field.le_next->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = (elm)->field.le_next; \ +} while (0) + +#define LIST_REPLACE(elm, elm2, field) do { \ + if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ + (elm2)->field.le_next->field.le_prev = \ + &(elm2)->field.le_next; \ + (elm2)->field.le_prev = (elm)->field.le_prev; \ + *(elm2)->field.le_prev = (elm2); \ +} while (0) + +/* + * Simple queue definitions. + */ +#define SIMPLEQ_HEAD(name, type) \ +struct name { \ + struct type *sqh_first; /* first element */ \ + struct type **sqh_last; /* addr of last next element */ \ +} + +#define SIMPLEQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).sqh_first } + +#define SIMPLEQ_ENTRY(type) \ +struct { \ + struct type *sqe_next; /* next element */ \ +} + +/* + * Simple queue access methods. + */ +#define SIMPLEQ_FIRST(head) ((head)->sqh_first) +#define SIMPLEQ_END(head) NULL +#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) +#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) + +#define SIMPLEQ_FOREACH(var, head, field) \ + for((var) = SIMPLEQ_FIRST(head); \ + (var) != SIMPLEQ_END(head); \ + (var) = SIMPLEQ_NEXT(var, field)) + +/* + * Simple queue functions. + */ +#define SIMPLEQ_INIT(head) do { \ + (head)->sqh_first = NULL; \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (head)->sqh_first = (elm); \ +} while (0) + +#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.sqe_next = NULL; \ + *(head)->sqh_last = (elm); \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (0) + +#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (listelm)->field.sqe_next = (elm); \ +} while (0) + +#define SIMPLEQ_REMOVE_HEAD(head, elm, field) do { \ + if (((head)->sqh_first = (elm)->field.sqe_next) == NULL) \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +/* + * Tail queue definitions. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} + +/* + * tail queue access methods + */ +#define TAILQ_FIRST(head) ((head)->tqh_first) +#define TAILQ_END(head) NULL +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) +/* XXX */ +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) +#define TAILQ_EMPTY(head) \ + (TAILQ_FIRST(head) == TAILQ_END(head)) + +#define TAILQ_FOREACH(var, head, field) \ + for((var) = TAILQ_FIRST(head); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_NEXT(var, field)) + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for((var) = TAILQ_LAST(head, headname); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_PREV(var, headname, field)) + +/* + * Tail queue functions. + */ +#define TAILQ_INIT(head) do { \ + (head)->tqh_first = NULL; \ + (head)->tqh_last = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ + (head)->tqh_first->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (head)->tqh_first = (elm); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ + (elm)->field.tqe_next->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (listelm)->field.tqe_next = (elm); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) \ + (elm)->field.tqe_next->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ + (elm2)->field.tqe_next->field.tqe_prev = \ + &(elm2)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm2)->field.tqe_next; \ + (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ + *(elm2)->field.tqe_prev = (elm2); \ +} while (0) + +/* + * Circular queue definitions. + */ +#define CIRCLEQ_HEAD(name, type) \ +struct name { \ + struct type *cqh_first; /* first element */ \ + struct type *cqh_last; /* last element */ \ +} + +#define CIRCLEQ_HEAD_INITIALIZER(head) \ + { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } + +#define CIRCLEQ_ENTRY(type) \ +struct { \ + struct type *cqe_next; /* next element */ \ + struct type *cqe_prev; /* previous element */ \ +} + +/* + * Circular queue access methods + */ +#define CIRCLEQ_FIRST(head) ((head)->cqh_first) +#define CIRCLEQ_LAST(head) ((head)->cqh_last) +#define CIRCLEQ_END(head) ((void *)(head)) +#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) +#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) +#define CIRCLEQ_EMPTY(head) \ + (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) + +#define CIRCLEQ_FOREACH(var, head, field) \ + for((var) = CIRCLEQ_FIRST(head); \ + (var) != CIRCLEQ_END(head); \ + (var) = CIRCLEQ_NEXT(var, field)) + +#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ + for((var) = CIRCLEQ_LAST(head); \ + (var) != CIRCLEQ_END(head); \ + (var) = CIRCLEQ_PREV(var, field)) + +/* + * Circular queue functions. + */ +#define CIRCLEQ_INIT(head) do { \ + (head)->cqh_first = CIRCLEQ_END(head); \ + (head)->cqh_last = CIRCLEQ_END(head); \ +} while (0) + +#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm)->field.cqe_next; \ + (elm)->field.cqe_prev = (listelm); \ + if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm); \ + else \ + (listelm)->field.cqe_next->field.cqe_prev = (elm); \ + (listelm)->field.cqe_next = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm); \ + (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ + if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm); \ + else \ + (listelm)->field.cqe_prev->field.cqe_next = (elm); \ + (listelm)->field.cqe_prev = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.cqe_next = (head)->cqh_first; \ + (elm)->field.cqe_prev = CIRCLEQ_END(head); \ + if ((head)->cqh_last == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm); \ + else \ + (head)->cqh_first->field.cqe_prev = (elm); \ + (head)->cqh_first = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.cqe_next = CIRCLEQ_END(head); \ + (elm)->field.cqe_prev = (head)->cqh_last; \ + if ((head)->cqh_first == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm); \ + else \ + (head)->cqh_last->field.cqe_next = (elm); \ + (head)->cqh_last = (elm); \ +} while (0) + +#define CIRCLEQ_REMOVE(head, elm, field) do { \ + if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm)->field.cqe_prev; \ + else \ + (elm)->field.cqe_next->field.cqe_prev = \ + (elm)->field.cqe_prev; \ + if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm)->field.cqe_next; \ + else \ + (elm)->field.cqe_prev->field.cqe_next = \ + (elm)->field.cqe_next; \ +} while (0) + +#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ + CIRCLEQ_END(head)) \ + (head).cqh_last = (elm2); \ + else \ + (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ + if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ + CIRCLEQ_END(head)) \ + (head).cqh_first = (elm2); \ + else \ + (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ +} while (0) + +#endif /* !_SYS_QUEUE_H_ */ diff --git a/main/minimime/mm_util.c b/main/minimime/mm_util.c new file mode 100644 index 0000000000..94150d40ba --- /dev/null +++ b/main/minimime/mm_util.c @@ -0,0 +1,412 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <assert.h> + +#include "mm_internal.h" + +/** @file mm_util.c + * + * This module contains utility functions for the MiniMIME library + */ + +/** @defgroup util General purpose utility functions */ + +#ifndef __HAVE_LEAK_DETECTION +/** + * Allocates a block of memory + * + * @param size The size of the memory region to allocate + * @return A pointer to the allocated memory region + * @ingroup util + * + * xmalloc() calls abort() if either the size argument is negative or the + * requested memory amount could not be allocated via an assert() call. + */ +void * +xmalloc(size_t size) +{ + void *p; + + assert(size > 0); + p = malloc(size); + assert(p != NULL); + + return p; +} + +/** + * realloc() wrapper + * + * @param p Pointer to a memory region which should be reallocated + * @param size The new size of the memory region + * @return A pointer to the reallocated memory region + * @ingroup util + * + * xrealloc() is a wrapper around realloc() which calls abort() if either the + * size argument is negative or the requested memory amount could not be + * allocated. + */ +void * +xrealloc(void *p, size_t size) +{ + void *n; + + assert(size > 0); + n = realloc(p, size); + assert(n != NULL); + + return n; +} + +char * +xstrdup(const char *str) +{ + char *p; + + assert(str != NULL); + p = strdup(str); + assert(p != NULL); + + return p; +} + +void +xfree(void *p) +{ + assert(p != NULL); + free(p); + p = NULL; + assert(p == NULL); +} +#endif /* ! __HAVE_LEAK_DETECTION */ + +/** + * Unquotes a string + * + * @param string The quoted string to unquote + * @return A pointer to the unquoted string + * @ingroup util + * + * This function unquotes a string. That is, it returns a pointer to a newly + * allocated memory region in which the unquoted string is stored. Only + * leading and trailing double-qoutes are removed. The string needs to be + * freed when it is not needed anymore. + */ +char * +mm_unquote(const char *string) +{ + char *ret; + + if (string[0] != '\"' || string[strlen(string)-1] != '\"') + return xstrdup(string); + + ret = xstrdup(string + 1); + ret[strlen(ret)-1] = '\0'; + + return ret; +} + + +/** + * Removes MIME comments from a string + * + * @param string The string to uncomment + * @return A pointer to the uncommented string or NULL on error. Sets mm_errno. + * @ingroup util + * + * This function removes MIME comments from a string (included in parantheses). + * It returns a pointer to a newly allocated memory region in which the + * uncommented string is stored. The returned string needs to be freed when + * it's not used anymore. + */ +char * +mm_uncomment(const char *string) +{ + char *buf, *new, *orig, *token; + size_t new_size; + int found; + int open; + + assert(string != NULL); + + new_size = strlen(string) + 1; + new = NULL; + buf = NULL; + orig = NULL; + found = 0; + open = 0; + mm_errno = MM_ERROR_NONE; + + buf = xstrdup(string); + orig = buf; + + while (*buf != '\0') { + if (*buf == '(') { + open++; + new_size--; + found++; + } else if (*buf == ')') { + open--; + new_size--; + } else { + if (open) + new_size--; + } + buf++; + } + + if (open != 0) { + mm_errno = MM_ERROR_PARSE; + mm_error_setmsg("Uncommenting: parantheses are unbalanced"); + goto cleanup; + } + + if (!found) { + new = orig; + return orig; + } + + new = xmalloc(new_size + 1); + *new = '\0'; + buf = orig; + token = buf; + + /* Tokenize our string by parentheses, and copy the portions which are + * not commented to our destination. + */ + open = 0; + while (*buf != '\0') { + if (*buf == '(') { + if (!open) { + *buf = '\0'; + strlcat(new, token, new_size); + token = buf+1; + } + open++; + } + if (*buf == ')') { + open--; + token = buf + 1; + } + buf++; + } + + strlcat(new, token, new_size); + +cleanup: + if (orig != NULL) { + xfree(orig); + orig = NULL; + } + + if (mm_errno != MM_ERROR_NONE) { + if (new != NULL) { + xfree(new); + new = NULL; + } + return NULL; + } else { + return new; + } +} + +/** + * separate strings + * + * @param stringp A pointer to the string being splitted + * @param delim The delimeter string + * @ingroup util + * + * This function works similar to strsep(), with the difference that delim is + * treated as a whole. + */ +char * +xstrsep(char **stringp, const char *delim) +{ + char *p; + char *s; + char *r; + + if (*stringp == NULL || *stringp == '\0') + return NULL; + + p = *stringp; + + if ((s = strstr(p, delim)) == NULL) { + r = p; + while (*p != '\0') + p++; + *stringp = NULL; + return r; + } else { + r = p; + p += strlen(p) - strlen(s); + *p = '\0'; + *stringp = p + strlen(delim); + return r; + } +} + +/** + * Strips a given character set from a string + * + * @param input The string which to strip + * @param strip The character set to strip off + * @return A copy of the original string with all chars stripped + * @ingroup util + */ +char * +mm_stripchars(char *input, char *strip) +{ + char *output, *orig; + int i, j, chars; + + assert(input != NULL); + assert(strip != '\0'); + + chars = 0; + orig = input; + + while (*orig != '\0') { + for (i = 0; i < strlen(strip); i++) { + if (*orig == strip[i]) { + chars++; + break; + } + } + orig++; + } + + /* If we have not found any char in the input, return a dup of the orig + string */ + if (chars == 0) + return(xstrdup(input)); + + output = (char *)xmalloc(strlen(input) - chars); + orig = output; + + for (i = 0; i < strlen(input); i++) { + int stripc; + stripc = 0; + for (j = 0; j < strlen(strip); j++) { + if (input[i] == strip[j]) { + stripc = 1; + break; + } + } + if (stripc == 0) { + *output = input[i]; + output++; + } + } + + *output = '\0'; + + return(orig); +} + +/** + * Adds characters to a string at given positions + * + * @param input The string to which to add characters + * @param add The character string to add + * @param linelength The position where to add the character + * @return A copy of the string with characters added + * @ingroup util + * + * This function adds the characters add at each linelength positions and + * returns this new string. + */ +char * +mm_addchars(char *input, char *add, u_int16_t linelength) +{ + u_int32_t len; + u_int32_t i; + u_int32_t l; + u_int32_t j; + u_int16_t addcrlf; + char *output; + char *orig; + + len = strlen(input); + if (len <= linelength) + return(xstrdup(input)); + + addcrlf = len / linelength; + + output = (char *)xmalloc(len + (addcrlf * strlen(add))); + orig = output; + + for (i = 0, l = 0; i < len; i++, l++) { + if (l == linelength) { + for (j = 0; j < strlen(add); j++) { + *output = add[j]; + output++; + } + l = 0; + } + *output = input[i]; + output++; + } + + *output = '\0'; + output = orig; + + return(orig); +} + +void +mm_striptrailing(char **what, const char *charset) +{ + size_t eos, i, hit; + char *str; + + str = *what; + for (eos = strlen(str)-1; eos >= 0; eos--) { + hit = 0; + for (i = 0; i < strlen(charset); i++) { + if (str[eos] == charset[i]) { + str[eos] = '\0'; + hit = 1; + break; + } + } + if (!hit) + break; + } +} diff --git a/main/minimime/mm_util.h b/main/minimime/mm_util.h new file mode 100644 index 0000000000..b7058657db --- /dev/null +++ b/main/minimime/mm_util.h @@ -0,0 +1,50 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef __MM_UTIL_H +#define __MM_UTIL_H + +#define STRIP_TRAILING(str, charset) do { \ + size_t eos, i, hit; \ + for (eos = strlen(str); eos > 0; eos--) { \ + hit = 0; \ + for (i = 0; i <= strlen(charset); i++) { \ + if (str[eos] == charset[i]) {\ + str[eos] = '\0'; \ + hit = 1; \ + break; \ + } \ + } \ + if (!hit) \ + break; \ + } \ +} while (0); + +#endif /* ! __MM_UTIL_H */ diff --git a/main/minimime/mm_warnings.c b/main/minimime/mm_warnings.c new file mode 100644 index 0000000000..c9b8a7daf3 --- /dev/null +++ b/main/minimime/mm_warnings.c @@ -0,0 +1,99 @@ +/* + * $Id$ + * + * MiniMIME - a library for handling MIME messages + * + * Copyright (C) 2003 Jann Fischer <rezine@mistrust.net> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of the contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JANN FISCHER AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JANN FISCHER OR THE VOICES IN HIS HEAD + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> + +#include "mm_internal.h" + +/** + * Attaches a warning message to a context + * + * @param ctx A valid MiniMIME context object + * @param type The type of the warning + * @param fmt The warning message as format string + */ +void +mm_warning_add(MM_CTX *ctx, int type, const char *fmt, ...) +{ + struct mm_warning *warning; + char buf[1024]; + va_list ap; + + assert(ctx != NULL); + + va_start(ap, fmt); + vsnprintf(buf, sizeof buf, fmt, ap); + va_end(ap); + + warning = (struct mm_warning *)xmalloc(sizeof(struct mm_warning)); + warning->message = xstrdup(buf); + warning->type = type; + + if (SLIST_EMPTY(&ctx->warnings)) { + SLIST_INSERT_HEAD(&ctx->warnings, warning, next); + } else { + struct mm_warning *last, *after; + + after = NULL; + + SLIST_FOREACH(last, &ctx->warnings, next) { + if (last != NULL) { + after = last; + } + } + + assert(after != NULL); + + SLIST_INSERT_AFTER(after, warning, next); + } +} + +struct mm_warning * +mm_warning_next(MM_CTX *ctx, struct mm_warning **last) +{ + struct mm_warning *warning; + + if (*last == NULL) { + warning = SLIST_FIRST(&ctx->warnings); + } else { + warning = SLIST_NEXT(*last, next); + } + + *last = warning; + return warning; +} diff --git a/main/minimime/mytest_files/ast_postdata b/main/minimime/mytest_files/ast_postdata new file mode 100644 index 0000000000..c3776c6f46 --- /dev/null +++ b/main/minimime/mytest_files/ast_postdata @@ -0,0 +1,38 @@ +MyHeader1: blah1 +MyHeader2: blah2 +MyHeader3: blah3 +MyHeader4: blah4 +Content-Type: multipart/form-data; boundary=---------------------------175757342718946221771693683144 + +-----------------------------175757342718946221771693683144 +Content-Disposition: form-data; name="MAX_FILE_SIZE" + +30000 +-----------------------------175757342718946221771693683144 +Content-Disposition: form-data; name="userfile"; filename="BUGS" +Content-Type: application/octet-stream + +Asterisk Bug Tracking Information +================================= + +To learn about and report Asterisk bugs, please visit +the official Asterisk Bug Tracker at: + + http://bugs.digium.com + +For more information on using the bug tracker, or to +learn how you can contribute by acting as a bug marshall +please see: + + http://www.asterisk.org/developers/bug-guidelines + +If you would like to submit a feature request, please +resist the temptation to post it to the bug tracker. +Feature requests should be posted to the asterisk-dev +mailing list, located at: + + http://lists.digium.com + +Thank you! + +-----------------------------175757342718946221771693683144-- diff --git a/main/minimime/mytest_files/ast_postdata2 b/main/minimime/mytest_files/ast_postdata2 new file mode 100644 index 0000000000000000000000000000000000000000..8f91e7a51b10f3944dd247fc266a7297f078db0a GIT binary patch literal 1737 zcmd5+dr%Z)5MLAo(GyciMFPU|Qn)z8gX5LjanX^8%89&^PB@M;xLe^sQNwj2$R?vS zUuF10^BE|q5Q&ILjOLi41gRIGqG8A?rl@pur#0hDWB$=h(|+^YZ@+!a{`UK0WqO@K ztuu&}*{BY1OUq0(Xi=4J@JiOFr-_nO234Tj9DSxPNtK=*EPAqdOMSg1{!+2;1b=U_ zuh`F9>Lc|NOZ<E!z7m1G!2ZdV=Ey%6%l>2-qRl{khSs3f>jK;!qo-4)se|3aCr2l| zrkEm6h*ZSN-7PJB#Af*qI%j66)04HSYWF}l%k_wkEJd5B(&)`Z{-XcrgH?#B=7?no zFMXmxZ4hM`($%Uo3t?rfHW~gdHfEOv7P)SQ#U56;&675Ka}PJ>4Wdn-oyW~546x<h zyIdqcLt7J@cw1x>eCfCbxBFDUc2g<u9Qp<9G_K-ZT}xnh<$T^#uY#`%W4O3f1|>Ox zymx&9?bAeK>Eg-sb!Y(Yj~`73gwA*{$cD=LnXr7+RVr_5#tIv2sHm;RZ!fpOp<*Lf z*3`k_f-0_xZGa;sL0FypAsmg!<(ecN9P>)%+VBtPJBQb~PLxV@-D*58m`cYRL-EA> zCOR|vHl9)S=laYpI6LV&pPP9O8r)9ukCKDX2*upwxDJ|{KjEKD`{{gD2466)p^G~{ zMq_0*{k$w4n+xNpMXSWtoM5`7@WsosUFpiKAZ`l{f~$Tmd`;*AzYGU%w*_dw)5_P| zTH)7*8t$mAfg6Wgu(P<Cc*9Y=Sx`;4mTbi?eG%PG$j9Fz^61V)E#CD?q3)O7<9iNa zbl*<H_q#Rl;F^Ma8Wr$+od=uBJfL^GfMKlwtnxd#&-_m4J8vLbs|JwGv>VuOQU}?J ze?Z&iLh3(wANJp~1?>4#9MHUy1~!$jpemCFm9Joj9V=k)Is-qm%m72Oqj;z`3Wmi< z*-;^dXZ@Xc_*f?x;qHec?Rvne&q#E-HG)R9JV58u_vyJK7tv+!1#;bV7~QfQ;Q6JS z(0%4j7(Mq8zaXiH7sEF27{~n}9JiE(rqeXmK9R>7OKDuYoINU6k!SrJ6cx^=mrFy? zD<_7;E61R>CJV-A*r88oG)$P$juK%2_>TV`{cN2<I_err+f3m9;5Y}=Hbda~-5gZh zL%|gv@hb&Jn)o^LBz+Z4&RveLMr<Zok{(06a!DRC9pzmIAykycq4n!PA&6i_=^_a0 z@a8wxuc0XoQ!#vTHcdSs#)$YhnznifP7eyE8JV{+(%F@iGaFFZV?|MtGK{+70?{sK zIr<ntjOhT!7PUg0aV^K^*1(&U3wd_ZHb^Lp=eNSENtK_Cb3{dysENZQK_00?gHhd) zLK>kfYEFic*47HOdpv1w+a-K^wE|L4^>SL42k44hSRW+-EI7*ZB%P41-^v+|r@;`B z&jwQmWl4)L%Xo?wjL5?Um3t|>I|UaOuB1hcVYoOalin%w#GKi)Xvx|^2v$!&eICo{ zYyH^c>81atjNabz5-aHK-L(;{EjHLa^bCBc2g^c~Ad6Ij+zi<)Go~pmOU*ohMg5Ca JEfNXr{{WPTU77#@ literal 0 HcmV?d00001 diff --git a/main/minimime/mytest_files/ast_postdata3.gz b/main/minimime/mytest_files/ast_postdata3.gz new file mode 100644 index 0000000000000000000000000000000000000000..d8d3894ad374775a3384b73b281695c45570b90a GIT binary patch literal 526318 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
tvWF;2pMS z8M!s=%nq~#7`rvRgipSYfXD-!0MIg3!$FBdp*jz|QCDSUW!pWsIk=!zJDLQ!U<JIO zZh7Vn(=kl#?ot!lx?Tv$hcK_!+UkPoBi8mS2M}0mHFnYzTLTB(X~#)D`03jqKC7v+ z1j@<2%TzC`Qf{gOLE=y-yKT0jPHW_&m7%j31%4zrTJST1ggLfAn9I8KXU8<e^RyaG zIF#Q9SrRql;L3&@grMyH@+79PvT0BAFm*N>J%Oo|Tuwhgtfmw8;*=ggvGuFqn69!Z zuhZM*>qirQRfk6)QGsr-F3kSc=xlzCidsU35QQ4!9XDt7ekO3Ll31eAODkVdE}vIa zeS&^PDPJZA#M74dVJsWF2TFQ@XStL(uJURqr%JxV{h9TxBMcz}j7*8S0MC?n9{Jw* zajxxeH%wc#v!_?vSVN^)>^HhXNzE>+iWm>A)P*9Hdy7?4IF?4iK&B8a;hx?xPP^#~ zwGZutfl;pC+eVdT#|pIFfw1+Q$=%Mtk#1-m(D1`}lvhuBC}oD$@V2OYKQgsh9z9v+ zH-r4ORJW;CIuDBCg}ft+(E?Tk%%n_9*m=ke>1B+~VjDbrtnSAp>7T$&juF~9o&Z-d z&5xuB3%StnL8|?i`3m-^*n^<6L}Wy4&;y>{vB)CtU{@s=;2HfJzTO!V0o5G{-v$%8 z?wQ96@aX~;6U&D-BVmrcdO(`9O07bmOd$=YunLwZY#GftVWBgptfAmF*`#pHrh7(O z>B1i!X_EOKV1)-FZ7QvOs`Zk<8k7N-I*=27C5j8QV^vvgv+%?tQ_33M(@`Tihlx=m zIQ^hrzRnkYi?Z3#rSry1)uL4$`}Ftd?H-5=55<_2IpV(de%&;{EKTsD4`e|Idj-e} ze06)l9<uzI42${vrAXj^WU8HL#P5n`u0~8pp6so6pLBA48U3)~ZM{%v_Rag8iSECD zpEJ?_{XS=+{hz<jnf`Om#($jRUyvXFn)v)4;J=a|>6rc!55EOqWM!mgW&KvaWcsVS z{yhR63pG6x-FMA#roS$K-y$%uuu?OyvHb0&P4^FvK+nSPZ%={sy9N3G&tv$1rhqbi zcb8=N7c%TrB&_%TmrEmRkgvE;<wAI!VmB9}rO%@xuCTAZGfbW2kUB+Na=|WO`1{kO zf1HuVNba$a2UPIg^C7{*+3V$;XN;6z_gDZZ$r+Y|Ck>J<qnO}%plzJw;@VWy5%sPp zD~yOU95t3&OL#Y#J&O&wGhC14POnKc0yzyNBRmnJ10w{gIwPlxUEjP}BbKEq2{inX z`x<KNL8n;@7AU1&`ue0Rw~Eu8iT3MgJ{pU{)7k4(D32OoEy@r+#_P=hidXSRfjILs zKPS=6tf|_?;m3#peGbL7DW0kuz+|hc)>Yx4tWTjHJZl$|jbdBrc})Al`qUYfa{;v- zhKV{jR#^E4zptlLV9rX}1es<*w@vuwInh<cKEq%dvr>Bm^0|v6Y3OQ0Y}q`Bow4l+ zRB*NFDUBB_kKKNa#tI^)ePN*+5A?4gx}<H^UOsgPL|03NFmAbSEBkC-VA2F+Y@^Dt z$^{agC~<Qw=ElqJ+}4exhEmhU!$_{}GGIP;{B)j;V7OH*VEjSy<Bn*0ns9t-zu{kJ z_|wP%y)SDMxIkgxKa1>br0R>t+yEK^LQ#t7hIVK;8HRd?vk3z*B*7R!+sV&Fs*-4L z*|1w=7ljt`;#qwvh9ZE-xxk5k^GUwJp(X@Xw2q_c))WRQFglm2x773D<%>QqsQZ*b zo>bv9vH&~y+@2}zJhY)ZPKHsrgj1ahm`7=0;~}*ua<?6&ao3AzNsN)g!V5~yWKNU6 z@FljIMWa$l1rwRKC<EgWoTWje5(q6M2x-Vg2fCOnh(nZCZrn2*p~=z>-_73bIe?7- z*S{;qsNDwgMtQYD!1Yg_qFDK}jR)R=>|;4VzZ|2{<(l&YPga}e@h=gD0~$Q{{zC9} zb-d*P4Jrb17Xmfahp4Gulge(GZ4ka~$W;v8j-aziPfo*XcBQdFl2(n+ka}=il`uL| zkBlkesxOxc8I=p!h+k1fEG4Q$2^*^I#SB2(0&7`T84o3wC1{$9pyYwB5zYYLWf-OK zFr6n$wJh_Po4T{w^d(wxsDL2gwb4M^3<Mo&UHMtsxO3$(o@vPdo{0OP{}cZUivonQ z^%r_eTF=o?5k9!S3c!)&WB!@)%bLixZyUFSo5XI_<j4hUQ^rp$0mV=pNG(i0UZ)SF zsaWcYV+DboE%>W$7vIPnC~<YNpO}zx?na>!<1?)ZK*tVke<%=(m`wvWMi%sI8QlyV z$6-kdBJN2s!TEnSu~kE_B>F^J6wjWwg2?<lC*&=~y(4t>8R5k^PorX-ErZRxh_BGn z?^`1XthYGp?ankpxj--j6czWf9^;;ONy(0d=Q#tf+w+uUniq%6_=E~PNe#67;4py$ z@sgQZZpQB6iYu65)2}J!u@m9*N4xEoNu@o%AxNH;aWln~I}Xu^SuX3Djnu~hfV51= ztaeOE-`QwFG|}e$`N9wAx*s2t{xcdTvrsvl&j7m0Q!tm>4R(8UlYHnXd{+6BSc{Tx zWh3Loa48mmI==|6T3OMOKxO*Hd~j_*c!Qgoi5%Mq;_GV%Odm8aAPUl|?k4x}Se{`9 z+N@}5t&9ZcFz*TVXcR+t1+SuyNM~Z+DSFPx4TBdk1v@4BcUCP!qsEi+ewZ5XT*5e^ zKqalcl(&tY1fWBT(cFpq;0_o8U#8V>Sv$^`50r5n7oNT`YmhD(`^(4VvXx{}hiFbH zYny%P_++MzR$X)9MOaEbMRTjJ8yw{O1kN}lp)Zf15rmnZED%k^X*Lc4fw%hU(1>Zu zbe`AYv{hUvt57~z`4*sGK0Wvl?SvDkF!=ogZCgvuUjSnFd0^j>gMV<@WBTT@$Mk=2 z*<<?avd8o<UH0gh{%UT13&6zqZ<U$h+ms8Y?{AC$mlq+Jzq>oK(f;E_h>3sqjbVoM zd{P1B^BwM1ha-|t1|*wCRAY1<&YQreilGFkq^b@aj-wc9!vK7FnoPwzkZ8B`X}=%9 z5ANHsp*9KfvSo9%!yd>I_ZLOG(4yul?8RkZe}vEX7bOXGZgsgD>QQ`gV^<)j|7<g} zde6&G)q!hmsTw<>l#cu=Q%fXpB~5c>>-gjGv9EbR$UGbwYQuj#kw+LppILkCJV%Ld zro`ti7`N!9P%(zxx7_95t;CcqT-pT>pIPZK)_O7ulRNu#z`t14^Q5+jz4JUWHWr#E zARyyfJL|jH`WQzFbt`DJ>B05le)~y&j~qYk&IRVrIu+q85>G4ZitTzPhKVYa;iN6I zDeZ*=G$|Zf?-@&@yVR#K6qdZVG1Kx+;67AVC3J9h5^>+`T&^qARJbnvCP0DFk4~#L zm*8lPqB7uv5%1Z@D64lmp~^vE!d8Al`E;bE#@fn0c1-vJT`mutUS%Y8XtV`Us5RP5 zvjaQ)r}9wA-oBx>FtF-RDf)1ApmAehS@6)t#rtUh@7FY0R{d_Xf&nx>VHi{((8aI9 zWLF*NpJHH<Uq@xXdFS#Ff%QehM0c|VJSA|#WadckBq$6NPzd_aVkP$lr_&m<ZrRoi zyPl!)XRNm`Mjatqo2O$XJ#0v9fhl1{T8E?eu7~sa>&@$9Q&W|(zGCHUoTboO5*9qA zANyCO%d|U(mTKbzF&T;BBD=)!ElJDr8J{GJ{0Z?(o_h%KGvv_YaioMT<9JVo(=RNX z@KMNW{QCRdS!`NGpEjN#NfavTaVPHfr+p11Ip!8jmWSZxA_yQ6Jqp>BN3;NJ8%DEo zgjiRM6p2Em%Z2J=j3@}%e;N}PY8X0%Cyd9&6@Joqg&-gqnn`*s&z&O@6BCCpbU6FZ zz>MnQZ)D7t!d7>y*Syglp3ue(?883+_$hWvViE`I&L%kPN=3s{Z*v9A1U*Azet_%7 zrO*}9YAXtL{Om-6vcX3p)Tb1U`5ddGD1Ci!BFSOYV?C|>k=|j$hTlsc#nvi_c0kou zNq<~>4*wcZz|i_u8t!laHME_FELki*nSyPW;u~QLfd_dE*PF-&NJ6=PgB%j0=T9fg zLd5IZ7cZ~8tgINJ8ixoO6O?&Bh!08J9MMA!@*IRzz|@A2tbA$fJ1mU?`uqeNz_t>% z(VEgQS?EC^D;Qr@y*gM&DYP6?{JY41Zt~oA(wW6HG$XcF|6%A_V;-tNfFGvFUzMav zAPg*}m(YF!<zo81{5Q-aeEge!M`>Y3Z2~LXWqlqmk@DyoJoYneT1+Pn&+OF80MG|_ zmvNw(uOUX^hsmuggi^3JabQayX<vs{eQ%yn1z9qb%?5obh{zf!7;yj7jLRm$n8i&@ zBx|DztJAsf<k7OH-a=+?z;w#$qTB%wt_hU;Rua6J?D7jVW}e50NZV&{qwUj)*8WW; zM%#Kll@mS$p1_q8btH7dRQ?agn;+I$Seh!UMxqGasjXCU$cC+P#&0YoHY$HC984w| zdlTppj{dDAp2L0$ZqY23=6G+k*4vrS+5B{cqLx={OodM9c@jNL&SW*Yq*HZ<0S2^? zw#mNeK#Yi-Z8o|9@Zx552vxZF`a}N5Pb|)>gA+GNs|^|0&A?Q;?o5vV3oANQBDp|f zu+))G6q`mPeaBNR**;jLsa9N*>bRu>(#V7%dH(0@Xn_r^txvO6m(YQ*i?bFdRnpVF z@Cn*t!5;+32N|4ERjdFtYA7&{?euQn_!HNF9rst)(d#-)g8L7JLw*grzF2QZp)MVq zx{XcSW2_kgFJRCn4ao+}`od#ypdLROjoF!&x8e?;#;WFdmRsAw0i+7s9(MF6US1vt zdBO&tsO3t466SZ+nYigngO{r(fFJCUr1fBwzVBk=aV!|N@GR<*`7--cYpeJ_5R4Wc z>;%npGcVl!Tp5+(^bZ^W@Jsh2TpTQ6P(5XrMMfl5oyx6eck`^h6TOLS*laT!oQsEw zV_JhFTn;hg{Lzq+cFYIkY4N`b88Pvzoqkq^zeCke4q1S{VFlHjluD`(Y=C(y%xzDe z^o_U_55AqEyhh$5OH1dhBGO&v54IRQugw!x{<IKU;gEFV`cmt}vCsQJ%9yF{ovOOW z%zVtKeI#n3xp_MzYx3CW+506{^zyFr>eYt4bu3vI-toH3#8*2xqYaR8Fq8c@EonsR zoBOk6mTxp#|DC{pnVH!W*XG``qp|K)|BGmpFr8<+8N>eTM!;683@mu8Y=x{|92bx6 zMf{?vsg-?nmi;Ez89B%U<h>-s%V5HCnsUOx?`ky9-vhyWEjfc=ZFLqS903xdWuytU zz<3SI`TcWuW*#dt>;1}dArlge-46jVa9Uk>V10KCv^xhso9?=sH?sn!axec!G7n74 z!>`g<>o%;xNhdk*$}03AVxg4|tn=JTuJXo!wlW>8tU9s`LifR6TsI;8!<RyieNA=M z8I%wWc}t6wdA*s1erd!`Fyr1o5cjsuzTrm9|3Ell{zf=q{yz{-nEw(^nEy55g!!+z zt?vQ;OW}n1FXiQ107f<jY6dpuZ$t~0zm%760T>ursTt_MUDjp(|BGnB{B6c6J@Y?h zXC10r*8d&=cBKQC1BCypwoIp?5E85ACs_@bL$|pu(5ilpCHo@2L=`C;SlH)P+f`IU zhT=tC@I~Nm?9kqg%hrY*4^38w2NsHnEhe%!kxBT3TE@N}a`DNEq>*0Sgt1BZ!`pW9 zgkf5tnGKKFZO#cFA)j@mLxYF8eI<$QbYid=J<PhM00B-OYo_F0ciN<_U+xy)vK@Wl zVgm|e{_Qr&T53}RORovXh7)1;=p_Z{nX9eJ;!<zD8QmX*ytTBEp@C|XITvhlrD+z3 z`UrN`fYPOYq$xjR0v#LsAt$O4*jPbxJw@FTERcJaL^Vfc;0VmRj$p4fJu*3rYyIV% zIcy;?5lgGW`lEOOR}Cj4h2Z!T&QZTW4*vbbDYX|V1tlm*r!n_JGq@Cvjy07!nKU6r z1tod|rUVY3jftDb6m+_d#8g&1IWuCwd27uj8ZMry%sX|=FU=xoghGIgB-YQmU3(o} z15LaJbhenLrmYdRI5nHGMb4)z|6IpXiuxokxcF_(uo5M3sN;ZyNPpN~ola?!Vr@xx zq6U=&ip{g&ExkglNe5VWvOn+w8^6%KL+5#MkW6~u_b@c2Ees3RUK7=1%^*Zj^aWhD zEr4r-V$NpSsD!tFM=w>c$Ra(ehEr3@WWWLpLK<Io`!h9)x<2H4d{LU7Yq{`QMjTSP z{DFxL!z~}GO$M&h>Bu>}Lux@W-O`k2nCPSx94Yuc9K5p~i}#hX54Hs}9ip+A2W_gQ z_LxFgGK!_<1Cn`HVBkeEUK1Tc5L6kI<+i|9E&1~*)8JeK?G{gn_Jn!0UVvHOnV!JP zhxedy+D-?ze_@c)Lt~Zdh7_EJH8f2wWRD9pEv((9ma206?dnfy<b6_%8%_DWc0;ZY z0krg;dQpX5J)aC9+IU4;nXNKlHslllADp|uQ3HH}QpcJ+ExR2wom-L@lmz6WTktQV z)?L*;gXnw+C^-i{&5buB>OZnqwhm&!P$KvNiD<r+2G)ek4tu$m8n!`J+cUmd0Uuks zngJv3zTpeOKSL|n*m=cTfpIBV@VC|cnz6Pkj&T9peXu)6^kI3{*&*_{popp6<Pf+b zw7+mh7mUO&l1X|qKJe2?Ho>ZE7nFmfGhp|{muBIf^N%hiL8;+c$9>7M?#g^;z4eN! zRT4h-+f)8feMqZw>m(yFF5CQ|)nYXk2%gKZQgT;4Jjp>Z#;jxUBywntt!|-rB)8{e z9u|gw`-M!70Z2`_ezm;B;^;4BZDH8$*Q>P!HfF1}w99K0I6!b(J!SwPmY=bnxs!$n zUB$@QooJ9*0GY)n#hZ}BOwMU;23#`XZ{SxLI~k79Zi~dkD{YQaECfd?)-mrq1E)iy zi&;w`;vS$=Co4bhNu@+UgXn?q>?WCO?I}hCe3T2#uRd>pJ777z_EG_*Pgq`aUMZo8 zJDv%#R1OljhF;G`Z!o{4<jN4o92RdQF=MusCa}_7&nxC?{G;`1s8n)yUgMY*Iqee< zwpAWVsoxBhedwo_st@0!(Q}Tc!>mLpmWcGdP9nN}!%6&U<oWZZD8axAgE$+ajXuu0 zs?R8C;ip*;VH}^B4uLiBT-rlm%iZ;4ce{v~uvfhW_AVhuDK@@f!fJ4WDXDsQ_a+0D zBkYLZJ_1HGIkkCQ>QiPbr!;Nv!}Q7cjqR-=4Sf~;h6ERx_U!NyW;@PHayTFiwcFd} znZsb41*@dv=o{y|bJQJl)iw0R9m3T~KN9}TJyIhLw}L%T=fDDnIZZ4xP4P|Nd18Ud zeXoRmA{$15kZM6Gr}A7(iizO~t6a|lR_?6&@z(sK1~m&rJZJjdY57g?hHO(Uh3$`O zs4j$3%nHj^=Gmp*uHQ@?Lr}?Lnd29(YG)yfBIu(=Xplz(FY5Bx3Gc3W3^hnw{gG3F zjG!eQSENUthQC6EozC4zFZgGYSnzS?7CkLq&`l}^XI2wSkMr}6XsUN|s8kJXQkb%; zOZ{G?gQDYFj;(BVF`A1LPTJ~reHhgT@h8Ry_y|Mcdt!<Jx|KFbfy`59_?7cyC=v`q zErw2eJ5$KGkQs`B=ojxL+!~!aC?u#0pHVnx??YpS6N2iDI?CM0KI;2{>>Qqlvtdac z#{|OG0~qGE$+&^kY#}?R2<??s5VIdWx)*B8@<#HzAk%&49+gP^-vCcQu)q5V&~AUd zZt(zHvFyDSr#o1a@x3o+CoZ`lGhg_(JL4s64r@WeO?*kd%%{5<QD;t*jw|JY4!fot z3XSR`sSHn5Ay0h*PsUX}e#dtH`^eP)D4GA6?fk>YR2JsH7Z{oUa^+zDmm*W?SpI5| zd<#I&$V^R3&+^@nIrBdW8~y)I5&RF<8CkxIv7%@F#}2}g$`T5D!myop6q?k~^7>{> zZs~|(u>%F7sUp4<D7|_$fXa9h+Fad=PG9b?bOs~3s?-emSy`!<)m@j1+4UVXB-*U7 zz1SeW94Q-pv$cEOPr!QHYgITw{%Upx1r`dZQs4r5>b}>JeOs=`1TmpAOc7?k`nsgI z_i4v8dtF*!`XY4~bX@JM)ud9I>$^ZEyWu-8-g=%9u3FZvID0j@lhU0vl|KTDKfZXA zB<K%8Ae&z&Xh`(epHL-jdH_itM*@sv(~^#Y2IJA5f!$)82}2=0PP3A0&`|3}ZN8{g z-lB^z{Dp{1{RnC6(wu|vj-f2=)C8S=Tw1+Qg&X!)Z#E;T%3{?NuGQAw&vbTVLr;Lx zozb!d=zR?~1nfmcQVUig^aJCP`TPQB(0hNxv--JmlX1Yt(bjubuI}pxN`_bmkjtl` z3v(`YPhKlE_5@&1XGP9AE<4}S*n4-UxPeQ-&EL$0h#EsK^_zL>0obSXD0r1~s<}^A z&@jtn&k`?kyAl>Q^DHrA?#;!0AEQ_(GnVa{9})E{#Q?`Yf*wq+>P=rC2-_0`eF<4_ zc!o=<z*VAB1@O<WcLIWmFpxzFcgzH-v>FF(`Y6&V@Ic84-dr)W%9a2@d6p?6go39q zaAbUSKcF!;6fOh1?fwX@{EF=WnP&Olo{kn99cVwCjK(f~4x5_@trjb!ppz|QOWbE2 z^Ob9AV@?go=)$$1{olz(?k5d4PwNGSVEY9H?)z2`hCS7Cn_z<EX>IsW8WWkJ<%&G% zqm_xKFxIdAH}}b7nuk|}aS|HS+?Nal@j@IHiM(4S3xHthk)!D57D?Zm%n8;uMG&G+ zJs?J^mPMJ^Rxc<O3Syb2D8zFQrT8q6<;MhQ9Wo~h|8$a-R^^snC06JE8FLh>bBM$l zQ_A`*NDyjbiCT}AP>U?2#QX?sfpaM~WnE+-f3ILH2>W^f4LUbLD0%I>pqVD`Nk zia~-&_#`62g_N;_-h&9A8U_o!5r-pZM?_t2{7g|W$rs&K4gwk<Whir|^{BRm1xZ2N z(hJ$NU|XAX-{)lLzT0X-M)cxJlO|EYWgAGr&dwL9*>OahJp?N+N=uBJA;hyqoeu^b zF?91)k-9#fVYANAQoSmkh`6r~mIUqpV6#9DQ~l776dhNvOP7#ZJC>hEvKk3h#4pd1 z)C%j>2076*{bK;-)*3H4$sE^b-~dh5ZIu^}sFpBJt=s-*(O2m=C}@fV_$k6dLh@w< zrR=RwdqofrOmR8KYm>^3)5vts4&>fSt@FXh@0qg#jN@w*K@%=ye`7vE+0e}Cp`vP! zzUn#(tfEoRUC2(zk+0K17QAJ}xTihci`@shqRj-^p#@@8Qn~h3@iB?SxDQ+#ae3IX zsY3*iAFGYvKPt)+EIc=_SsLL}&XTJ-D%1p_?PW?FqWhpxo>q&uKbP!&?c1m8hi2#6 zR?J1Lh$<E&TWn4xjWLdJ54S^qU~1^^^FoZ-i(`f1e<1kWL-QmAHTizlsyaB;`mTlp zE}aA{&3h<l7oQ>NDw-6sH}!6{ge{>9v#OOz|Fn1qp$UnaYHMkeO*#eKd|zlE{duVZ z@zJ)vLU*dZZZ)pQpuhwyDx-cH7nxe4J*!~fV4n*^#zc9asHtBcmuPNl`}+;x(}L<* zqTz#8-^A~S^AmA>$Jfu-ZDzG^3fBMUp7~!CES7J=i<tjuc+ocni{-D|HOs#iUc~ZO z>*8AgCI$v-+HWQT{`cwspL=n#d=~>mPy5fkI8{cX)`Vd@rc_KJ33K3M^ACx^o9sbh ze@z<s@HXRuK(EAsh7^no)n)E)%~hAB|288faDpU2p`NI^=ul7NvA)FKeD0A9(1soS z{9T_3R(l^u3TbSM=;nnwR4?_}hTvka!b+#*=?Lew&xw6xwarl{#zDCRRdw+mJy8u~ z-LFn|yC^5fp3JcH#058GArH*w4b;<W!%hT3w<NPDy(;R(ifBn<@8z|-5$twJGMTy* z7Ix(rKL#8fs$e})ToG%gp~#`l!%QFF8ep$PtOS^g!x}w$xGkho-Ync^L;Z(K-)9ay zi8cb>PQCMN?iWB*q;MhB6~#eg+|m>W=TgUF<{iERvbh#phjfzkTdp8!h(v4UB248_ z4NxtVM$NtQj9XzhLY693D%cBlRbN<2TP$d1mrZzr=T18hK5X_n%u*Ij-Zg#5R!#X? zZMnV~66H&ji7Nmeh=+0lcyY-C@pDTDbN&R1hG($xrUGrQYGqBAE&&uxp*mS-!t}i7 zb|5k{#z2LQQ!=E@s-hsm)d%QFkr&(R(uLUxq&w9()w4z)-me;Q4j_&<JYzwNp>a;U zD7@c|6TB3ddFF@E&#$4$6$4OqonPKDza))v_po{A`Sc1c`P41t?B!ReGqS`L)w>rI z=HEG_S2iSo7Y+_Wn#2%u#f|+0gM>*`_B|NW&!%?wr<T;uWXvsl%C1e5bRx&9D-Pb4 zP7kd8F;Cw0=`li&-Eh~<ep{4Bl|j#PgqKxN>(LQ0YJ`{R8-9U}_0x6D9b%pHDl2cO zCLPx!Fv80uT|9Ozp_nWg737b}&hsVwVFC)nWnCOhk*}3z-0vi6rK@K*Ko~rY7zJ9? z`pqeBs{D{co!W!Q0j((O^w<pRwuE4O%FiG`sZ_oR$+v^Suq=hFmj(xgpdBwq4u`ch zZOsoT@l?Lsh)~SM?<rid=Lg2n?a^|on=jnk!jhoo>A>c6ei5=8u(kT*xvrKTxG8}7 zV8DT@%4&W$dX;1eaY@B2DZ7M*HSK7?5x0mcb{)Zy>U`X)QJq>rbzKg{uGC0AILPD$ zF{u9;nmakJe=U7)A6b*fv;}(*`(cB{OrmhoDG<1X4fk_=l;t9MgO4$f?J?t6GUq3b z=8<4~qNR~JI48>=?%*FA$Dp^fi1tff;MPw7!hV@CknKj8f;wUQL@`u?StYoo60*o? zm&H^TP0hyqNtm~GqRA93%<gmKC@Ph(gX92wF#B=i56TqWv!F!eC#0P&P9YZHyzN(m z0OqBZau~atu5tM{4Wq?DW87FwQL;CXqGLCntnr5Z`IkNF5B&kHOSzb2P|wK#<d8E# zoNtmgUr-^^542^@oc1>34ZtuHKK_^tck*t-0VW9yY1S0(j2c5{3_#f$BeK7<Mc&Rc zHs>fcQ%Y$I_}HNlZXZ}P&P^T8_6HtA+Zm-6iX^f@D+|1T+S3$CyD>-g?!E1~gmEeS zP(EaW$9bXDU&jGRtH@|Zcfw6+Lb!7pACIYxXQw*4=P*m`S1IT8^RV+tG2?(-OCvfa zw3W+$F0pV(Ss^)*`pAGV!c!OVEsJSPCj3nnR{L<7Jh8#E_4XqCU5)t%!7MD_1hcUG z(_ohGYRq2(EX%(Z%)<J2k@^<kzh2#C`94<V|FQtf!uCy(VPyKpS#yc1QvaUq+wrDS z@<%l*7WHN<E@Q-DRhm8?I}OvpVwH}HAGsKQ<hHMl=H+6b69_aW;QXFn4zb0h?QQdt zzsst6(-Yj9r1Q#hmo?@069Ug|hXzmDdJu+nhh`P=+Wl0jOXrP=5fRPj1pZ_G3YKR- z170>~@~u1&i?^kBwjc)0^`2?nH33c7E|c~q_C7$*)yCGyn}t^^Zn|NvIJzqpxwc*0 zlURNH(ytFy7-xCVI1%;a5eaRU_hEj9BNCIkxSk~X%{Z~fPd;C9AI}vLt=L8pbuY=` zeb}Iq5%>$8{oCCQ%6Frh+KfmOL>fNYH3B`Q&r;Q1mbzFuOgk@vIcN!4HeHlu32k|8 zU(uT|;lZJw??1cYPyvz-qT4elFOWtD#l<!hRfVl@un`+8==db;KF3L!4q_#*j`Mn5 zzMhx>a%uoAtUGQ}S+bwN$xY%Fcz1sP$>?VQ=a<-W4$v%M|FO?krp4qUQB(NS7O@74 zf7u7N6^S3{TGS$5oxu3;U^HXot`|uv-b3YZ{_}d<7nj^hH*gntNOaTtuJ3q_UfT_k zYKrrk%;PRM9}^`JBe552Ot8K>0H+k8d8C-J4Afo*BQB^~iCZb7TOmwa<6zjQy`3di zU$WsiV}Te(Dp?jZ>DKwj8RM4tM_Q6I%;8{3g&A9N=Cb9V{rkNWU(4E^j?h889^kep zILBy1kc+6KBN#ZlYKpPiIefrlQ2Xo@!y|k;xl+bPqz7sw5PEh}=s2S={p7JBQmdhS z2nVS%at;+wVuzEKZoqkva4?DD$1mO!0Jh=2y)h5W*M{j)wlb2h*+U_Mh_I<)8#U-K zMg4*$6tP}##?h^E`WRAwqTP)ad<E8HJ(00J5se0<K9%y{#h{Y2J>;vaDU^d|e=x#< zZ0ntS?Q4TW0L=#q>$+$tk1Va|7YLn$sG739Me&gSU=P%TZ1mDENJ=V+IoKkX@H1!1 zvtEi){9x-AC}~QdC=avnmMr4~&TZNv7$;ent)0-z5F(NmWb^LmS%!*D?FiwwcEuR< z^otJ4gV}P&S0;${T6lcgvp*s?+cO#uPn*sR;5#LaT-u;rfCJU`1GI;LK(|;?ts<US zzKSQ`#UjEC9fg>Cl0$N?mLV-l@8~U%cDy_sa_tVQhIKYa67q4OyV4aNX|XU6cC~H9 z+JKYm2Ym}|W@C?3dvHZG7Mi7G5m5GTRqFWRg&3XlIP$w-6oE8k=ht3EiMJil26j$y z!d)q~Z&3Ff%<b4yDWBYGWi#_7HoQrwZtzbz3ScoHNBP*ZwJ)NO?4e>nYB%S{ZfTl; z<i@%{oYE{YhKRMg!tP#cPJmW#Oex$jp=?)pCv1v3ukcGLob%SRkhwX;6%YO?iyj2J z^B;8vx0j4i@JWF6z#Src+a8!1Uh%^Ag6`JTV4@psLcd|qSo>Ao;AMWyo#q&I%uOT< z<BZM2;*KAayOB+<6O{*Vurn_2&NHlPwANzWd1%fK#A9=*yUZ5m)-0A47RN~p3||&n zmBW-bSx>AGx(w0hk42?Nt!fo|uop_g9DTMg@$~W$(qugg^9e0?wE#E0*o;F8BS<oE z_Ut<3Q{5q23Qy`hb4s;!5AqBa_j7p$34k^_p7s}*GC?Y>3&-IP$ZVzm=pZ^GTLlXg zm7H*3cz@I9?YAE!a9~jjVFBGh$!`>A`(f1clN&?Yox~oR+hjLbsa!!{Q|{)%AH_ft zdOzvUPXSbBHG*mh==^$YNNj3I>V)B4%8D-i<?2jsd(ih6JX!2b&s&y997PD8dw^F1 zbGV9jn|g5H?K7#GT`>7ezH`V$!esO<!T{Qq1F<+Ob+3%uX0Dz>40(5@2BIkVd!Ik- zp1UPuG_&rNr*!xG3Hz-jEm1G!h0Recb>2d?&CrY7F#{B@H>Z1#r#v|3BLv?SSk`|~ zVA;MYuq^-c0?YbWgOY{yUt2a}Vfhy?VgIlqvVP;7%f|A*S91SBMQl`-vR<Qw?08Z! zY#ryrSg4~Kx~v%sLh7UDqHL}LYF{>sG;-Qz{b)IFj*iaTWi|VQyhfcMBr#9$B6`wy ze|)c5{Hs#QT#`0r5`<k;v7pZeHeD1*4il#6rO>$+Gtxg)g>gmH-Et#hFgM$6tSAL3 zzxMGquUDkRvs!b7PJ<f7D0VEsDYUc7aOWcga`E1vBSvY!KLa4Xelbf<SwFA$RiwP) zNO@&5tTtLdW1LCap6P=g^(>U0xR6d>P7ue2m?rHOdJ$C{);+x9&(9dhI@KMQz>DG| zKGvK}Jw*H8?>(#$ikN3$YhXyqgOmdB?6jLClGt_GV?f-)$mw8v7qCO(7~rq0pb1fX z0hUlS$EE>;$HVEfPnI3R)3B}N&8K&9#LjhxcdMUx!4Si_N?l(@Lpv;6&jnf9aV<fU zE-Lq~l5P`YY@E=ePA+KxY(XzY009g?9VO!3I`C8Zvg-pQX+p*2vA%G0boXvorK_S~ za%HjvvN?U7Ze?b&*lN;4ex0Aiz6Qq<H;jusM)*$u6hjtB*9Gxq6z$5BD?Nh$^ce2O z@kEsZWsEPL&VYI`1kKIeMayZ&4rcO(9m25vlPo-@B%Ob7+QZ09`tl{nz6Bl9<6M#A ztDwmjD2006-~{&|kwz(g!YkX@7=c@uqpdfqtK?{}uk`e+HHll9m+*nKs>c+hN~8N8 zz%|WR@=lw2uhk+l?4}Hu($aWZ16q+A%?J@Po*3p+$WR&1+5#MdqpwFTm4?F6yzRcI zZ#{FZ{o~;cbj+LwQy|8orDwX3y_zj%x*bX6@IYC}e!rFRoGI5Jk#IizZC?M;%KS9% zl->jbsJMQK6t*9#?^**LDCUAW%+rtU&#{Vv)STlUNa+E(E`B_k3h$2oMlJ}D2H>B7 zNQ`p8Y4k;vg|(<;$(9N;j;h2;TEa62M}nWaV`!4iNd^3^iYN2Y&ZI+PEf?%pV!>6L zc*8Qppyr~BD9+QAk7g%VwLSNw1Rr_Y>~%(!MuyRLrTLgFkgpr7B;(Qxf8ZCiP7`R& z6^zzY40M;U+9X1Q6)c!tTxTzWP$M5?sDL{sGRMwCJ$qa688zKKx+C6n<!(qqo!@%K zTK)Mea8Jv&Y+Ft>5wiR#pb&Nq)BR);Y=ivo;LGBqh6@X!oj!g5#b?Alr`LFD8BeO+ z;O=p0{Y0&{TTrZc=Kg7fooFz|OicLmY0DPhSqo&!8;o|YaZX*Hc@KHc25l_f;ixrh zyEO~dE%lW=6d=6++WzQx?*5o1-D7C$n-?YPKk%1i{l;IC^`H7ne)ppMtGmMbulY-| z{&ki49)O;fnuYP(h)C9d)nD>|bQ59y#%+?0p5dRTUMp|erwhY+J?Z4$I24sMhDh6h za_$+=&Y!gG6){Avaua&-f{rkPGWt-uV}4z2SU*YQf)t19Krgp_JX|!pzjJc9-3&qi zi?_xu#`pXdt2SVn?_>dOxRQRyMIA@J%7hucI}$i3pir;#OL|LBSOo8F88Ox3fvh&} zf*SOnA#~^yl~TKjKCmfBydreSTj$RY+6)!l<4jJDGdwi3&rFkwn;64zLE>|RFgb&& zWQ&-GwE$5*YuGC)F|*9kW^_FJ9pxW+eEysDg`e3uB<IysK)09}>!7W(T0puuXra+I zX(fkgNPRt3^EW<WeJi5I3;~YXY?0=O#fBpCV&ZZ<XAEjZzmUOPq3B#$V1eI=6!a6A zHj1Si+FP^i<Gvk&J!=gQil|1sgspstR+2x!R_=ARnX99#*x5^VgXTN`*jkrY@k0-8 z$N7Ge7&0Vmowyc8_*H8b%YwUCuHsrNV*EONDXRZla|HHXwfWg6i?-IyZB=b6qOR%2 z*Z^AZE9hQe4?Wp||FnM28oaD$SOz!tLc_73d^2O^Y!z40Zy@(lJr#vf2HaF0fa>}| zRKeM3`CmRtIs=P^w7WG%_dn-GBO8$fG?j-Za~Rtu)p5oLm+^auccaYAu83$!ovDt& zC>n?24A&OjoF}$Fbr6s`4g@#k5q==lt-X>b907n;q^y#5pv&+dWuq#ClXY6cBO=ru zS$bQcrnZ=;H@h&}vZ`6^Zu@L6#!J9!^#1Woc%!e@VbDTuQe#LOe3=96Y)V-HQ`D$Z zS2J;-RhAm$-o+-hJ141iX&Ny%xqrDAXScn~kDfTz)|-QWzo$Jn(ZtrWaouLYlFs}v zJhtJl8v#2{9Jj+Bz!`K~AL*1jC#o}&F8raAdFXU}^Av!H^xox?pXc9Zb83zyN3XCH zUW7g5z{hpuYS3GNi-OE5DhtW!ifF0uvJI=z>U!YIg%hWz80n{AC*_LGU)Ck%j1MJU z!j|kr6M)8MeS{FK3Mp0zSC?ZM3a+#|odWPmkbb2HwF?N&CdD6}U~r<^ZY=5nFZ#7z zNLt>ghyGZ|S$Iwtym;24Dw==)!p<!Ct7?Gm<U~{!D&g)5*?$Tm2A1c%u(j9b4&Vp? zjmk&{KTg15cUu0>CZhoVv2@gQ$-xnw8U{{2DBm(VE2%w<C>#iNQSsYb0R9NFS>VkT z&`)QOthchAbNV9wz70m3y29bQ!#DM)LCsQ*Oa2j`08It)ZqroUN)2Br=~W-pd@2+S zTC+%w?sKD#UzV|pD`nfmiK}<gkyMrY1{A)O`{iUtE;_}DB^UH*pLGLtaikp^v~X&* zn@>;|^Ul5Ev`5Mf$e6a7imATi0dw+Q0i#f(!=~F;HVes<rS}gzJeSWkh1qn**97<4 zpF!F)s~;F{w9FA;4#h`vdA2V)9sN%v4R57SVD-mm#!~^mxVkpJKJ5H=ssTG1D<gAQ z*5tNO-RY0i?Yu~uYwcpFsCQcco=wCBPtymP*6v?_>jP(lr93^KZ0iLc@KNXE4E*42 zbIa1`nzEcda@zd!u@i2UUu{z^<F!$LxNE-{GSu(J=r9vy6Ocrz@06jxx=ZB}N1}K9 zN<Qx|x80_|rG%LgW%GFK;dGA^m}83jT@m^RPIj!{IN7oOQzyIciqKyj6V`vp$?kuD z`~L&B&h|}HpPu%g>sOVkmey;+@Sj;aI}Bky{8YjoYGL=e&cg>#()tS_NCm+SD73TU z`24W|$zhh7cU#t3sdz+ec55(CMvWXC^&A}4Fb~xy`6M)b$Alptq|&|dC%c58!d~XP z$AomXID=w#^qJoG_};XT?Eyn6LAZ>Y3%KCz?Y2&|5rc#7z8yt9s&~i0T~azcu4sl1 zMcHV5L($SfddDDQaW}0?&I`Dh?iW7Ne+un;`|G6?=IU%!qdG9{DelU!14^9<AZRVu zCYq3H)AO`ODC4s0N-F%Zx$jxQ20Q6iMq;wihlmf>Xprp`+v?n&EG;Nh<`eHs92;SG ztMhTGm44;%2Qt%;leE2DGV76r)9BV7-M*8qcz@O?_(#x!*ZVBgG~XvI&dNds5r=eS zf8uprMwpJQP@r3+lyv6k-JA_ac;$?U=&^t7bTzm<CImHGo4MRTYfh0cws*Y??~$ST zUfz1ie}<Um(?RitnEkdHQAL%~Z6E4=QXP;sGx-WbVLU~`)ztsEP&Ax;2%})Fd<L(c zG;Kk+HPZI2E9hY+zrmpT1j}ltOqCX(!<kh@&e8v9d&64In(MBoQ^RFN)*Om>yW&H4 zdr)p~n1r)*uCrOZ<gbV`L-FX9BYgmi?Sz)3><Lj)qq&K1TVxJ=^LtUxoA5O;+t8zR zuvKp10Sk}CDbyQJ>)PDKr&G|~XMqfH!tMn<qKiz8;ps-WBEB94oVlg@5&qL2wZ3g< zA9j!%g+xFiIOWv=1f+K3-~^P0*=D+R&bQDU&yE6-e$HpE{b;48SQf&ti|103RHG&9 zm#2Y=R?C!;_3Ir5sUM4E76ng}HA_q?-x$EIgq)|iLTpRHj{a@dphYbIPAo#`;~~QC z!|5h81c5P$H_9kb)Moc0)f+I8d6($<ZQvY{E=tOCPd_;O<TBy)oLRQCJ5TY_?_Y+X z{6K`q4irk=I|Ggjh5Optwr--@j$(m<`$&dl)h(+=1m2vZmkVuQm=fq=9m6o=$J+N& zt;A8Kbqo4#SrUo)=3A?E4*cyH4hyP_*GuHqfi%fD(ooO@)K8jcq3y|5gf0xzhV%ZG zOy$j<-Zkqwe?~lfdbt_R_O%*%JI|o^0;0)Y7So{UIhDWKL{Rgimq!7}x?5%LjQW7H z#zq?%56E)@rUJF`iTVjQ{d5{8a~Y1{6r6?ea{0YgHVBu-q_d^7!k0Lhu$@I>Mr^N9 zj?KyqeE(EZ8jZug)h|wtweg|5BuM9u?Elomln3*JPYG?rLXK@NV-adhhy=0=B-t24 z*BcG=aQ*qZ|ItX9djN|_h2BDkX1mJ=x@L6L7`Q35&>Lo;vWNs7XEKzf$O0neq;Mz? zQIM7g==eA-Z7Do@x*CKN@S-hrB++aUkv*VT;@m?Q5_2(&JI)^+0dY{z8~=l`IWES& z?suTdmN=9@W_Yo+z1`3zv`UZgnov*fuY99ahrE}LIj1K*cRnl;G{OQ^Mx#fNUs}C+ zPC^={1%tlJMtBOHknvC;&2xqXaeD3yFqaC<VT^7+V&W>Sm7C-*l}XJv)jE}9(YD6v z8XcXa&4=W|q9jp5QI3ZAb%W0k3nRJ6Y>DsV>3T#Ft6i!)cYL^3OF^e>`od_&$T-k- z#CPx>v7Ahx^M|M67+;~^&<8r>p8^_N0<@YTo!FK?(GN56X(}z=p7(hdYX<O?XH094 zuScBmv|2t~h>r`R2~V&mLSPU*2shiS&haYrf|obi1^VQLQ%U21__jls&d#d4b>XJ} zNCmX*T^l<rt7G@KWqaYR(s0XK`|Kb!m^+uCh~67Si<oHcNdUulhuuL3enui|$#5I_ zpgA_G?h#0SFhazA`7=X2S8bLCc&H>!=XI6}mq9-TsVlxJz`A##1p}uzE;gsP#+*}~ z*K8(?`X#bvh0m!-Q~gGZLa%AquyxNufR5_AkjJf1r1EElpNE7_WZDF=`ejY+vBQS~ z{1Q~3i+H@c)gyZ|)(1qs<U)N$-OGWAE0s4hJ<%q%Kr~LA?Wo&U0u3%?CmY<%*5*ph z!IehS{21K@w{mYwnC%-$iiCT+H;lOo1GuS4hf03r&dHR>s%=Xb3F&=#ZJ5My0!SJn zMw+S4dejum-j3#arr$c-?=Q}^+rtl01^T7OV)Npc@uqcIb~9f?aUyiESsbq3Zd#fv zhQp>VBm$E>B{+5z%qMJ<R|-x|G}a}{cvFh~#46QIyqFj$Vc;urkD-tm|4>ns@k8^t zTz{>;N>+3wQB^!V6m65~BMOyE>NT2EZ^e;2k$Szhsj+IMcc0-CkZ>r$xi0ISbAa&j zjqLEWow}*p`55hbsjhb3DYoCU>ert#)foWfA%iQjeH|^({B)*)B1ewW!OO!$$%~7K z>zduVeAC}^r@<p1O#?C~?r}jEXi37g^&TG1&y5ncRWhPedE-11C8=7k)USg@&xO{K zSe!rIE4}B|E9^ds^i_)=0(#!;C~yvfqvN{SpWVa+tfhS#YNxr@#>mcTRg1SMT5}As z_qaF^ZtHQp&q*6!3k+PHAH-9&?{HvmjW^n>*qssxI-XB2;vtY)k&pG49!Ukgl&hDp ziXcwhQLuMuS8+YSd~~WQm(W+|Nw=Y15wjB6-ABG+8PA1?v=%GoJTwm7CKEkqWWyDb zidC%XAVdTmm1!N#((~0<or;K<r9N0ip^Tgli%(QDVj^l@jtA~%zJ3_Pe5QWGwAlW^ za0}Zv!!4};bhw3$;V-7e_E+DK?Oz*iVf#y1{T|@I+&y9YOK|uWfRUE&-~BGW1Ne(9 zehWZP&qmF{#Pr?n3G4UsHUF1epKRakp3pO}GX7KQ7^o^1f7Sxk*`+h{Kuxve;NC#P zCcPl3bQCk1Yn@sk-ej7-0DmwuE8*pN{WHh#$-YbTH!PqS>==k_7nk?jLo{n^_^f5z z;myX~4s}?sWoqGwR#xE}>%?8#(V-4s-3F&H-((lihoCJoXRBwlt#cL0`x3|6?$+%v z`g>HmH_z9{5>H;(<A$=@ph$pov~7FjZToIVwhUpKu&b<fjgPXF;PtI9=vW0xh@r15 z4~#LU<&~jFRqzZXfA*=|V=5MvMG{n02LnFcV<xtdHj6FV{RQVrmLR591!(-X89ZM( zN9OC@Asscq+%~ps24!NA+DMoTiK(OnJiPB@3+VAjkeACW)&yxg%UV;;tuBcM_}fBS zb7V$$d}G*HYe#d)z~f^gQFDca;_v#3KguCgXeeUWnFVh>*tNq87tS^Y%-ED;98q?* zu{;7Qbp<IAfodPZ$LgPg@t5mvPn@t_lJ`Xu1gh4*%GuF2T-TQ-Q~8L5VjjHPJADEG zuo40sV4>;wug*bD{5kpG{+yY=#}CQZ4KhG;_2|UtDwv}Z?N7ZxB0xI!9TNGLCVO*- z@HgY!qn_0$=KFm;2TeqaUk7dMRr<hA99Nl%nNJJh%u)8KnI**~hQI-ZCnn)K(@!mK z)CXb)Gg1+Kyi8W`piblTI<7s+-byVWdZOQ_+-P1+Jgb3VE^f)cm>$zY8yE^}KObih zFZ!Yyqr#H0n^OivS9OgmwH<}vCnu<R?Z8v2YT@qn=)BS38*^Mw*i@yU8Uj8grKZsP zH?L2;bJVxS*5MV7@_mvBBj6kV1kQW(6tTm?<m3RCdHw2^#Kz1CF>{2-?#-EMbo@hS z>v{$6E6wcPcu6|8g0bT!5{MNts;$fvGp41*2cS*whROy0!C4>AX|r!GyOO9!*JQOd ziAjq8M0}pPT`c3YYa{FP%n(8EG|;xS!znYSxN3(w5W*~`k(Js`jMYL@(IvViZZV@h z8y8FUnGj!lXm}3iE*AblIQQm?x~LdB#`{u!l0iE!CzfFf>ra<y7<ctb&4}>>u<d{^ z>3oGhve0karoQQ;1<4*!!eq@HkT6YG4;}U_aORQJ0IE+B^C!Pl*w570Yq8&f8G1b) zi>3)LpEc*bPd_>^qufKh>GUn0?AO-8TOhW1TWjZ*=$;&W@(o6jHf4a*05D2*w`mb2 z`DJoU$h@(693gra&<cs<R5~RRTiQ>Ywm7)#>69}FyN!((>oOkb8m$&#=tq#ZT_Qaq zX2Eel%O`b!Pr@2mo5+9p2v_RDsQ?l@M1X_IOZv5ik>YHkp=CsD&st$;glK%2q%i*C zZ`XElTAtcqU69trFe=A3ii$L-63Dl*4k~oOyexU(8fl??i!%<$U%o7tjvGiAi0mm< zD>UQN#|9yTcFbj_NmaD5lddZwwUm!mq&k1L<I&FC+kvO{LnR@XY6do6e2dojDgG=h z$0yd37$La+3kVq&qgZcKhLjoTrqI>U_bdyd-2%d={$AUVn1ph#K#D#*)N{WGP#p4x za6!$4<4woD4TdrQ>RnZcuynqEgyhcu(d&*7uySYd7gaV1qpC@9N6wGE;-H)H1(&5X ztM{%*T{uj)?5hY#+gJqo$aqQYr7SzdN%SGcXNK`!pck`s+li&dN>9Cdc=4oFQ2Ch? z5;lP!3Ctma>bYoy&S^#1-YL^j$!TvJQ|4fL{hN@|ly}BJTM(BnWK}gB7@z(jSNIM< zEbywAxC#*Cf<0UPDfh78;Q`pBFU*j85z!IT7D-4<%!U0qid;d)e#JAg1o%{n1Q}S8 zce(XPLL|S!qiVqYlHqr<CHm#!#tD9-*}sXdus-PPdWW^c!;<rGDbUCn33*wvoIu#d zhgjL|8i$;@s{ubf3v3NUJqvw0IM8@o$nD^*-8=eUHf4Igp`sKrr%@7+Y9@qd3@&(j zeBpxFG1F4K0!eLk40ll-yR`+u;hQV)n^<(kD2DD!AdU6t!YbM<`-_Rh7&^!x5635j zV^qgB3pfI)cS9-`@+DPWK!h?0X9rZNX@erwKzTt>U|x3q0K*+ACZQZuG1goLXw7j- zpax|JghJx<j-ArCa)s@GDVBOL?5T?w#{|0Wfubq|PQc?y9AW;=g<cm+`s!H=0`+{1 z0>;e!5q<|e36H$T@*evuDlKxTg4_eYwtXKy0(?g<9Ym>DfONeC9TWBIkH%;@h!7D| zFFHw)9OU8BL2&0NTj(SNv2$-z7>yLqmAcSTmvLvC2!uGhYTQ>RfeV`-lHDazmk0jf z3G+Dl4E>{NuUwjOfGL&AV8S2H$jaP9X>%V_Bw(3N-S`GY1}k@w9a+{6I}j!ce=WW? zs#OG;Mv}E|aI-?OydnF$XCj9Rbv=m5F#bOQuLCMDhu2AhkegfdoG;{lJ&7{85~)DR zcl8bd=Y9Bx(PFwwZo-u$DFn`U?-%^stdN(+g3TYd$S!;{ViM$Gw^@;Meor9LYqj(K z$Z(ZxlKh$bJ%S0_Bg)z?GInq)MhRc}NKdRQ4T~ZukHsnVov^A}kJ(V|YZ8F3odN0X zC;S6$>Pl_CLFf-6XBh{|K|P7=$O;@(uen3JqMi5KwpWIf&p*Sq?Biv4Y*;B{$WV`q zsbl`A4U5cK7JA<X3t7lTd(Eq5;txhDSZn4Dx7_;ZzX{*IhdhJ=>N_?>wBAL>E9I0c zdCm}OL;N^as03lkpvXX@%f<5!K8{^#zJ_Ht6G=)&$+Qig7V4PWj3$1P$L6!c;0Bve zwW~#L@G6dL7K$5Nf<V57Pxk74p5@?`JB9tkqoU*e+8GN&I0ECn^g!mAKE8c*b+h%v z7I!C(Ln(FZ1f3Q(=7PPeI|E^1{rr<t?MJ<&!Vp5kuii^gN)81hYe7ZhxsK&_u{cL- zI4~7(My{ykF#$${$oo<}d8XDW6S%WLA`r2{DZON7H8OS;6pEH9uNr~zm7kBoPf&59 zcxQMVtLzl{e2^(D0cw*E8uaB6JNQ0>s6MPUYr3&p=i1!@=fIHPrlQn2t+>jgO8ms7 zE^qYOn=sX7L6JBnu-V*t{5#K3$ZTV`pbkX`u!SEp^8AAC&!0<I+NQD*y+darThgB` zpN0#}qwopi<{C+X{Q}r}w`*5ZTc02ge`Mpn<KO>a8;b3lZ78;Xx()Rm|Nd(mitS(8 zhN7qao4|hy@Lv!9eZ!x>LttR0r)FcN{VuAR?JskmZxQJK?F|3+k9;@b&i4IA)_={w z{~70IrTxZ@ho1JIJGoY(uGOtI-Dv6HxpNYbavOrex4WJi?}lzL$BU6P&T_JPZNu3{ z!7A+2(IhRL3^`jDkg9RhoIun<P$GwS_*XNBTW=kEls0A$*|w~&Q#FElRNk4U_7B2H z#Zj^xa4c|EbkHg_Q7x)JNI`5t8{_A{Vo8AkY){g!TZaE>qQZ}5Zz<a~TL(u}x5V(d zw0OeFrIF^mI0{~L%Cs=w^mKJQs^&sKZCt6;b33+Lykg;@_Ae}sw3f_>9~RL18Qq97 z@Ir{v3)5fFY#HfNq&c*gONG6kA+H>e_ZxWGP6Nz8+6Pj~dPkK;9Ddrzvhq5|0^b25 zgPv%POZyL+kH0synQ&aEnn|v?tb!O|u#=~p^#xQ|T#3n-_8G3q))xe;X^~4$@)uW# z|CUop|JP>|#jEuXAF_{((8mGvNgjOt`KTC~63Vf$WCmd@SYfM+U?zzwrIG&TibReK zd~kRB3-sn+F1}y_i=6Pz5jdd_-JoTux!6?ty~pGDE!*Z<G&eQA_ff|~KW{djA{L=W zU4L+)#g~=g;l=L$s-82BJtll*>UneGJRVt<Fu1310RNT65|syl2tS|Q?JJYrgUu*S zJm?yhkehcP$z^1p6FALD`pjaA{UZy)NG=&NrfN7&KuO!)s7Y$fIlNa8>A0TuiB@Qi z<cB7M!?|t?NA#S-NnkheFl22g?e99wf=R|ejkB<sTDHgT9Z_;XFIF=iNreXp_YapW z*)IO&%~}=O9aIZmgH+S--K(%yY?e8rnbvy2Rt~oKV41UJ53;4QbY%l2MgKyKTcCJ* zE=xSU07||cb8rKMlA<Pn2F^<iISoTbU=|T(%5lyJ!w5(h-YEx=d*)dV+->&;J$W7? z8c7vacNT2G+uuFqau+!%-uFuxQ=w!7nc3qP$q|p?q4OahUT&U!`tKJHgeA&6U59Yh zxUP^Ya{YNEze2AoH&{xFWDt*t#FG7|;^Fzn$68u3l>k54MD+<f9x7BKZ`QyD&c~fN z&kxfwjZ^Xc#sMg!K*e5nIKfpnY^3;F3|*W0Hl-I2&H>|wU_&X{WSxe%;Mb*7bL=#< z*^pq@HyRTD%!z&+9Hc!YqdzR6MI2U)Ssc3E#u3!4F`-rfZbhv|m7vFZ{jeJj&@9bv z6FcG2-&K`-_f(7eU9=iFZUG)mkll7m%8lAu5j#v8wy+kI9Bul0yeEX$$QajcGT(%- zdfu+keQhi(OMFpta$j?j7FxOyXFEP4cSMfALQh7Qk=>=AkB*A4mi-*F7;-ZT&QB6T znBo*;y{QCsi}@{hG-{GBldnn}2}@p4gt9W)1>Xqw(FmB>y%G8rNlMNr$h7EJP-?iG z{Vza5TtU7_cI-0n>Ytu|8$9=#0b;;ud+35~$~|Gk44tTwy0)sB^}j87a{SDr=5Uq1 z`kf3SUxo$f-6zB#ZlZZT{Ou)s*FzSTxM(|SekX<6{ZQ>lhz%ZsN+mgs&OJ*-lwgn2 zIJqUow#l=2Y|4cI$J54);<3zBacUAvnuK77yBIkeu;?_u@S}9#wCNK@Dmj#^Ld{;o zQGzpX%zdQ<l+waNBj334jdJ<wd1zyh&iO#uzY?wrpb(nkcuEK&#tCK;vui3>Q7P|t z?Fwo-Pp23GK^HL&)3zA1AN4Yk(ZIbkU~_VmVlRZWa~4i6i+WX_?OXaFY8zIK1yn!` zT;E+PJj;z2`K8qEl^W^l6sXlD%qqL}Q$~`EO66_fY=Ylk+^<lZe-*efz!)vC$F5Ds zL$lo-hjL7)=G_+VSq@qs>xZw1WLEIl2mY-=Wj$OqvNcMVWP5vPD#^OG=L>GwETAsJ ztgnkfLcEZdZ)Hp90+yEa`YXRSf)O`n{JYM6W(pU6HQnk|-EziAo4)T>OVb$}mYZD8 z2cuYTIBc#nx+(}3M#fJTXHEstW`wApJWhr{&OoU5z@9b}G$53|DcUnj+zQ2IM#`w0 zNJ=I~D8W#YRi=*+RHwtyy_n-T{az7^&vRv%Y;N{ROZTM+JpO5R>~2N#FOJf!X<O0- zM#q{TjPodw<}+FW>Ku)O0)c#d3mkIRl>xu$n3+t}ekhW%(Xu=KR)5_(rLg`9y{6gw zxRf^TW{4d96lIEK?Knd=9?o%(QO^ziLwxMOMI;!_WQZ$+(}3OV60;CsNQI!a%M(F3 zWq=?)2JISME=E|FW{)IPx`-sQ$V#vrlAAqZ0R}O+xsNOA3A!s`cUJWS>z0eSBua*r zg|Ue>w>mz+vLV*QGwCK>P?!AVRy7Fh|Hs=uhF9Kg+um?&+qP|2B^BGYZQHhORBYQ7 zRBYRJQt!Ra+UL36vnuP^b?<%lb6xqGHve-bbF?<b=>6A^Aly|1gTI_^zm)y-Z#-YR zo9}St<}k<7D@!@&*5JL;A7z>)dIklU+PHqo7CVXo$sN9~<!k8B<(J_#KG&iqcw#QP z-4-Mg!xK-z^!av#^2WtqvKg5j7I^NyfUz!GwvCoHv6czZ!tFer&|2lPn&Ac>FWore zw65EIW|Nn)%DjudxY7Hn|Hh6ufe)lb|4iEP(o??7{Oke@w6hPPlB`vw-vFRodCJGI zP#fHw98l|sQnV_EC?%1F`=p(IbetndlchFz4@W+5;^=F;p^z;+?cJ0;aE!`q8G<K- z&!OgajG0g~1ohmwy+<xV_)AP^hOvqEy^!_|m#G|c8#-f#u6#b%>xB}~b>DpZ8|03+ zyLT8u!Fyaj?hrrwTE`L1ZB(!%Fuer7l!J7d7>DuwFF=?(!1CXNAqT^M4h8yW()d4v z;eTY6|57mIVE9)k&_AEz&#%Ba82<HO^>YPQb{0BzM#fKa-9N(KA1N>~)BR&i+b075 zS_}5M01G<<9Sbw-CoJQChQB{hVEOA27??g)_}6&*xdJmM6CFDf`==k|zsB2tqrlAm z*Pnvvvk#K-Uk}MYS772`qhn<HJ)<-I;pfQ2!cND=!uIKV_#ChF-)$P@VEm+dnTeVC zk0%PvtEt(niXwS0RwG0LBs<dvTe8sud)ty}_b{h{U{m+d)w$&gixd6$(oY;+bGuto zMMj$TK(pnxj9wdaa&mD}-BoVgsUf}b(H~YEZ6KUoQasLzVnuz|z<tkaMS1=@YjoqZ zV0~)cW$T46PKoBP_F|wim4!K%sWxk<H2U7&Vm-5xPR}!y<MqAe`gQHr*e+|3VT%tP zRLW&@YYPplzR98<3d*QID@HBb;n=%NwpViKtVO=MqD>SzZNDkYN8^L1u>|^?hPnqL zZR-fzYAclBd!G_t8KfAjV!CVA*qWjZ^#|Wh^iCGbjP(4IbRK^KJ>}RKZ0H`-4m*X5 zQU+VH(a)94o*P}Qx}I38bT-;@<?jcYy}8}nQ=9V|PfCZw?K^^M{mi+f67@Wqj<w?o z7M24}X_`2690UOwoqo%=!R-m(rB$qyE)Vn4M`Pb{46ih~&~$KrtPYrNyziG@?}oH8 zvPTNht|s!qQ}DH_N#kG`$YhlvgC$p3x|{@!)ny6Ds0{8kk1pCgu%s=`=8!k-i{!C; z1%_L3$`uw54m9!%LrU@HtVw+=Q)}K~p@&dyM(OebeQy_sRoGoQZn2Yr)=^u5l!>OL zLtawS?MLhZN01u;QKCSSEQj?g-6HE{Oa#L*C>p;(vw|tMZZ@5JQ2bajof`-Z?DMhw zb|_CbgCsoQH4~_@{oM?@pyvzgij$bsdV{9g_EUcDxgPJ7IAVm|myAhCknv!H>`KH3 zj$*X3_^lq)20ihv8Czh>_yf6}lu)7a2k$U>4ga}EPE2!<@%A=-FiM1a#OVPxVHOc` z(I9s@y?&Q~zEC|KJ95i42_KroeZh=<E&-CR1yPc@_s}o9!PE_dmI+C&;%;4s3xUtX zt9K$Xfg)S&Qn%}=DlC#ZN)h;E^|5#C-y=)qK(}eWR8kvk>7zF<^VS(=H)2XhGR0^R z6~;TIoiicF^`u8C*#=GGKm#Yy##+$8H%(FDMS-63#0jE4Zf(WQ9y!C@2R>ALa<;hV zj+lE16>-L)O2vH1As=?Z%?<*F7DCa_%PkT!LcQGaXh2d0Azyc3c9ZWn0z}&eF1L$M zO+&V3bhZ5m%w3zVJrjLa!1b$baOV}g|Ht3w8^joF<Nm5TyaKkr(1k5g@r|ma5&~9~ zgB<kAuAVJ9htwhz&nhP*)lozq7&0`6<Ix10S=s{cL2Wy6V(}>*xKG$w=o=`vIM61s zN_==&l^!c&GaDutMH(43vIByu3@7hMd#XGj2s|6H>s7=Zmw#76rvHM795qt7vK;;~ ziLvmOy|2ncQv)LAkTHt~u$NA^9j27!3ne=Qcq?E3PxT3Fx%sw5#Ry5u8u1E5{WI_w zEAq-wty8e$dBGG$+jZ!9JHybv08yYME>!v60*kaTA-H=vf{5VYjul(z5ICX^(+3-v zd!=FC0d}&k{@ALxT6*`8h3Nf2Uy5@<n8r>O?r+t$cDZ%~><wU>zS|<@@arAd;oZI> zKwYP82qytssj-ZK9^tc%-(wo4X9o5KXf|ebVTcB-vXPL#Y*QTQ0pkLBhD<ABkFwE< zO{*&v9c>2)f_TVHNwuH=`TdBi9IgSDSYrNp0kNhU{#?(bxJoM2JCWVb;ob*N>{!!& z$mu5L20ReJY^-*rWP8Gw8LL5VLLr3NZA_05?~M~K=EH6Hx(0zUDQ7-N$!6h73@2^Z z9J@Ue%z{`jY2uK{r4_)O+$mDTb46fFMU`c+_SoUzsK1K22JotEHyUI<B5a<HNL$K~ z4q2g_hN`EAZ}hcvYqatk)-r?Jutfl}$_j9aaYLTuN{%c(C1ZJvA<6+9Q|hbuh@z}* zW*esE_tgfz@E_he@_l(20qsDmaTfjMR1{5#NY9*V1HN!>ne6TTdi3jF+FgjQd?1v# zl3Mur*{?6JzCW8WP@>ntJXhtrF4N4wg?b&)s}0TC-LbLH@bTeUc?FKokq?J{@@x4# z0c5dL++#vDU-ElD-;XusVK4;Zblm)e4^aPR`{-LS8n?W$sqNFEL8M-Nn8&Q)-P*41 zon9brs_y;l*<a#tTfILqO#Sm|4bhfIPMYJ1<PsudXQl_S4gw~Ue|xOj4j$i{Z}vp( zigGB+*0wA7bjMZJUhqdUZhuU{(V_m2n4mnVD@81dZQk@~6?^bOQmpOthv+Ds3)RTQ zfwg`M{~_`~0INDWiY)w$>o@-l%D7yhR=-pb6@55lT3(USl36{RpkoUDf-%m^cTJ+} z^YjcUI6p?s3yya+T_fC-3f@O{D{$#k``6<94*ZCDgg)lyhbrvrZH%S5?&_I{TH3ud z!)R#qr(;;Z6L~q`IvFPFBlhR;ig$wpl9jKJV!FACJFubYFVw@pOy3HP*$;+>px2r; zHqaqV-X)F21Q;Ya8El~+8*8U2=(z`!X=kNn<k5$#`8)9;NYiN@tbSNe{A3n$$%e6! z$^?9*m;4q(Y9R1y6GQHKMc&rw37Yd-c3<NA()fGM?M_h}(TrO*=EQlU8S>c5QC_en zLiK4D4=PhSW1hH_v69%9Au)tKC08AJ6kn3pOOV<_w@{N#8YSbf`>msn360ZWPJMtD z5^z4O&DR4Lxj;=L6wEdhVZCYyBR(%py6maatI|nV{!Nl7Q}_V><gJ~X?@Bh`W+1#j zctAZ00qU#)Kz#`}K(t|<3+(Jl?e7Gq>w#8pgUiAoDkcP@NmxR-kMS>Z<HfA!buzZ; z9!gqT6J3US<bV1eiyom@mV07<hdS|u5%ZHsF-j1Cdo)7nhlcb%#v30zyavp2z1#99 zm~9`$WPjg?VdEY8HkCa*jCy$qW57aiOsTnLKevBQnoxZ^HaGn<Z{K47SI}42(i>8u zvwb-0Oj`yJUxC~D8fyBO`)rH5w>UvZHB3T|ZrJr@LU76>(j{h@aXQ`+oD<Dq&x)R= z#_fgjt>6z%fsKzESbTpj@eg$RX)<yZtFcR$-YfPIgyfiCCtE4j4wWQhm-LJ%Ph5F{ zKRov@!>vevt&tq8Am)f-b#pwI6z@VFO@tvJ2S1TrZgT^Y9MjnhxWLMO0CeYjz<;s} zVf@d#LH-%X{$&@!_@~_<pX@>yf7?Sa{;h71|9JKP_u%=bQS-Bg4NlHKj+#ZPtM)6R z2wqbvE%J7iqM(u1nwjL51{t*2?EoITD`#yWNV#>f6k;6CM(>y0B_1M3AbR9(hy_0- zr;b;T@uEd8;iO?5WNa2-)|(zgW_h)$7uB1LE?6xqj8&tCHb&kxm@QDXER@UJte4ck zMJ6cn@G#~LdJ_f1CzUTZxUE2Hkq?olkdvd%P9I2P%)9_3BtNK{rDD<F)|%kBitXq8 z%mFWP*YGWEv|0toe$k#cor_GKCn6|lMTce-sqmWs={03#1?O)<Q;sZdQdf*jW*dq; z7<?m4zsVjBw~C1BB5n#twsY^(0r0#ily7jA8*bTHY_kr^9<Po|#PEpD#N2H$!E=e9 zLk4pzRVq)`Gd;vq%}ESkYg4MH$!J8Zkt(PJ?W)PZXoMg)o@s6Ng&CitBQ7g3TVUnS z6zOTQ^<9h+(xxk%tp=tL`WC@*1svj7h-zPSD5+b}s$Oj|ZnPznITx~a1y5-@S*6ZY zKIb8Bv3lhK<T`5#VB?RA*KN(t+{IC=+2@P3GQrxV?E?PhzJ}?{Xl@=z?poCV6E%e< zXufI%nkxlhea*=)ilcvQWhMCG;hS%pQPkXE<IQy#*UyiCJ!{D0ieLRk07}szsj~f5 zl|*t54RFwC8QJ}rIH^6*B_n+}2Z{b2B<C2@xu>dX*SO#A4&^*{l6PU1)X3jxD=-vb zcHzT6zBb1lvfB5Qcq8e%y$c)r1YJsn?hwZ{a7;W2>e161W{pVg;R46|k0Ik1Rtw{H zGo%an&B2q&T2~yMuwf~m!eH`sbiIhS^#El+n!i9Jt1LBrCcrr*ifl?_S}UO07QAlH z%2g+lUx_Zh-;(i~eip{$Q7;@lpCA|Z#iJsfQa}erIGr;`sQRTB-ofj?y<>2LEkVV{ zx#luDOA}e%A3<n&<ZaT*NsHrag?_7sm-+^b0ocE7hQ1SY;I6edYDyOq+&3xI^;P^! zM3$s6K~rxXLO6)MQE9T>&==yfgU3{UGVfmhIFz%iDU3SLP^Y58)IQYYtexBzO@4~` zfX2zT#hv8|7UV$zZXodIi^vJ7{80t%)*b_p9?<U#xVlT1y+b5ZI~cVrAo0W;B#Y5M zR>pDRD1e{&(iH6c-0>brifRFGFQTKQ0s&m|`$z)A2;YQ1s;HMYsz}0Q!4#n6>A)@B z(-FzML9b1;Wx<-q(I|UJfs^~K&V8XRT<F@<OeB*!&oF&evh(hF&bXmbb0O4eJT~US z!_h2+-88FEw=7Kup9}177w6hq*DfN2YAAJdpUoNRJi~kmC@4V7_6LaX)J?L02*jx= zi2`3Da^}hw`4v28nYHJ|s#enkG0#bCV61~}VYS-&*)x(RKrgOKfkv`HOK$zmNL&au zg{WYmu_j5@Bpv(YC?`Y(n36)bQ&Hk`8c#x1GpSW1%vi#cl92c(hzEe*Z04ePug+pk zL-To}6vJ%<%_O>h;pUdsdI2<Mh`7b)<M7ijR)o+XzM~?UYvvM#M>8oHzo~~`X$l*4 zd(>vFs4xl()V@{Y_BJ9h=PM_R5Sqaaw&{p?Mi-q%<-;~*evuRTahsT2ZVN;lBfwj* zK?=77V^wG&iHR@XOE+E2v`Cq)l=i5kx$2n`JFDP`b1n4qm9QG%TlUt-IQMl+dw)Gt zKsNr&8DXFO6LzB&gaWLz!@Qxa_Y<5`b#)@J4xbm&lvn7A&Ka-->K9M0weCXl!p^Wd z>F9yoY_T1%ZR&MU-&9g6RnResrXv-jw<@+3%u)|W_(C1`!XL3yRfnkfp<d)8X(D&y zt%GIzD6~A0_{qQ*71`hv*imgz<;Y0VVf$zjAf&Q+cx^ZiYgK3%wicLg&pU9qW$1R} z8goL$vYXC9fgGFi6GrhU`e~7S{G&}sPuT&PTs8J#EJ(ryKYZ8esr+7SxPE%%pXr&e zpJ&j~cvBZVG%=5;<M0(jW5&cHDpYD;F-mVp^3QaB+X%96wC+_8m@$~DLRsF>0qo_~ zfAN3yrtshzF~HiUeLXeneZFyT5(62P5Au(h?+T}Bi=TE1taK14P*j=-geEhlO!cG^ z;B&LkAmLCTD~;U84enC`c8lAu5LDhT#unB~+B;wG7TzJVBB$Yf_Iu!ft|gK=q;>v~ z$;KCJm(4buL2VWXn~JpS(Yz=-jbwqgBML&|Rama`BJK|fLY618DCJ%S3$Ie`nhSHK zJm@Y81tF>J(f_G`8*OZ);#}m@l0Y_f%odpM?GVLs>`NVz(O8mT=&k5eV?-;rU@7vv z&v|-gyp_DKPA+5~^Sl8q&DqnX#5GCRe<7{Sd07V4A($}irlQa?I7vw|Q>gk2icLWz zSySM{GYHxq;61v0*0`XG8mAPFdQHki+n80wsbmemHyR&W1!LZ6gpb8$gTlyb-d<fp zz7~b7c7PU<6BU(Cmy@^ZU06VbC_4YUqG4>mlLOWVVxLHP8@ER6W2%qNP!G4kJyFd3 z<nk&P$s~ZQ!G5fScO%JIeH^Z*^8!GJGDKPAgM>xM0G}jfYbp{3*RqjFlZK7xNJRjC zLb#CC!C-Zx$eOW^oYOa)%}(oYqYvSmDD}_VY#(_dREIfMK82^1$`dmh58CrA7U#;V z1dg!K7Mo7rE<eBr(55Fpi$(u=f6_mr!@tI&KkZNYEEfHCrpWlW`jeP`KM?#};NRZb z|MT(xr)yR@m_B2evT!i|ag(fyhQf|2g7>4!Rc@o6G7|}jZ@Y|~fT}P`-<fK=hQdz} zDMY%1KGW8Z$Mb4#K*tut<d8|ukc5kmmu!XCEr$wuTGMoQ{dD(Uyq|U77o-a0OVfkP zvFFWuoqx&0=|rU4uanOJnz3<xeU&0IVZ&Gb3dT#MVlx=8ydZ;u<01Xkk&QN4aza)_ zHKY!XccsNURO0cgKIddrc&Wki6R{iDO^eG>H$m)#izSg-J747&z2UQnUrRnHV?pu8 zrNMgH-(&Bvr%^D#Y~HHMJo{!*Dz%9CEL`!&v!B^}HpM`7NE_1Dwl7iSO9-a`b7*^j z%U$hXT$X9rd+g~_vx<_t$Ad`JwfH=F3!<FF_K-v_Tyhyyw~Sn%go#$n?>u)8xeM=6 z<*^Ccw-{@-3ocl-3DMJn2~%M~>*8bQ(~YYbP%(PLRJaB|3>&W%_y=Pu>VLw}kind> zbGCIB!6sOvLtv2-ojaq0Gt6%JEQ8tD&ox?pg)9J$_~PEh23P|wdd^NXJp4@-(9j-4 zl$2(bV7<VvqqMVV>RdUH<rE65c?o|L;h7g_Y00Nip@QgY%D5q|?qljYCJrCCfEhF& z@gj74-K7@SYQ8WC=kyn(6Gvz_pxGtVO@>Y$oLOE5YgR+5v9hK);9#GViQPlsg*NDd zya~i~7WVh_(8^#C1tUyJNQ0XtFl;0=ADMUZKut7>3#J={MdF;wx_O`g4LD<f3n6sq zpL2;UlZmP|1Cju`F(jpkQ!&SkJXc6|fy8wslj@#R2jAg5n0QCSWfRj_?`m->D3C4B z5FJ0(W~f2s+w>J%vylSB^OP&pqX-ohnNs8p$`OA$D%2j_0(kt|AcRgV)KxYo^AyG! z%oR(`rVXEmLMOyvKnhzKbq6I6YpXJ!FLyoHdD&*mCfyMP;@&F44o4lt%flFl8~i#S zW5jG%EZkY#q5JJd^owaoI$Oc?K6M^?gmS~=8Po;N6e2aoz)e?<wga1+lN^iGAf(sR z865$cJFHEtbu=}$GXZ7sVz2*c=UUt$6qqwi!H;I@F<t>4u32zX=|mgDG5zzG8dBxk z9z>g4GQ-Uf?@V>Ul0>1X=OpRIx@0sMC**A9+A4=8l{+d_Q5m#A`9$(bF%lEY!qihs z=Y|e668-+&yYgXA^Er9Y1e}uSINhv|cqX?y|JJqWPLsD1@yw3PyHI5Lc1?DbQKKy4 z_SPPC(b{bRC~W&fg@qv2{azV~i^+1cbwej_a%S}BUx}{rNTt#aTpM=bf<s+9mR^8@ zv~7EJv19H!h|^(|a0p-{>LJvD_<MeK3nG4kS)Cl;@Q+{_p(`U^0MR6N1q~xdpb;fT zJ*iU@qWW44(ldUT7|w=|2m)gD8&{=4!*lJC2K%ilOxH*3JL<x#5dTDqXka$Hhj~a3 z;Gj?S#1UyxA%KtI`QaIxpEBW2HY62Nfdhb5@^$j3%lSFnH`#UG9yU9?cJ`m*!RuMc zTX;#5xw|kTnB=!SCrxf_AAPMgN?JeUq(J~TT!<ntf7o3b0Vm<_jRs1<fb+IExO$B} z*HF9iZM8rr<H5RiMc(?J`dzXjz@0lUq*h8TWDs5+03=+^wWQsTep`UZ&<-~%aS8MR z5U6K7)bM_<cJ-`tIGVz9|A3rrkd@t6D9HNqD{kr*@$6UXH;9ZbpWaPFWv*Y9j7A<I z2H6~Lxgj63nDBaUcJbuwOW<fjRSFT*vy(Oc%dJUWYn+;C_PtA+R6UD+J8_SRjp2bB zgCX9v8VEkB_QM>zmq;ufACvlghsB*Eb-PA=&U<XBG6%37>xOlm01(9_)iN)yuxQ4` zX|y~SHA^M9&iCi(B~>u87S&j9wMIsbE*>P`c-|ZYb7&?S7R9Lvn><I)BI_t#jcw~? zGINj^&vY&%A5egNFnrF$@DHsjwN+rFic94O70m$9=#`|_cuiNpe*ubwQX_q0yG;Li zv&ui+<6mv}zuv6E!St`SZvT9WzhS$-9cO$hz{<iw_YaQ6C$9S^B-a0S)f&@hBvw|A zKW;KEQq^!-5kc^ts@{6K19aE7^!u7?gYi||za}8)G_xs$IH1NUANuED^y)#kOZT#t zGigBHF>nBj`uPt}2Q94@n@N##=?R8(-f{E!HP&_>8)w>jty5LwdLw5pR+oE^_mXaG zk@pwo(DBf7P3Dsa!Go5!4UR^b`VZz`<JrtZ<6a{9{F9Xq56oCTZTRMgjSBsi>BaL3 z?QP5=FAA2tb(mS#m4pX_3(CAEnR5mtlM9hAl*H}Aj;x5y1i&IgUm#AnYy4=+MrsQo zV{d77n6SPRz!DMT$G7yn_Z_H2dfG!!!6DF%1E4bQT6OsUgrV@F6$tzK^+I6QU|^kN zhVor29uGMcfSZV3mu0Qpq`K~Kkd(NYEf+gMqKY-=5&>nM(f9^d8W566AQji3&t}Qt ztSfv883$qS$_*&TL=Zx($L?4~f6H>td@(h#X*n;}m}!+Jxm_#3uqh)-q2MFhGy<`} zXx;{kxBj9?7ZlPoj#YZ~62qn*GOYd1{+?y%OU1|1QNywZpz4O!k%^`|XI|=^a)p^A z7gi6jDn~{~C|99>4k3+DE_zRgN0)v-U8e`n;iIh?(l|?mLsu`>h4g$lk=OiTI<h6n z(3+bT>5jladbOVd+cZrf!mX$oPt3E!o<pQd0c6W4dTGOQb$=yHU@z&M-StN$HIZH} zjfgL#)lJ~9+uRBU;G!`MJKo*1P@$47b|9PsQ|}mt2i=Jj58o7lch@4p7Wg5ON(du& zo+qqu&Ib=XAsLyrAhrThoN?LWiXNtoj6%2@2dMhB@#P3EHz^<`S_zKVuV`znUil4L zDh)wz;PA4;5LL3@e@uqPob9#)Qf;ani0ozi?iFoSqYMx!4sdl4FC3405QtQe(Npl9 z`PFsB=&l7am_vrOh7XCCJ|*I{R`=)}cI2HY%E<`J<n0A*$C$PYq-At2j%nfxT||hY zHS$oOdMY}0ka-5qr3(a626D53PjJ}WpAetGcsB+r;)vUM>4>K%%98jh;}D`wA>kp? zk`WaCsve=p8QIwS2m~@iR?E$q)EzDAIZ0^hZDNae*BpIwqo;Z4Ds}Qw%p9CYONI=e zG9erWJlX_$3gi?~f;(|!l4a|{fiE@WujmtPB9~Fev&@1lts}Qe*?#~X;uLc8a^BWH zTc~z`iWDNuwnWy@2NjD&>O!T~zb6rNcsELMbj7Y4Vqqt&JD~G9#Q$JVFG!IR?|@Ia zT1J`XQUS3zz8(PEU}uv`u&sS<z2O3pS0I{Nn~r5DI|D>9jp3YdVkg)g&3iUBR*2}G zM@Z=hB_?*CN;VDW;z}qY5@Q5^=}YjXip4B&N>ii_S%sG=MsdVP3@n6n>Hz$?O((^m zf?kLCB@AU5t86*7<JD+?yjM33pOqj%MlQ{}s3G@)o9sfee0%JIz-m)^FyF@AGo4o0 zJ?}c3f*t=U3c3^8oP}ulPF}$pJ7}S2rjFlxiRy+!i<8AZJkh05GVj_Gm1OLMB+B)? zvT6R^cn0LU`v;2M-5B7BZ(2$z#>KoQv%;h^3Zdeqih7#*?XvpXGy+Oe2bonIuv)AI zZ@>>g0w%B)TFo)Rlyjc4^Jy+>Ay(iquEXmK8L4;|pDMz|&bmhQ&NG3RRw&kEpr_8} z?Lop&=9elNQBl7^V#AI1VTW%TncSLd1huxAww`OxtzUdH*|!d(8gpj)T`8Z?-{xxD z9%FbNWQWNWa6IzD3C6}^sqSCR5zppXGsOj}A7NqW!GSotY?mlB7aUuXOxUwoP=w*z zJM!48ku5#@6hP$J!H07TB8y+GaJPu#Scq@5@jP5X70pLQyKhOMsH$COIh6VBfYe7m zSc<A?o2%Hq!y<WaARnG-mXSb<A5$b=jmg{Ndl_6gRJu}2_lR_Kev1xo^2%k`*4#o0 zyGMLvE@z+3D`wIm?}DW@%iK6qUe7}gs=^!_)p6ugco^8e?Je*xrkWIDan_Lt`bwHM zV^|{NfRtyc;j^2RUeY1oxC!<?Bw<vm7O%&WH7+L@-AM$RNjnprIWj`>!5YzaB9B&F zANP~mE92BTqxff|s+Jim?d;y>0T=FfFN1cQ571%y?)A?c{y*p7{?n=c#o?L$kb}#? z#QwX(|5oV2^tU*;Ouz5UKNVnQWuRmFojt|$Ny7N-*O{1^=otP{yZ?JaVEP=R`+qqh zFf)9X5Lh_=eE7PC&59_B_o0gFyf|aU&JOj1xR<E@jQoDnmZ5@E#Tek1@4C9Zdvz7> zm)x721|AI4g%w?qyt`?f&6l2sPZZ`I+_jbyjxej&G_+V2#mj7-i?ys%PB7!wJhWI| zKdlOuneO4DqA?`L=ZPgR;*G~IT3(!(ZSUN|i}dW#X2<WQnpTG*T+=&fwP}h~#X{_) zr#OeyZY}PP*Tc>sk43iH3Pm+6)ROhwwFR)=Ze(WXs;367&Q)PT<WwT@=?12Mz1h_7 zr$_T4B#@x@LpiAUAXE#HnkI%Z4xJ`83w12<^hWP94}8hC4cKk**4p6Q%M#2+xuf3n zAyQtLJ(*F1VT6>K!Q{t3kV=h!SBqRchMo~()Vx;`i}tS66iOBiBQ~uWXylB{m}0x! zxWNhT1z&P-Qcm4P6RPPLx^EthS0Qlf*q2~5ET^wG1kL#pAvW<Oq-IBc;qKn+2z7Q` zhSBcDc-NPXE*fG*zojZ^M}cw~CN>g|3?}uCWKOSgMzX>@DE<cU#TXfrI#op1OKnPf zq{g?7J7CazC$v62RWi?{%$R~VhF<N)yo}r5r4#<N>ICn}7hM7#@|fx9?)vo!a{R~Y zkHFLSBM8n}?V6}H4gny1@19f0JMMKfM@S9ZZQQAAE_z)E6ziT?7`#KCR@BQWPxDfs z;8K$W;Gpa#D_1^a)*A<x_|0WPd-B6Zwb^1%5Y!<zBFGx8*xYX<6#T>vzrf+~w8IEr zM6&~q@azwcc8U+^zwv7()Nh4g%7H`-cn)-xPTvTHQ!&K|wjUw_IU&Epr2QCm;PUg5 zd4>-jOwfa5^vgdabbC^KnkNfQeR+468`@6thI^*M*bv6@T5Diwt9arQ_bqS71mFxJ zO*o`QO7hOzC+&5DB^ULLPT|P7CZRh)aR8ID4|6O>C{zk>nIaU#SX8uaq7O|H)I(oJ zJ7=dLQ7-|Qq}Z1ak6|&VQKEux;hHO9Rz!Bt#tBfeW!QDoQ%UpFaKq8|+YuV!9qfJP z&1{I}(H6d(Upf-Cgo#UWVI);6z-E=SE3HgR#|#aSZZBAlHd0mAHShm^t+G45*u-Yu z&?pntqzB$r!5c2N$`J6EAqE>fMPs7eni)(#b#~M!Z7j)G^Q`=|1nt^>O4bMqzVR83 z&;qb}#_g~7v_Qx2G2*qTp!y2670#;}v9%ocR!6Xv_f%v`5g$kL<Ip`)I0AU?Acmu} zBSkhgR<<{b2$mv;**(iLcX<g^W&oX0W<y!nOWPD;9H@!LXs{PW)-{vqq^X{?3QG`@ z3nj*g$^$^bCj^UmoP={;{LZER2qRO%OZ@KHz8x?$8*s^xSpnl(o*nW4(4I|iC)ODG zf*iwsMwm`PgWI!6ejUNCn`09)<WM-NmXtNDr(6nP_NQhS0`Q0~)x->Gqp5r+In~Y8 ziMbDPI@Xfm72?t_?<nNQfwUNmqQ(P{z+|9I8jH6A_rbodpFGr|Ar(<?rn|e5IFD9? zfQb0Bc0a|s*Z0K^y?V!*IhZwzi&XX+@tg-t$*jZr%KRc*+eT?|Q-|K9$?;q6I&oSy zIMZ_gIbM!pMccaP0V&tlO8uR5!1M*m`@a>)jSg3I=F1SgfLSfTIyoH*B~yBTG@bfY zjJHKHRGZK1sy3$7_4V_QrhZhFW1GqaAv~J~CXtf*tq@b7Zo|@r=WLu=Nn?h4`SZoM z!D~bltNR88K$~U67rqBV2-W6;@RZTa13}yXrTySDC=zOK6hAnMxh{WUm#Bb_e+R(G zeI*_2wquXvdG}miKl%Q#RV+T1b579dSd=O-;rfy*`$CL3zJ36D1U%VCl-A0f(CvsE z6szRTKN2Qp`>U6(9%`mShg4=0Pq8xY?z#763w*ro*Gio=SAK9h?l1CWr~9$Xq<ee( zM4cjj^#$;r0i%1BHE2vE<5egq$*XKG_J*Th7wj8CVmL90_%iy1`&QS?NybWQ@nYk@ zWafsYLnFx>V{2IiW#?nOrGp}oJ5FW;xlt{obXtZ`tZmf%wqJ3Z7EV!qzQT{mYZQNG z{G9)}@iQ}gV*DKcb>nAd{LOed|CaH8k{mu2_;)AjOw7L>$$u)q!pZTEDqqe|1b#nU z_*8(2la85{@pldd6Z7xc<ud_hR(3j82G&o~3(N26<ud`szXTXLnLjI*X5#oXz5ILF z=6@}{uzZqU*qQ!#GFqqVYW#`_g4ZFnqFDKl;>hpRxgE8+>)-qP(j^u&qAet#ffNyu z1p6#hc6_EXvoXyE28ZAu#&hGQe;i-TmUuXFmUXt(Wu%*(WS^?981~Y^cAj%JEjZ$? z+owxeG5M(c+TVn(=j+nz*NTDdUxmZA0keGa{8_V>to7?Ye>*+;3BEf!1T$j~5j)<u zN?tQO<Tzc*zqBKP?#YJWK&~&FcRLBU>Y(Lx!Nir?_{)z&AIz#=<2cVWEgLoswqk5H zOX3v{L*Ul}w`=bkb>@cP<D=+Z_t#=6yZxA@rB>qr{#09Fss5X2%$D(*E9J8e!$rOL z+caNRcu3F>wq4PKZ+Q(df|%=`2NAfdSY#qPYI||8>x4iDE~pYizQnc%6|ywZzTtx= zl!D-<7ki*@l;<eF{5b7A!TgUQQewXRAaB9(XWuQi0(@hNu~$tJ?+ZmR=-QSM2$Up{ znP;zfyg}9Pt*+(OQjCnv1a7zgN=HgY*R7i=l!6#)7lM=eFp|%XQ7A?*T}W-Pzi`cf zdu#GF2)1cG9D-&h{);e6%`fZ8EIBc_IvOOptyWtuFr0&&P|K-bcntgiFuK7eeV$H6 z%UJzp+*0z`!7I*p#<P})<{Bm_mCdGiOS<Z!uB+dxReP3BS$*W0mnDLY&5KP=rG`z- zs;rK)x7}7OwO&geE;{ojEP@}}jE|ZYof}Qq7#(MCX{@vy?wSnT?eP|e8rcW^qx1)Z z+xAFV>cUs<R@!Ep*6b~O;gbn%$<dnz>mnj6#VrcfXEKymXRwlsGA4?JDDv1tA;eBs z`G}lgt>Yl%pq`oRN9Gy$3tzaNAez6Zx>$HqFV~K~K>k`*{?Y(2OhjQuQAaKknvw{< zEGA7UTH<1P26z#8SH!+U6wr8~Lc&CCWRR9A(2xeL#aELD-HK%=BDC9wSybu!1oI=- zAN3bFn~pwtSvxZgssLF$16mT8%gq)}L=~YtNooqbx7m+W^gOpRVmX>TU@bLRxWEH) zn(Shu_cp_n9N#B$z7XNPim%Ct^Ei0%lBg99XGa7$KDtMDui-bFv&OA!_Tz-1ZiGDJ z43yAcoARx8<qZRtHw8jhrx=sd=*O>6X9QUCh3Y=gjFh4TU^5Ab-U%<@s+Vj@g=PRF zND5j~eEr>njnvrCBEH;1#f$fnDNJ1*^WKBzzTLr5x;aFAizgg#E|;5;pRbq$uI&Fp zGnMOFlb5*Vl1;%gML4X?Ce)V{<P}6cB|Z=6=>~oATwuO^eg@97EXbdoI0@GIgKjr1 zaxC(Y@SY))FdPf?*)K5@*ajxVnL+aL1xQp2uZOh#d%2FTA(g&%lcvxL(K0W`{jUKF zF(<0D>%k^jzoYIVM1M`;BOemdf=Q6ov8XwQVUR>7jS+!D;|^1t?n=INFw_xaFQDY* zO5;xS+MyP~^P=AVfc9Qv<Zms!(DpA<2?m3su}WfL2={Eb5TTpE*IudoSiVfnA9@yR z5v9{1MT(X}!oSLj48&~5mdTwJQavms#Qn#Tp&Y0+`3Ao@ZHnt_1g|DzOGz8qs<lgJ zOC2Q&JZJo<uWtN>YaV?$s?8xFz_oKhMZ$ISeLVb|W~m}Y$^h?ZVTWamUtz+6ieNGw zwoK`VjPSSWHp@(fZQl5{auz6554GeL5}FUI1s`IV;_V~r)tmC~fcA4On}B|<Oh>uP z=Kxwc8ssyb)G@e=d?><rUlfH~NU-s!9>Kn-V^yyqV?#<A;KMyex_*PzHL9iKJ$^yT zblqC;Kw2w|IDdH`vrq&qOUOYY?7~R}zX6gz0Au6NH-6Dn`!**uRy9OxS_nc6R#fL% zEeF!;hEqm3F5Ws=K#N-3FTI1S#D?QzHm@d|eSWmp?N*%_qxM|0lnG>W+@yEO>5hmt zu;Y72)Qx7OCeKyxOaIGH8+sgPJLJd!RHKQ~_}yr^xGaj?1uD^J82;&-q7;<2o#Dih zg+L7|2h@c7%Ycv0+mDOR*eIHf4Sj;UZ8qdR?gJz!?_a??a74U90<T-Wz>RWmiQ=2U z6jrYT2j(8oJQ1Pe$9_M=LK0cj61b&Z@HfMUe(9OUX5bq3`*!JS0gs@X1y|$L$ou7S zkm7nnmG$Kopx5jzk7AYdQCLjGa;;y&?gp|$nc++mUVQ7@a@LtaMYyYZyf+o)b#{9@ z30fi($R8BSNLIWkwVHf5-d>0^GRN+5p!5UP%T(f<237lMK>h91qRgT_D!-+=O0xQ< ztYLitxBk2iZ(>eEdz^4Q-Rik$$ETePY5J3}#mxK%VT<MWu*J;u-w0d3^>zKPr}*=* z#qwL&`c&ZG-J>wE{+6{q{e5P3RyuZ0hR=cuGt;L*<^T3E3&$rxg@N;r%O8sV<CtZt zT0p5NUA*N9YpEF}ldT=(TW^{Ac@@!cYQzb2qts04iO=QpWaKr6U-Cs4&cT7hYZs@9 zD|TiFXY*RL-qDv~M($q!U@xz&CFNl!%k>7WX5=5g7PMVFqV+85TP#d#F}f*KSVr*& zXx63;6Jk}rk@T5IO-Nc!GD6lq3(?Tr2*Jo_QWc71j-hqL*TI<*<NgBk>EdLsjMh6% zKCer8m!7I~T4a@8=9Rd7fH_Yr(u-x0RDo75T;y_UEVW2mq583~MEB*#MSE3IP)F?B ztji0=bhRHm4pcDFF(JwgU^i!>V__DZ{Q!$ozf;KB$hghk?J{^MG*ZG(510~?E@F`q zX%Zog(VF^Lva-y*h(qu`4@2N(u|96m*66Pasv}soVu7HU3F0^3gU5g3<raLOl}Vsw zI}C*sl(n{6#XN)U>n3x%jvhFA#~h^`)W4hXgBUV<#v)9Gd12;23L4eZL3Ce1C|BQJ z6_><gpbPq-4QBLcuTPO^1nn{@K5J;G0}hzkL5!OOf+4gv-V91lf3}S}w;X4aKkG%e z93X|GjHaU7lD%n{WFt)&mYici{9Z`IBthR_s;i$ojC6~16y;m&a~k&+D%xqrJ+nob zF4l+cK$(oNp#sN5z5kwwcP3S3ZVwXHj^K(<n6sqCN+6<1qwY+6fCBv9$ThZxI%?5# zQV+v7-#lFv)=sV%7#Nzo15&QuTNG(@ztrSO(9Ab_>wv^eZyNbRVFgWAN8(1RhBIj~ z$zqY=Uq6l{$3IqZGwVNZSxXyn2DHnQ<b?Xu7q5Gi<J9aN=VwutRT~<oFPGY)s7ip} zFIh6w@5TT}$YW!TK3{IiCqkI7Z%^P?+)1am#H}ExNF;f-;V131+4bbuqg4+Q#1xg! zx!Xa$bDoS9D+TnLW)ZSUuAgZ1vrX6FvkV^6DNCxf$5Su#WH!n}-++~sDj|b>SL^pp ze2-BUN7$~r08qmXS9eTdVwCvWZDt?e54jxX<^+%J-YyCs-<Mo?1zAg6doM>{ZF^pv zZxkt~-T6WWapy*3DZ4vQ4x5fMBrYIOS`%<G7VIt#c*O0~YXgTyP@8ntVc*To2; z!XP#nWr1b%^KSkuc_8a3`?h!@aCG~EXiac{z4wBVA=_14YYVv#LI7QJ$>@vOp@u6p zb3THxjYxKDPh<8bF?YKPY?A(kQd)~z?#wRz9H6WX+L;_UjWG3|csbv$HxNd8|FR)a zVr-tvRD69iwV|#^c;vvK972!YFZ#ywGQ;l(FNZB%<&`BvO_q2HJ8|j-{<6RD8MjcG z=Q0?K=o23}f<OFoL@bIzZLwx><={E)#v^Wj<XH@%-n#--pO{Q5N;$s12RPbw>$RN5 zv&OVuFsbS(1n+4KVl;g?z<{+`!Qj}3hfnwLpbC%R?p%eTXTAYIxkK7~W*F>$U>F>q z7zW#a!!Um9fMsU?TZX~<+urzd0cI9D4mO5QHrK4b?TtSbU}fQ?V`O3YWP8u{+urz7 z0hYfki<6z@GlAbd?=t~rc6K^;28PdCA(+|zzwj)UPmni^Ol*JLCh?DXLc44Torfw< zH3EhN3*ks+W1U73AWKB&c@`)XGdPA}O>;@40f|T+KJSy@WlKTL0`R<MEX+7?n;n=p zvo8m`2I&*>n5UW%%kJFBL}3o3^=UIq%JQSjZSK+DRT2FRI-w&=&qTB1qLVrc-9O@& zg{pQm4JqB$`FYm!)Px_c1!NFeFQ_f>qC2`Aq+*27feH}_7OA1G6dl`Zm*R+5C^_?X z6?O469CgA~=^ZA;ha3<guh7cE`KB06$?|*qz^*EX>;Z5s4_#iLD3ooxT#FP>3W~-# zCW_#er_kjMW0}2;6tAkef1sB|OD>~W-A*Wex1v;n=w$X*Vh6A8byTwDj9h3SPj2os z%44b;xK)$1nsww>M%D#E<Lp%i#3wYMMBR1p)zXqg6A<=W$Z%k)wiqGRqAjo=xLU9k zFID(SJvPJ@1OD8Z2M53X)@_Br!~s&hoclg-lhSJo@$v4|5RyLOhNZWRjEJf=xG;3x zycNTWv0Q!D{Dx~@&WN);Cg<K~vgnwq1^rWxe2H)P9FynUU4H)?Hc{dzQsxhAsInM; z4oA!7Xf$}O*O6QaB8LH?m!d~_Q#YU-ZsjXRK@MFa-u$Z-0X?<WOGuB8XKKVToD8Yc zUzDfFN&pf8CEOcY0e;Y3dMB`RQfh6116G%Vopx~U!VDxA(T$1NP*t1QLsl`eGegl& z!3*b0Nx%i*-|>otJ}|`1;Wfka7{0R#N8E{M0mL>jJCBW(guhxYQ>iJi`brvaP==3b zSW?;IPDMMNPN7PlOM8PRZkw*jtSzb8Z!ATSpp|I~d7N@+97o=Syx%oa0_bOxN|-i2 zqRC^e7dZj{vh5YjT|r9R@c)HP1`u9gz*;N4KVT=1;7*~rcbNrlvSJlknIrP}{WZ|z z?ZFjK3V7X}gx<cg4F_H`e-Z_+$S(rWQ;+ND772zm1)+QzxqHm+@)SWQh*_Y)*F%V` z_2tsFd_;~@LSJ)VsidAv7d1x_bnR*-7mqo+OV8PFfBZN<D7Rhtr^b3>>38}9Cl;v( z$wkG{(qR9lMaE2#Y|UQT1M!H*vVO0-r1L`Fo1VMduf1nSx|Wz@5Ma5t;y!R(U@u@^ zDovftsJ~eG2Ec8-qIaKyMB_kE5=PjTFj<+8#2;9j`8B8EMEj5?HQvx_E~}uEjPXp; z54-QXY_>B8dpF(raEyaD;iuk$_70$vDvm(;?fqe`wlQl8r!x@{x(`DH^d=gAkPoqC z7tN~2=2ck{IQG2h(u)e(r}}YRzc8G<+#X-FKmOWwD`vK&)2Mxd_bv#>k{N$=gS^4# zaDgUL5qt#U`mk=|z>)BViVKH;CoU3bGVy&zc*r#6+L7HaMXs&Vm0}5S!q?wXiM|YS zrVD+jaWr7uopCMf`SL9%L}Pftf6+SKFUU*AB@2$8z@0=_Ox>GK(Gtfuo#vfa8d!0c z*eq8COZk-M?NqbOLAFY&-Jh<7#=zdV1za~6vVVmiao*eTi<)C^z2)#2{b@Ua<+H~9 zCJfTCrpu|#ShP*PWG8Zhi{)8k3RY29#sSsFBvZnyy62u;6VDy=DSlkA4tbW3+YGAo zj4rU~Q8#_t0YejpRc>p*SQS1Us?=kE$d}lobd?I#QppKl>DoEU?s6ypp^T9G370is zl#EZzmE{jeA1t4cK3M*c^zoUwviwH+VEJ354<`2Cc2l1V{M(~%_TSw3QvnuM20BJ| zmQM)E|9t;{vl^X&fSHYf^>10*Cj{lc(*c;II%>W9zb2Gpv;_iLMz<t<GueS8gNO$( zFr3N@u~dUqAQ6<u<JQS3cb`w(Gey`VdXU%B8m}n2zkknYzD$@<LJ3kz9#nZ;t)QUm zZ=s2(;F0L(n7FNYJ&4(wl2ZKstL@jt`D-axL3AI}@}3HIUfbsKy;OXWpv8h5L#0i= z?m-Yqs&<=`<}?k|59Z{9te+EK7ME(Bocp#{+b^qY_1eIIOEk2)m6OeEQ@>xZSvRoK zMfg8}u2%II+Y*n84P;Qj&azZ|RW?o|Yt7WFb@P1WS+%zJ8lI(j+Hiz#@L+hWAi-CQ zV@jQHXz8N7!Qi@$=H*{YkCx`m#C>q_-oX61EBRf1z+I2IHW{3Vlyx9<LBEgd+NIST z>a=S$zHx>rq){FNA)sv&zRIZm#&Ux)Bg<oH8F6=k?>ef97q62*>2(ZAOs<yU<YzXz zxOR-ciE?D%Zmj{Y>&V{s+LnZ&{+5IFpA&nI4^F6M)nOC5#bT;bsR>ISI37C+U=<q0 z9FF%inQan6i^W!9-!zM~7x3y=&6)}_@J0j7GQnJam``cHe|;_dHp@_VhvUT@-wQa+ z<7Ne;?a+4kb6|H>&s59GICcA+Hsb0$L_(E>|6C8hNdzlStl2UtF?PqCueo25LoE_^ zslF4`Q7j1r3AAIbi2zF!<>n$3^O*MuI#g68M2>{S=1PiwY}9e-9Rw}~rh`3-6#Kvk z^R0<)H<#bHIa8_tHlxymXQO#AR+&69@|VA-FpGym3~w<WxUH1MFls4jt0RgUj!yEu znEoW04iqJ12uX1bvTV4SX>qULC{Qc~M9?s-QIkK?s#Ip6Fyi3WoEtPMrobBiRrT`a z;6OvUJDG6R<IGCKDZEucEqjS%lkugx$sB6K)$#;)<l5VOVF{}f(=s!-gc<-|gUVxw zUELy;9ilNvDf9YrpRAU@rXoGi#3WB*VGoMSRKICSLd#$sO~;64;MP+YpM6~JJPUxd z@D;N`Z)E;ri8A^Wlt8FF61fVA1C9}83et_be2`go?}C|VA>%sUAc{E6Riv#!p)`x9 z;uohUac$86e7M`fIs|zRB)TNpHtNZ;A4TB^QV_bm_KUZL$j@Zi?}o$V!NhwA4QqzN zh@J*HnpXEPJ$HM|ZV@o6G#P!iO_jLLokZa@WK~6HJ9vwDgl1Rmm>`Q_A?D2X;Vl3+ z+6XAUPo3BdyU?+E67qs;G8I)89Q4nMc;E`%i*oDqRmDWW_W0@qS~WOX`kcY@o`}ve zr!c{pc`o1Gnb}W=B(Nx&v&@<e=a?$|WAu&a)LVgACnS(+3#>`JdYIrf)|Vd&3gsTM zCI#=d9~LcWyxy*6+fYDm&uo|(@JJhk5VhwH{nM?GINToG%VZTVb?EkOYpvVz6s=bM zz8Os~mEo=HlWH^Nnt{;K2y4>W4ZJctpvMPovbchggs#3=c}5H2dkvjxo(K%7@;QND zJa^QiTaXb00zKZW+SV0B8wp^#XEN|IbRoqN<!OJ@9iot+0*DiZ;k%cQ3e}u$)Cu>9 z2S&YHe{nr|R29(9XFek|_8HS-IMnN36i4dJjT6Mv$d?leKtoGgZX%b~W>UZ+GrOo4 zjt`bgA{mhs!U%Z_V-f5`=65{(3PidCXZ0e#6V^{L1(@#g9*?>|5U=v>beM?71*^a@ zD4^ir%R(X8^rM6o`pHsJ{?(<%?AsETV`_%;38TH%Iv!Sp7{A0R1^J{cyB)jmdmrzu z;5xc{WylW`<w^H~UXzpIXH+XeR(`I7CGgjMpv70X!$L$V-G0n0A_oou$!7Ez73`s3 zq5_ZeYm0(dG%F&40ZDD&#%09w$<WDRTeR6v%!oU8gYJ3&M>o_@th{yt2Lr+ZM)hMN zN>Z4KR>NX`(W`rLCPkxD0W`0eo5D|a!m^39N+6uGSpLGEYd(_O=%gbx`ry*4O_!!4 zf9Xc|d0g2u)%n`*b!p&F<}$np&zd6_O^y*w1^Fgt{;EGE(PSpb61njZwa+xu`GA99 zJXIAz?X^FXV8mL<z~T0Ct*Bk0ROoHcw`-AFg@1@D(1O#xU`TsF?mjx{in<-(ZpYY3 z*lv=(UUZ`*k9(uvi!s(`hKTyptw+Ng6b<xx3R_x@_HwsFJsZCx=8&8DJ~6Y<9k5b! zKHx(2!;}fncX?6$jf0*ygCymNr*CF26=nA8`55rf)W$;yW{9%>^6c!QD7l1(c!;OV z5SxWoz#u4;y4A6Eg$XZASor&qa!TLpkEAr82=X_O{I9q3fnmKSjY(|oLCf8@?5nlA z-RMUTk84$>5Ry{cOc`*UUxL|u36{+c`)R)*;YQHO@ZClncE|O@jY)T80X709+-Y`) zcetn463TRDuByAsl-(l7bLErmKB%1G4(5$sBa&%!5pO}`-dM)aKHPxTj=H`f=(n;h zw`wLX<8(8!m$ELoBqSDRs!#K?FCSQx$#iQPtkOjBPhD9T^;-V)d^W*wU{Tdwq^vEu zHu@^9jn?LLdzO<<9R<Pt-P8SX{$&13c(rOcz#Ly0{F6?Plep!hH6P#Uole%Zu#TO& z*Mo@UTfPmG1Y~}iP@P2Kx{zA1nWAyxbVUsfp(o<?Mn?N9`!4`!5(?1ILfe1N?fqwT z_}9?(huq#zL)&j$GM2x`?PdS%K;u&Z7EV?=24=QTLL0|#2O6IWFtc*dF|+*jR(}`x z?LgyG0j9qM*jPS!g8%pcKRM9&|4VlN7Z78tpVc~Yvj1_dW0I<b%^Dj**P%*FS0MCK zMv*o(?mC&EdakKo+j-ux;DUW;B&i*ty!YLri*};30;VWDTiLcPN9Hhl|NF<oM0-qI z+qApZzMH*Wd-t?h>!f44Hi}!5bX|T+%ldl}9}oDf$EkaFn{>Glt96l5w|EoPT+=u8 zstz?Ri~AOFaiiciqaC{%>l(loTH4o&d8an9x!GQ}miHdZdtKF<bC(CiRu|$3fp~b} z*dZ{`*ix~WEoGn04@bMo=2M<(-5(2TV90aN5HuRHMwh|Xoo$oll`pXK7h9z))Jm|o zeg_	(bMS(dVOWhh^-9J*<sw=+1a}DxBrkako{da=9}<6bNKQ@>k+u2-4qx5^Wg* zGBt82{LxniDiR%&hVs;>dgK+qQ%5#6_bwR5d}NCeAd;;{y%;EwjV%v3Hd-02UN5Z_ zqrK)~k3|8ke%0ff^D+?V>=>D=E<F+WzQt>?C#vWm$a`y<&X|hJ;5W#KH&ZAJ_jviE zrkM5+Z^z3A59Z1^%y`i5W?^?U<*8QAu*ReT1suP=hS9%Q7D!GvMi=Z9-}N4{0P5T- zz+`O1F5H=en`&vYh4E?_kJ!MKH+4Eg3Fvx<^E(01Pi5isa{R}Z<nU{gVtKiE*Zy%_ zDpZc6(QJVV$_P{Q?4Qhz1|8IN9jH~r=YbLrG@D~+Yqki-u&UtFFa!tYqr!fYSptf( zXcNZ~()OulM&;j4k{M$4_rg0dgG-mBld~eh<s%=%KRUwhb?VK09%IL75wuei&H`V% zn-UJ4hJd(A*dva0xv(kL;;jHhh1dhsqP|p#*npAYY=fX-t3W%k=V$kh;<1593DR@d zgzf@Hi`+Yv@l}a8r9c!(_G%f5Is~;zo8+|UiCwRFeA}M2-I-LDnoocQX9R%f{?g>R zMK22pPdaN@UjKOHc|%bBC{4DNXh_ZQ<A;-D6UWw!jx^uy0Ful*1yNTd-_?SFMnP^$ z^_p!wa&C9!Dne5K6OS0j+a27^nc?y`jOviBG{;;hM2z9B43Nmsd5%^Cf|ytmwQc<i z5{CockxIq|mc0o$LVbnuSM@FD1Dz|l9C!CUUj|5wUv35Uc-yoU7>gD4j>esSEwKYc zdC{xFH@u{bR)S}lBul;!9iwwrl5}y@5G}cE1ATt}a3ttu?lxt%XqI`51Dv)zRY&rY zWo}#I8wr!J<fyU%W)orqg2JY>Q}R`q10+uY<Ef4+nZS-p>W4oHzib7PbpT0f(g9I@ zJ33GGC3mNzbd7IkzZQrNC~E8TbCY0l;9Z@#by0Za$@7nF6;%{dKQWB84NKZUl++|L zDkzogbA2{Cix$f8Z8+T;vj<Z0QN4qI;E+Qr7pKXr_f{Jki7wbx9Xy82cZG<eEj)zZ zOTnEpTD%pGMJ3SJrC-h3?$kWdmET-OlZRneQ^tu25Coi2y@pD6AC=>VR*OyVz4PZf zB8C@EtSfF*k=z!Lfsh8bJBN02+Kc(Z8$zVOaIoFuf}d~)Bpp~4#wEwWKd~U3*X-!s zBtnb)lGDeZwRd9jmWvIu2Qy_q$*mrnKw_bV!pLD6liD_sxO%I4J3T+KMHFNk+=m%* zH?SHA-xQNImrrqnHGIA{a5aOBDhg%9r#r@!n!wLJYhQilHjF|Vk(33iZ4N|cdi>_f z-V(Rkw`6yqB)k=E8M3svlMFaMvJ@s0w6YR%ltrOjuL^{M6j2E2x)+E|SdS@}0tWp{ zo?pUEl@SX`fA^b;!j?6gB6MZV*M)jxTWhAO7V&yiDl<PhuuhUKOuwLFBP8?-UFnO6 zJ&dw>c9s?~xq+8pH0v~dNFxVRA7?(cXD;x7uc||ixff8Wg?<e*K>`lko0GD+Q4Y4f z8)blBPB^A_ODJ04f&JEGdkgs^8uOo~g3v3T_++&t>p};g_k?oups%^ioYSo)nTfgO zms0l*<f-Ek<akB_5*T=LXRhVxY5ekhT({^=1wj(8EW$@XH_wK<APuPokmmY->2QpK zNLz1(eT@U1B9VCB@PW=>%k2Cv01pd`2k0P?B48MZz$-?rRXYB7XKBfAa|8Q!EU}$0 z9&nmdYSoS(GXgj(T%57NZzq?t_kFL&+<VL16A|%fOk=KzwM!-C`)Cqfp8tg#R-tsA z#1GC|>my#{cfliYJp`Ys(g0x~p*>7+w&*3@8wJ8eNOWu5UEYb=XE+L7YfE9VtX}&r zM|d8ZS!~v37+f-L4AQF+4nUl&jJhvq403isIq}y4K7#;Pf&*flhzzO6i4-tr2(H0B zWA~{5I)xAqI}PkIc0$JM&x=1h#|~Z2VdkIO#aQ5f3~QUCq%6v3tst#9dR7^~?6D)P z`JlBCIUc&MDU`yTL;FZ~M=7RuPS?%=YdQpU2hy0lL)?RDy~8`VAw1B>S1BkZZL-&t z5IDfxQ6qHMzMb+DdfMMGPkCDkQgmRI?N1#H+d&TcWmvnsFbK5)a~Texn|bpp<j@GJ zjdlYxR_+cZQqZ?#aA7_Xa3^Vem%VG5u}lV?+?b9bW`M36eyDZ{QjqXu=1n3~S$QHG zaEjJon%jDzjBI>~K3Ce2aWnF^>zr7`+CU`n%Glb;fN!?>0Nuu>>iI0`{Xu0a>nD|| zEPq;=%F6Ux(qsLtGL_};Ri^$nA?<Sk7DkSLly!bmE%Dogw9f^Y{(1s-_D}h<ET5Nk z{`aHVXN{^He~yPJQk8I6{VSTCs@Qrm&WD-C1L&lgaZB$ujqXjerH?ws<Cr4GtKQ}z zDWd#(y#UUo$gt;`5Z0tYgFd@xjtJ7GHBspf?t?_4haozqS(HY2(#8_o9*DaW!W^Eg zdpZ)g!E4d)g79as_fhbI@2^|_fld^6@yZvX2VPHigNiixc6)O^Uo8j*)kzaBG<VJ& z!SK+hSX}7X3MzMOa&bSwO(O4-;*u*+05s2dnt=b@zUr3Rq9eC|X3PmK5O)b8jUj@E zBg$o$>Z*oQI9Z<k&i(qd>=K@K*^%{}Ju)-G+0*mrPXnFhPS!yIAjVu}d}-nX2ZbIm zG^n~yeK%7^s+a0+N728#U@BWhCDUxX<2$8o{!ulZi$+u7l60cvG-cW3@NIJ3WAKO5 z;)3M;0<RM{cz5ey7gMBngoXQE2r!{o2gxK;ZXvnRz&A_}B<~;yt@}omD7sY<kBTNW z=3B}~5kK@m$R&*2*`3SBDy0?-vrKzB0(vwx2FpmW-Z=hezcpW_p<z4@Vx$ZE?BFfU zI^$|o<VAMVXKn;<KN!KDHL7ApBv>#&(pTEuR8ePY*rrytkEA{cgu0<_OxzM1%-3dw zbPz&%q)-GJ8*HqvD4uWf7;(7_WMq*e9EXn_H(yhWr4x;^bDnx1xi`!;BbB7x_@p}( zU#{&=iN7yzV8wJS@@g>D@!40Pt*fNovES;QY%qIOddw%i!1bXO0g`k(P3L{5+C71Y zr;Hk;Obn3%;IbC{fKBL`c;qco+(@BbYv~Kk7i~56<IT&-kLZ^`@n=P?8jHZ+e#DEC zdztxe@#GQ2`dvqBpUp2gKbTSp=@hQCLQa6Qh=-}4pZ6oAQfSbOO&8%9nL)r*lwLY@ zw+zS^+qhQafk#HW4oMYmg*#id85cRF03;+<3#-%k)<lEVY@lETQT+Hosu!f}IlPs5 z1;2zSMQE163x))SKnc3|C@>ck<yXCpvez<R3eK1}_X==QC4;F(wusnB^~K#tW*!7E zqVU;04j{Iew74!Fo*h)txHM|$<h08sas!G?uN*hA(jnT<nmb?eQS3L?u~Mp@N4O#s zT({xO;X(9N3lDln1-`>Rz&J8S;YPDfIo1-~N;Lw(LG9~-Qdxh;UdcN~C^#;9_HsF` zXo}uE<s%p3xvJ;atsgKjEmrwQy+*ewOr`tsT<YO*B&Kezo=Q^7kf1o7H4wrF&dSI` zi}*Rdiw5#vj~NpLjBWKnC3??83>E_Vlr$DW1Pknv*d-%-j({QVv@s#?D67uS!MZy< zZtbCT`FjRr&a@41er8QjTR^f3l}Ii0xyu=9lMR#(#}^N~S6V-2L><><n-?KP3xw5a z01KBsR<(}B22w{S@I@NX@Pt~5(6%v)MV1k?;=QE`oW#K!aGL9wi@JHuZBj}EY<B+u z{5e8f@zx|Sa(}*olW(e~HY<N6@H`I5Q)^;_HP<7WzY%LEWds-lTQkk0k(-f<6B1xx z#{>(JozcLVOwAiKJh~3~wW135K^V6=)nID1Yf_I<c)OJwjw4?q$<4sQ@AWP@OaF@3 zg8dG9jUp9k;#Xs>P3r}#JC&Ap%FEBLezJg!#05^F<>Xdov4w`+b@E70U?V_0`YKRt z=bcc+KpLcsg)UuN$K0hQL^O#vd5`IfYeJwN+OdumB{$%nWHn=QwfJ%<q&eTQB}XsO zOj?<>Ye~gfr!K0BI{Kt0Yp*@CjZ7+@S72)IBJJ$T={cG&Tr&w00&*3oN&9j2MP;hk zXt~(Hu1oANW$RkC5KOlQ{2}SrgtcVs3mvvcEk&L6s9qN=Ha%IH45;Yc#eSJLk!Ee< z>S>ew{zHrd%>W6-qi7dFRyIuwt0Szn{TMn7CaiPJcnPgnUTwTUanq>qk8`}644j-L zjB9yg2(_s|$L5=dsXC}(9a~G<43pb{CG(*5){jO;)-T}boOe53YRA+8v31<UMVK_y z`%+rpJ_dwQ(jt!Bqgizc0R~>PHv!N&H*FXUq@T~5KQ`~gR}FFvx@08{C=B(pt!A>( zIWUGi_drrt5nI@_tO<?7la<6Ez6?e(8E+CpPz2dIt`IQCFo)cyWdm@T|Mlf&b#a{D zw@n}EDS5!@PAz;QeS--@ED3w{qpc1<s5?At*9urIf`G?i*%!|$mse6tk+Sxs2=KkM zwo-=QI#a)$`xa-DT0_|l^J^{gn$cBH(WdKO{^{8ORY0o0vN3ODd-REOG6tLQ3a;A4 zNLZ?j;jf=_aHK#ZGQhFvczGMoDV!7W;h83Y>!T&-vh6J>3x&)U8~6IWA&g8~dL!U8 zO{FiyqOkqE6x^2Jw`Jror7MU{iB7Ta-}+>tRr$?0Lg>tg&0DX}o+J2%FU9nRqZW#r zna--tCLr&kiPo_|jT}UJ@m*6bENfG`J*FZtisS8w9>JF2>h!${a#0Vml2slch3Mf{ z)yzH6x4XmC_Gk(Ry6r*ElObMnhJ8MW34lLIPON{>%**;oGcW6(HuHX#oPIlCV*Pu~ zyuVGR`ZogqmXh_`aIDV-SlF297}=OVx!C+2y#J{H6DuPf2NTn0ML(>c_XGd8%Y0Zl zKZ#z<On)4`DwQQ{Rz(oHUR6c}0Tq0OZ{J0yzd*AH0?%;{2*@??PVcSgOP*tCQZ;Qo zb-Q$>ks399-Tp#1GkMlw(xvv{>12P+2dAuelwyWeS!J!Pr}!i%w^u<U^+qvTH?MSC z@~DDvaN1qXr`-WRp5}OjZWmh#l)S=1ggnTcwgi96qHRUQgb_j+!AGke@y0R*ZE`-l z=%nacez_`A$u6hr+Rt^@bn#tEX0GZa@C@eNM7wh%P+J)Ni^Y-3cu{Mw&joCOy%md5 z;u;k8@Z>s6;rzqlR}w(2LcpIM&=nr3=WPK;nx%PN03nwMseOQqjX&B7kdH$SMH87; z0>g4h%tp(U+SF`zfQplFI9PB_yf&#jqbbxGfU3<rlwzbMeGsfG4x<sn>(!QhGBWFe z4pM2YN1D1f3XP862b9|;cvk!iI;&q8<>JL>);vtxrKR`2j)%eW#BcE`g}x}mOZScN zznO={!^m_FxWPc`+q^|El4D>eHdX#ys8)OwAyMaT)ed*o?%|08f-BWTbUPH~IkdNf zze!97+zx<fZo7DZZMO+z1{+58<$2rn`9Uzr%t3lmwCQ*U{h>!Gdx1Q02JEP~_zV=r zi8C6XgJ#F~ZHjukw3{3UyI^Ws9*eM@)%O6HBAq=ORR6Ze&!K*i6;KwsoeYo~od=pB z7ff%BSyys1KlNPID3swVQnof2(@8lVcsoc*i1SiDHDa3?_<Zw2^Z^$k&o3?r4KlP6 zdXH1rOp$07fl>QhU@IK!bkH=Zf<9#eoqLR3<xO?HjmRGM_JX2cA&8U(k7XJlEFk_> zTCDpk3-)pWEA~cDuFctV%$MF8YDVt{84mnVvw`5`Qtt#bLg~3P^zjrs7)UvD%uHzU zxA5W>*(u-13%t!R?5rm%EM7{!Kfry<fp^CpA1lL4IS9ImVsht+&-Bv5YR=k0sF&-N zlx=JLO5+hL8FyPyQ;0*dmy8X&oaeBk$;+n@HuSs;EqA=4hhgMW%-@#%(l4x-fjxW4 zfGc;b6;+EtLo1XgVunt3b{2^eZ|aHYiqE{)-ha?mZEjS1DqP$fOO8Wgue;GC)T4uW z+_!B-H*9fDs~(Bv((P2&w9=}uXigq--fOQh++wf`jwhGBX^gV<XlqAgCRi5ys)be) z*k&kp;e}T&cs^uBmJvg80##A{BL*>GOM6}6IViBXjeP+sEL3d=$5*oR#I(x5a1(ES zNT4Uhv7ui6J|cDoOm<TLvdt$CSXqd1OnKPJ0E3A`y+4ES+WU*FCIu;!JVl9B!>)Sv z6#Bfb^}CQG6<Fx=D`3b_n9?M_@C+?kfH+|j$Gtas1I6=O+_q5zeh-5OVa@f$-qOt% zCZ|ET63gslLGfMgj9vaKuxPU47*g6h^lWp>Z?e0$g;c9M6(%e4JYyG(N$AuWovH;o zE1+s}WM|EtaZ`C);4eOX{U2`zM_sW;z=12*f!%ZMAT)g2)O~_h6<j?qQCvZH+=$&l znf(ZNG`QV^cem0<CWs2tjs9LWIf1m=7h00|0=<F`UcN_V(3Xya9Be{MHeUmON_>-` zKNNx-a>o<#y(qG{p9A!dpL;leEIaLsyyor}*XJMEar7P>_bDGurVg3OFyPFMm<pyD zxqa50uo&pH-O<}7r)*7qcGnJ%!nT^P=%+*POIF??-e`=6_A{nceYcses>ONIkJDba z^7h@}!U6M+OE#p;PiYw;z2NEHAEj3z{{;YetvLUgm2&)nm2!S!rR@K8D`orb41ty7 z?^r4G@4(4V1z6Zw=-8MzJ}dEIW&hO3{`9ivzl5J;`((Nd=U<-u$F;0V5;1ce2whXv zrX+CDER5IGF<N%Iq^h+MTQlriu@}-V8VO+<VJ05#A<vhJNxOPPKrp5)1N-*#Dlygi zzZ!Ww9>n*d30;jMHEEg&j5}D=Y3&PI=iItftv8t4r9fU|)6OWrvoBt?deQldlawK* zuan@X{Gw^tQLFkvgqm()MP=`O+H<q6_jRd%rGeISJpplB=0>XMz)czDXDi7eE|&+o zKMaA7d_gNkE1NDWV>fIt><;{di#)Z7{3~{XJ@!+Tbm~4bl}rr+Lx%FblfKZ#a&i4n z>+7>+YB?z^ZCl{jGMbihDB<8L@Irq7`^0QVb2?(~M9>9*Xc?O=2d`J0t{rfYBzV$L zf?`r1|EP5O=9er@PhwO;{Au^HnoW6(s0k1er9tYVzE}%52H|)pLfBXI0RJBhf0<h> zECjDPTR%<=0GR`w1TGNW;}&g2WT)#h83cM5jj99Jj*zPF7jP$h{Za86r>KcO3Mnqx zH#(~C;G-YkD0svg70>S3T=Nvz{c+(cNl|RpOHXY*I1dzDGUR-Vz8lY^OM6fZlhzp$ zI&TuKZR5yKr$2jH&Z!0^$L{-D48fH;RJhM)3lLHj(iU+{Q#V11cqzbF5p$qYVZuu@ z7FE=g(CKox%tw=1EW$d^-Vw`7?h8;>Sv6-=3=*?)Db%XWshpvnEF8sbT!H%v)fWUI z1w5MyMdk}Y=DD0_j2HJi@-ieGaxw;NBw*=w+x0dUJj33^E#VGPcsGP52XN<5@9@>k zkikf!@AYc@&<5mH;rLn_!IQ_673ZL+Y#9WTlaF2ma$aDCi+01Is?+@N%NW_wYL~YO z-^kvc#eDevJ+3FUDWm;sB{;bfCdN+*oD)sxhc;-ce8?bl7q2eh#=^E92i%4yvgcyx zu=ZN?t+fSNP{*<jVV_JE!Z3rAFC=R|cH_JB%z?PpFN_(@m&p#E-%s<z5Y2r_z7PLu zfVt*K8}@kZf?r33a$V!X;t0va`?9*<S(@9~5&->(7%zhkfwe-1p%+0!0!xYKZ6<)M zlW2L9Z>ZVBEi+X;DgGtRYve2At16^+IZepU&vI>8yyenGZ!}KzUqCExOQWiC4(|kx z@5o0f_iZjQSvOU}Xev(JJZyFAKb?NEhrImMVC;Es8dAQ*=RLK;@KmtVyW(B&ugFJn zRK?)o@o43Fg@K6*v;JfiW&49^25g^9Ghq9}X$GIJqQ4!avi-ej2EX$IKNVnMW~Jlg z_!QgA_W3x3f8SF7+ba6^%O=@A8JxiUzpEzyXcgtP31C22zonKXiwzHe1uHQqGCZ25 zv$O&S&)5o%fd~-&<>i&CIF>AWG4TBMcCj8ZA<?yRwmZ^~VMR%*t?i!5@D*dcBatkW z#O!2$r~g-^Et=<kbq4RoMlPeiU84KXNO_|wEHk_2@7t&t@gSs#1@JXv>fDECZocoz zjuX5Cqrd~hlL+ux7M+_04$j)ZoRMCqZ2%$KHwhMH!i!)ex8MpItQrNcVX@!b{5Hf6 zNz3N)H){9lPPG)Ilgf)u-=Hr(fO4K0*iX9vy#v)o;$!X+0_`H-n;$(NEhqBgbrF25 zfUso|^zpS31GF>-C<%U~Z2e;VfOOxu@4G<lXdEJhi1Nw9YD8H8BJ*NBhfH-dmhYfZ zSKk;RpSB4MUfN5NeP9RIlawb$)W(P1BO5YQu3x3Xw9rdw<N}QV;i&f=xS7Yb_x5;} z6&M)1*F6@a{UOi&>+}ect4#OD2X(M{ggZ*|V!vYqLlh;0NGKE5R4Pr-`aGS^I}nt@ zxXx$apg#a#vwZ@-X8S|%^{3yU-*)6|e+zv5AFuv*V#FW*le2$Hs{ZRu{VA#X|Je_7 znEA;@4~E)MIl*uUz%)>V<2jZapitWzRZgIbj>QzdUuM}Di;V)UexYAmUS4+dW*(oa zNPu7Twml)Ox)k0%Hg`C2gJzHF+hU0pT7=(ya!lIf$m71vbYy$v;kWlDZzEkPGr85> zHpFu5vQQFyC2{nwGWI*XYg?zt1QpvWr9#)|sZjhmVXe~b+47KVIHx5N2mcx|+lt@r zja6*<bTVGefW)DLuD#^kX^A!O+y;!x^{x!9!2j5GBB|w6MFhWGq3_c=O=NTQJ^eXs zcG14nkkU!5+3|r$Un^#U?$o8SGqlrMeTh^^5n)`>B@{T?BM&<`j)Ts+sJ8KZ@}L%- zyTWgLBQARG7#3SJp)<wNnrpk!&<>)wUc`xx$>K~qP`U1|vI*)Wio#W*85@FclBoR4 zwQ@8iPqft>?OC59JOUZA0^>Z1cL`;~!oEYF6bdbP9w~HX(-}98(YZPsae}J`HZP;T zNrb*qtFNf4CgyhyJNQQ~Eh@-OL;G~S=J^gDh>A)Vd8CB{=|KV1Qf&{Ss_>laqeGuo zCtJpf@gbBie9@L#RuD&DD4-T6t(aaGhu91^u$CK~C{ciKjFMkw{WK>Iwu$W0lOtyO z*5y^zI;rgm7wb98DKknI?reb|d$PTVpvv~F$vR@tU5p8mMnuDV02-E9wj^qxa53lu zN7n(V{pr`U>Tho;OCuEoN4Ihhh`?z}-E1sJ%Z5|ymz9=veYv!(9nj2#skY)qoxJIe zQV{H(K!goKxAxlW5XIe5Y3SnX*3>P_%g!XK`@}^%gNZ`A=7EK_zRsQg@DGSDjON`S z0&N04=gb)7%B6uR%`c_%1?zRD*ENz@-#8}5r$8f3jN??e1SJEK$JLv6G%e(?vo8oQ z-a^YA6%KMxuHm^e$mBAbm>zQp63WP^wXOvKVcLO4G>FV<%@8|8ZZ0MPYdbewJpPu= zQwfSJ!2+ux_+-^xA!*~tzW-j_<dv*JD?H&4qcDL6_tMO4q>wrhai%znleKvq-f{F; zA5sUHLqX_lY-fG$8wbwf2no>-j238(<1u<=FTY0V!~5zxRv?1lF<?-tf!UMz6)Zxy zF^1Hc@0SSp;;#q!mn!sOiHH%?THa9idTOX_yhFAVz%Wu+TQdrnpZOPe-gql8->J)W z>wKkc%x5HKs$qFY0v_5LfE_Ej(x&B`Shsf9PQN!#c_H9~F;0T=+XWaQ)$BZH(&2d* zj~2Y6(9vZhpa7)n$g88tg<nK>Oy?=zWSYFe7^2z6p^L%coka#>xM&X!9`Bj;HlXU^ zSbfLf`oieQ3<k##5`g4sTSxoLbqz8@ht0qUD>=?0_L<@g`)kqFvvbfTKJ?etfq;)g z@Z8G^^uPvf-A)pq(=@HkZo-{m{IiRps^;des-2rh+?9_}N}k4xj|#zEtM@id2Bg+! z?j9a&iv2R{j%FU)xmbXfXrhoMN#VP+Z~L-1qg?34-?FGkfpv_*Nz5~zv<#5d$FWB2 z1><GDtd9o2uHZhGb&hOF`<+<O;dDK}T~T!qji3bGLo=rxW{rVu28&w|1Y~PJaV#KJ zbG3){Z>X~NoAL|5RWvL<Fu8WrEY}oVHHbj91AcYKw{pgS&`1{8A_VfwTt2kvh;Un@ z>S_4eR^ns$q4Q;uoY7Ym#&dq5A|}W5c2q>Z+RTAp<foSO$yTpDJg#Q2^)!fZL2+j! z0ZjPLKol~)EAG0^EIU}`@WR(wPeoKPYXM-7nfd|*%v~UEut4t(>PVuLjY->;MtfgP z4IODz)7USp&&L`SJ4!EPft&ANkuHn1(dZ#G)8Ft0n;ZiiDHr2G>d1AJ|JrJ=C-}X6 zVsZaRXUo5_IQCB<(`<hTnf}b;*nc}SX8&7|Y3AP%l%EUy+f(b`A(WpAu&}Yvv3z#h z&-OW_`v3B12=-6z{@IvV|2$PH_gWV)Aaov5x1@<e4`KwEiNR4@!Fx<vHJ6JDRfv;_ z3e1Zyf4sU|!mypj8)j&V1i~<1PIO?tzM4Bb$moL`@E5T-D$BevUSURsA}7q52*z?$ zoYS+f{;1VBZ#9Fq-dNpVE8wuVd5#&>zt|>_)Ee-yq_Td<LS~0}E6unbW`C;Ku&+;~ z@BQU#m<!WI(R&7km?!5Q7r{6ErguLp7CI$_#Dy3AMv*T`@H+c!3b5H*-ePmrbzoeP zkBjo1(B4*A5(Fol-1<gEV7>cSU`*(AYDaZ4h8Kjp$kiM~wnGSOkC}z*nxj=b?OQdI zu`pzhvo6W<K7eKV@qTaaIC+P6e|3<!Lcn5-%vVn#Br0(1^yDwWZCC&mwP=KrF+Skx zr}vk>VC8r{1>Rt~^!};G!9QCZm=2_;LpGFScIq{+77C4MsY_4>0#_m`5M{SO+`kAa z-w{|K^9n3BILAuqFVwy=K@qQ->V&J`Yq?npFuHL^67oD4xH^(+!fC2RNjrGyz)V0Y z0i3ZWwpxmWgoRc;3!q~es&UVlz%GqDgbS3(?2yzw9tRG*DBjl=W8fv#NxwJ5q!95A z)lR8qs+JiNQ)%TcbXDYSPr0iTY!=}*rAwZ|x=oc-wsitbnipia0Bi3A757UimG4ur z8Pwi?KRv8kZ1EFc{pz0}Y&{fbFG-YB)nt>-W+X6bDnx<2n7w+TKbW}K@+@{z0y*d$ zi9C#$sK{Tt3TTLLk5pLc`yN%j^ral#4xT43c{-lgGW$j;(<BPW;V&24)fa!F%S$zY zejZFDwf7^1@igIAuJ4{v4k7()b@_ukG4@aH#MuAzPK^Ecx^ed3E|l2+)}7dYy!zkS zLH^<Qnd6f(>;H$z_Gf+LF)M$4pKqz{f#F7XmL|cWITcUv+$Sq5l_C1#p&*FLN*nIF z7n!4@q;OQrADG65pC&R6(`xzm14_`b+yX%;5A#y0d69$#G2)jZIG}~lgtfa~xVU1x zq?b&UV@8h@p=N2=`_Qhkqq+}uI>HW-(HMplECdO0P7)Z5>QS5nE>)<JEI@O+&x6XM zw>(t^8ZxM*k7#~SCFle@Tr=Uk8X^@JU=CC^^;tr@S^_xjyP)&#=6`Sm2TZvM6r{TG z6#y17e&bKz3N0wzJ)yKsZx)@YMQWO;jSFObwlv*u5=z5msk{QXhmM8Xl1=gLb_sOx zoveojT-yVqMCJZ!aYy&f4q-5`?Y_5gvqw{vfDC^k*P1~GHz~r$U*4E|zNRh;_8Ftr z!x{9XCQvpC>1s7l=0!*WpDOQrR2HC*exXkYIm8{qDE17%OR*xw&^J+oB}zN0$Zpys z#k75yME-*{v#=jeTI|sCFx-W+52@A7OXaj`$STw)(0-JrEZy+<vjmW4N7jbKBhqDa zb7^7WeG-a^-$^U=`bk9P89N>Mt90g<)F@~rtCqq~t@j;8LKw!K9UTYfPnt;y)JA@C z0#AV!*7^6Xbna|vVvJY*v<>9<DD5(5Z`g8TYynqKNvg7lNGg+p>-3f1)KjV&l+ez< z;Qbzn1WGrFl*K1MHEYe-o(Y=ZkVD?&-cA1CmUE~hg&>>GfK-!c_ejFvNFSMJL*)i( zGPn5LG>QM%Ak4?lr&qI0C#G(&gEw}cI*kgQ3uJ~Q_tE=hgKH4471uGQ8!oZBOqJJQ z&0Dv0?KtgW1vtRqwwg<AlGNADWfL&dVP)`Q-R%M^K}mbA@YY6aE#~~EPg`iOpgLf$ zIAqvajB8K2)SD;rLCDn`<m_dx?p{j3ObsZDy95wlXY5=XGqWA;o-D0dED4inrvKrV z1K$%cctxSiXDh}Z)E{zuQh&()r}c-QtQZ`>)gQ9|t@^|Nc=i8@72^|(Bm4i}asLU% zQANUGMF6JjmfG_q9rMgJ3f5UaRnjE=%hcKo+-{$csT(ZYzR-uq<LbRZ6#hWsL%ypO ziB~+IS<+O(WWR(@uAKQxm4!t@kjQ%1@oZiRtmbe-R<A(D51o65Mcc9h@DjRt7jU`* zgXdtL8{lK_9M5^0iQMR8j;iYNSmAP^tG<1o(vJyyTJOT-^HV_nDQC^^i<&iRFr0^d z9NXuBF=h4SWqZed<-Nk0rVu)yQERn3q1&|!a=~%&B$nQhJF-vP`u$C=IOqirP;$Vd zt5B1w`h|qnpwYeiN*su5&3?oz(!R)38!eeaHL_B39<9-|QXmvxF#u;2iBJfw2tfKw zGfj3n<Ct@1$~pha$jiX;Oj$v7M`=kVA_GtN-tb9DzF-^`>&mKqm}hF}VfOSE#F)M` zEPR&(hk+GG_yud?iv+RwBOnd^I)!|YgNl8?zze&2874_A#?cT1`Nq^E#MDhT4lCP? zfh(TPWn|)ExV2AD^p<0;zCO6MJRbz%vsepXC`gz9?$H$*SfP{3*QX<CY0C%!%m-0M zJkHv7Azj<`9?O4Buw5!+7TLg**r*3|RbV!mxbr2Ys1VTj3rQ3g-XThHja`B{o%N|2 zS5TeVKW0a;PZTv`DL2+7ux_O(ma^Y5&tcN-T!nI?BuMC_QQnJlP%r8L6~sa9tGeU= z7}Z%CwV!EENB;GN^O*IZP$eY+>*Rgl2_)t*K5*O-hkT@#FG{3b3bfTG<6*knrS6@Z z<h2zSkh+8C*EjP*)A@9Ri-A4k9}L{XENZ$y_=|RY0W;-dcrc{!0)F9A2VC%lCN$Ad z^xIF(OB}@vj;cF$sAZ3!4}&lY<8sCB3e8hg+2q%htBA?VhTJ>)6_(%jx#@FyQ`X6p zOK>1v-miq-`+TUfO}OTOkv8u-^7a}{wwtr)6DIMEdH^XuStdCCfa%8Z3Db?^Pnm9? zEfc>n-8lXh)9pWA{eNPa_ynTH&i3b*c$F$rHviZtJgV%8s9QmxtO>+F)XY589IiR5 zK#*D^QR)D#;H-Q+-ecb~f_#y4rcd^}?qIhuw!HPSWA=W)1FNzK5n6*sqc=ZU^1JHn z4M1P<+m!^1n6KXE>2eAwNx*W}V5QlWj9M+gg8L~Sbq$x3ZT+q9K4kXW{Z;AVEk=a& zQwM23%xMfb>sJYm^=*X)xqwI&^B-P6_BFQI{MG8n(95vu)&^eAAyjxZntjmt!MjYj z;j=L!H8&r;5E0H}{J#!rClEZOe;wr`&kIgM)Ke5%19wJfYh{wh?2sct)FeF>Dr_L& z3c?YGUu=aBaTswa?5VYfq(btGnRLxCh3$$A%`<m{Xe5hC_o+88MIrlwTgLcpK2{ny zQaL7RH0!~gL;o1;8h7Dke!a!${IBPvVEpQ?{!=|(a5>NcQw|Iu&96_pPb*m&mCcJr zJP|6LHXrI|1VHA!D0qL-G|L4Z{YeW^2rxoOfDxPungD7+y6eW*yNK)j6H)z65qVmR zA(PUKn&|ps<)Uv2fek8J>b4X*HBYGX$!b9kV3nvdgb6~a#WJ``hFMT?OliK-yigl; ztOUhY)Uv9;<pbvk<!eZp7GIxY^qd`mfT9tl{J~-(jgr&Z&UjDEAZrXXyu6m-VAj^; zVR+b$eGfifLpY>xbs{QEGBozLYu9RwITsZQ4lXN;q%#2P-_9h7l5=WbjRZDCXCFZ6 zDWMEAu(w-FTU<6^S3;NA;b*6`$;$>Ye%hs>0pz1SE#{4evoXfg-kX~BLnC5cAA2R8 z+B${Sh2%OaGlsn1r077G*ZW@n3>HtnZ(rBkEA)O&y=CtDG4VZtEvs3#!vhpoe$BIp z5X88P%9=SO6{`Yr88d7d*$M9U?&n&1r(6ILP00l89oIOO5g3qRB(`R=U6M{hZT?Sl zv7{fgCR!yU_f*MWPqdO!;CK7l$1Ei|j~T$MON`WBcTL#8zvn*nJ%ETSzvqA;dwGJ> zN!obRSbqR5e?Sj@wz&KO|BK@j{ujre^1nV?Tz=z!ar`a**MGeF|G?tH`6=y+<<C*l z$`Ua<BLAom5TJ<1hU973%$^WQ|87hy+!~b0=D|=5Xz?y!T`ypK&|QLOW!dw!l_bTv z^~FKyUM1#XDk5Zf%9<g5CfaKglXijlxZRni-xTF3``lHKLH&DIX!Gcgl<X(Q3{kn_ zn!Q)l@8Sii+beH|1Oz5vK;z<sRg$`tC^UgLL7+R}7B^1Ur>1=AVp9)1{2x<1ooWXW zz#WRL{#vTWoLoOANS{Vee&AmO@anA#>+7PAG((fn+-s4Hpn)^PTp-$l!$fccd<bko z4;B1MxX#G6Yev70YL*~bZVl<UU-}}y;x4M-!aUV@=yw`pEN%Er_U5ZdPS7ba7PidQ z&Gl~2^K?1-YV_T^U@&dI6Rbqt@EeO2!8!XcjL?hny)q{oIU!v!Scoa}&>C%zJ4^%` z53u!x;n!Ba$pM%wy;AY-bl26&=*!$`9&cwY#F#sXyf_TFmkhcGc1Q7UQ^D{%qmtso z=u-sUZ)|C;dGy)><k5+~xL}pCxS{+4Z|`n9;@9I6hlBN6^tp^+tQP~$7+7q*JgH%3 zNkil0o@G#)d7gT-KQ#-MGb3LW5GOdBV1V%CbIS8&_Xi+BAF6_51vI6NYsz75VK4nS z3@4IZ@Br^d#tJoSb5$V_!B)YRE$8RioJU^FnWw~!6v};7@WBp+i>>_~`a}u*8ueS1 zg<0*0u5lS<w{i!Lw)Y2^IE4sRhH0eiy?;{12L_MH&nw7^5axipz^hr?8qGJ5g(2)F zI)E#MlCLB#>ujZs`5eKF<Q;P9r;t-7VvJOASfXYF%nM-hPb}D1%Y0wf^+fQ=O2S?! z-K|nqH&H56`>FWGGdDV!%DCbEbdv<ifwT5)z-t1pPTpji6Bu2&ZgpP(sSOn0H+vX} zV_Z%A1eR@`ldv%Gc;2*hkl<zzsP$n_^C*xxir2{2(S2i3QCXzjM)jK{n$@|G5cUN2 zS7<IB_HsO|=UlqFcmt8_n$iZUx`r{oVoGY=@7J?)4o0cGxo*~9Y3B47Q)kR16joih zW`dd-;H<f3T8~7nzu4PZekd_#N8s}H7$*W2%_Zfz7IOlHJG`Gy#`BSb0z&e6_L?xa zH9hwr4C!|T$oE9a-@>&+NqYF_CiIDdH{|G=OVg4u7MC3-$yJx<(KH4GX5z(pDaqrm znkiMmj;8q7h(^H|EZmO(DT$8$kPKDKoLyW*kU3jq1L+FlkhrWw3T}elO--D76Wna6 z^?MYOuj^2JBe8M3CmDDPpI-_BF;Hf#V$@G|)FNgQw1A~5>5x%@_i<X<k!U+_oi7*m zw_92GQaE$J7?i*g`aM!jKMWe=k~OLz<V>zkwYZ`|&eM5D@pQq$0}TQp$`GWYr1QM+ zSnY=+x{p&589X_acKw%-Qik9+$NsJR{f-j^a*^pLwyYnsl_}zLvS~6Nx(2|!%4Btn z?;IqhOzpIOX|496E&@GE2hE@g91H>qZ%$=lcXibAkw%@xD`sW~#%G5q+FgR^PW;_C zBJ?(>tE<<b6oZf6Cqvj=$z_9#{7;UF(f;`-xaLuIeKP$5^2z1z*sB=IVLNx&MtxnD z^dGd($XH1;&1U>wMOP>Ltt=6bd59DRBM*jqvpUi!K|c)l2p+bLuCLf_+l=TwaSqNu zfLn2X0=MG)Q@GV9&cXQ`+=}yW!L68opX>0c04oC<9V-LF@0bJT-{(4fD!{_VNyp5| z_WM)?=HKT!d@8`q%0|cVkI(OS^ZP$K0RP9pkDQ;;u^2f1n2yz{tP!y)g5tfYv&~Zp zQmafnA<9$~)UYlfzJ#(66jX?^j8$DiEg=+dkP-iD!y&=OE*Y)OD~*%O;b3iw{l(7R z>6T4eL>v^^ApfT$pdp5#$Z)~H5y6ZYQ#u-cr{@86^{JkjgX%#iKbyG6Ef!z-MqeAM zGNhvxZ=X6x*O#;Ix6P97$Q=gJ2@>3>B)A4P<eB#npw@P9RlEyZH-dPy4vUUUzc;`6 zwY*;ViIV9+0iOKrv8I}~=Q6h!iYwoaN$R^5C~Vwuxf$4aBotfo#Iw{>s*P9DtGyeW zM_nA=k7y#SoS;NGQJt%^11ppmU+mLBCT#y2xI}6F_@93K${T?T7-*=NmuUP=ot0c6 zids(JMWv!8K*IAWWX1ZPGhQ%5Uv@cIk6Lc9d~k}gv)TvYS|LSb+KuKLJ-L=0Hd<2o zG|vUESQ+YJgql6u2tow%X)F?#WiKAsTwdFsl^a|-s<|};V#$~{+Cl4;oh&Flw#`;v zjHJzn7!^CKXpr4z6Ror1=LzvBL%hK9jI$voZ|fR@AVPKNUilm&C5kW>ty`3E9g700 zkY0kF1W5uEAW3s+b9d=nF9m%376qZlXj2EyM8enu8uC6k$&MkTf$7eV@AS-e1wzWm zl9+UsyfjqZv%xJb+I#S{Q-EDkYed1tQnMQi!Ubp+Xqt1#cHhJI2NExhSpbgEqS3I< zhN-bgRkLZ7o4Jo)>z9~uh8f<*`j`#q3uwqFWnVMH6x<x`6n=3(8%4P4{ThACHbco} zBJTn5)BZ{t(p1$BsA_7#(9H{I6hZ0bbTTkl?$yfjN(BqkLafy%%C!D8XTQ7jb<Rx+ zJ}Meb;-Gb-ii=FIPvD`RUI7>flThQDT${QkO3wf;n0O2m*4NeHH9O3DSRrP;WpJ4( zEz*wu1%jT*#$j535Z(`myu~6IG0@mCN2utqFl>kqsI&~dgC1AoT)W^Fl2Z%SRm3!y zNCssmS|Nb`D`8!w7YIX-NNHgGBYL%srdnOF@cK@KAIV@;iJ>#>3^j={xQm9H6dj9x zr!I)8`nRiXcN6ZR;I4y$s&DWs+1>Wb1%RX?C8PR{3ROYd&C5yC&bf$!6Q;^AuT(xO zDK8Kp+#lL<Yk{H?2R~%phwo%Ay^Z~Q&=OfINxwJKKFSadqvChxEuQi^vEsh91~)$n z)h_$EqH{nlvUAV_tJ)J99G4Z1)X)nkn!0&qz9++vL{P+`4Q8^fEqx&#eFc<>i;i-! z5w16l`*t2A$T{Y3ng5g$-g6}9omGSV9PIm}A2X3?#Ixt;M!=8zZGIzoCXh84rfQ6* zIitWd9E1Y|?YGUql=$=_?77_G$0PfIAmu>M;k=J(*B7Cm-UX@gAdq`_-Cc2k=v9vn z^y0~&>PBD}lKwOjt*mtzM%C6ODn7v2tG6bf`OF{icsM`d@o@erkLNR=`HjcJ`L}pH z%)bxc`CNd3gN~7f^|JzL&VNJ0`M<i#b25BJ!(n9lV;at18=n8wa{a1O%3g;o4+7bh zX=WndZax3S;V12}A7UAVLFiqmA`bba&!u;JE*{>>v14(kZv?3G<0|>n_>I1I!C0ES zURv?BWovd>3q+%Myjt=J!-5){#=>RCe(`kx$z*3%H4jnJBjUheo>@@${chjtW5Ag* zZkBb{2snRkqnZo1vEc>-)oLo5zVyg<_+fY<rGmiHqu?mZOJ^yW;4s#}51ny-<DWFL zTytEsnCJ65>2zcuc~}r5W9S<AL1ymH3joV(b!9lW8#Rde1g&-@XV)hBvE96;{dHa~ zeZj|#Yo7R&RvFXq4RoE@-JzY6D{$Hy+>PK_5ZXOgz)2yLdM?r^XJ2i&!Yh@_7L{=( zI6XQxUxrgJ_WXUpl(q{xH<UYfJ7Q)`r6b}K$}5AWI8<Lt8+9uO1*w6iA>FXPnLs>O zOGZS-oJ=wiN^2@D2;tW?wR8<6Jxj%Bq2Y)PxTPk#^&x3;o%hTK`MwH@pL7F2qtAy} zk4-L88s~}TX3oZcQyq(6V96u>NqJ{}Nxt$%v!_yfM^4jOv=0}z3J_8>*!M);N`#dQ zZRbV1vssMbi5!ySm@4s5wg}xIm)?FtkZ(^K6YC>njm4C0cziun=E5m@4Y#$W6>mJ1 zR5`MVZ4q>${z{NYO}#8TL%J(P3u7${ezRPc6zKqbP_=mDDhZ%lJbcw#M072?K_Q`u z@)%kQyVPX&HcG|YNU)tdBoX$^{nmk<CAZ;jvn<Tze#QBHY&Bx7*nd)nPbW)MZ+?fV zS4d@GjM}tBJg+Qh*ly{;z|u~ZJr$TXXRc3ucj>qk!407wYz;39V|e2o>>TY|BG%-> z!4IMo{9d9wajXEPb1XuT;%P5-R@C$CSvPJt71iWXZpS{Z2v7$yZ1OOLv=js<g?OaD z_RQh8#%Upo`hYv>q4<TEJBA{qNLf+qIY$iRijx>lp{u0T>1e{mXy;@4-PIZ1<v9!j zJF-S;)IHMLU~V~Usya%Q2*Xgr5(4RB7Q7dG9zWP6oNq(~(PQrWJb+nvP$uVE49Ugz zaC1O|iJW$FM+!s&S>FYk$eDuNCQUh{-j0u->vjXojhJ@x_9KJoC+DAnTGb7@hbT5z z<0{r!qA2O*vU8e&d-GGbF0zeY6~aiMZX15&B;vwUw@_%yuwvviyGok}P{8uQDa-P? z<sibqwm~Yg3X~hnU_xYXaik5RBsf%$`EZqxhD+320ZDf+r+>LE7_1jP0hn@*>7?eu z!3l?3`!J-dggN-CP*5*1Aw?R#NA-)SrZ0BPmNw+Hw#iu|8@M_<XYj)0;4UTNe7Oys zjSGswc}Vbkkj<LTdJQ7F;AV!#u6Os-waXd1;sE#T<`^RS$AZ~&CAP0aZzy8xl}`7s zUuIcon`N^%9!@Wz&E)Ncq<tMQ`jKPfDDX48&fg~iu3Qe{7VzDk@ylO}x?_QUJqwG! zgfqygAK2vCJ?<>-4{kEN-LHJ+3jg`t**_Pze|3dFygTD$_^p<Qli|0!GtR$vclP^4 zwNC~9LB?hNbYMK^pO82Hy+!<~DSXD^_y^$aPm5nw{&(>!gtK3)z}JX9I(!KAxk{@Z z-a7<p;qYSc^n8*&lrsC#5s|H58_&kcY)J@WE93Sq&Kpzv^y3M)rv#bLW6(+{Kax+= zF6leIR@kDM?SoQ<8;{THMBl8nUKVzktG@|wn{XsLX>YGqLp@&Z+Z-->i_>%{S{yW` zP6YJa7El<m`Lu~`v2=372aJpgrnGh`jHjsr%KM=Lr$^H@gZfqq@X>fGp@M}haVC1w zhge&LP3FcKA##@l5`KOCzM8GxD<!21+_g3R;C2{xqsOAWA;VMTBt$l#ojOFAVXG{( zyB3t+AQ1bI<lrtHk`Mfb!-i=~r%sUJ0no1RTZIjA@2jNPkSWb+EiETnV6qH2-bElo zsgqEmnX1_kbUfxx+~Wn^<>7)yLek=Jd`rPTfweh;xfb@mRlMj3gIvNwocJBN?VBjz ztTx^4kFm?BeR=gC-&a`m@zR(wUTaI7#C7&5h2a7(zCuUAY0RYe<tnHOZVm)TvuTTb zY-I&T)=7nQIS~8pKp%zC{~%e9q`agWhbw1C8#j)pcB5PjK>3Ql5%B6a=<Xy^qdTbH zw5*!sSMABn=D>(S(b_p~AKhcI^`sN(mMdj)iB(u1p1DJ8s6h*I!!R>`U<z5q%K4>e zMXe6=gktKr!F-8O6N}1tr8uF&3XBjxFH-md>)C%OS#LulDK=@n)(weYL$}O<Jf4j% zy!+q|*!4=2Ae%T&NsTyA9CR}3s4f0g4z(m+Q2>9Q){fY&vWJ#U6P+&8n_jlbughI8 z2vuLts5nsvbr5ekF`i16NjfJ2(BlNQDPc=MF0fzxCwr4#NrsQRGqr{Ex5+^cJ%{62 zG^K^4FJHe|=5a!zfg|nkS-@g{dllaSJ6wmiJgsiY$w23+!({(@>_q*wkoG38n)SSZ zpb~qPFDET>l#ga4M3ExXf_FzpDfucBEB)MfZtMqd-b<4L9z3i(o1!+#^ELV`QQhoL zyaMO0UTrnUQLVEzJj?|L_&P()`G)5(O>5Cd4)K8o$k#!_L%MY62PHACYQvbPvQ%Q( zraCJD*P1JCY|sN|dKTvv2ufAv14FrlG_miQ7TH$G{6#nQ$`91<W<(9(W-Ve6psn>} zCxd7}5~fR7TyiXw1&#<D!A>=z=xieP>Ch=k@FBngnB<@{SQ1(D6@K<37~JMw(pH<b z9rhRe@s7wR3gcAf3T%znBfO`hVr?ARd3|xDb>NIbtcNzW#iXYdfaRGoG|ahY>I2uc zh7PuzE)-5pxvU1^w%dbT?~yw<xZCgEkWAT&-d`)+ndc{M=#Eaje1Cd{jPRPOgF5hy zz8+5$y1>NYUcqcN_dakZ;)sEXG272g@lU@TtEg}M6+<4NPVrS5I=s>sq$1to+r{Yl z-iQ68tpqnMUBwA^#dz=9Y!)qB%bu_Mj}nniju0_qztqeM!_kMuB;Z~xB{v>lStcYn z0vgNjf&wm;)9M6UP#3U-7BC_!8|lW)KQmK0l|?f<%Jz4$kzq5luH~<}JPfuaXQz+a zO)0G<x#?U>(_ya2HQq?VhonhAwGTNKG&4Fbou|8-4&R-rLqbmmTQ=jnbHot!xh8eJ z{JI~e=LKMg?Y3jzr0GG50l=2);APgR=bzao*GunGoLH>8<gj=P)ZXyUH*v^vEt|Q4 zk2l@Q)})pB0Ig!DO#9ukI2r!)0<nKCz5l0WaWed2f!L>(^{?k$|9pzSVOf7D@Ndgc ze;dyAxd00XE8Snarca*Ww_z`z3;cVq=s!Qe|LF==PKM7A3QX*Oj8JG)mQ&beL-6j_ ziJM#tU~*t=(&v=Mv<?=k`ZC@NlcH@hcD*$KWyk0|=}bV`|Bvky6Cf6c_6t#E;rjeV zbA{GBlXvs2*dw>#(S5(D%TWD409KZL-sDVqCH)j9k+Tk{?(5pQ!8}7OAS<QS>w2Z} zP#S7Xql~L<9*iGWhYAcNyc^RP%EvD5>K=k9uxg8o*5AeGB-;Ga_ef?=Lu$vMegHS> zus4mJP^%S@9*CkE5fAVjpZK*MpQx(oi5Z&Lbdx1TSi^_lo35HFrJUR4;-szEcq5?6 z4BE5}^<Z8XB~4;+zI&)~n`hTVT!jfhe?hL7fpt6;l{&fs)DVflils3$N#B;w*fGqt zt~aLR36r$<>T1BVfCtNF>@QJyOHV--NREIqu@&JC`y$t$A)usuw8EC3nK$p>yJp`( z#YyS6Tgjchw+CV+?YEai9(VRFhIrWmb{4prALnklW*lcpS{H(%ZU97Ny_T5kj>w0> z^<=b{vNp>zZ~HDa_~!;73Q8<(Uhl<p>_X`N1zXLqiR0ZcBy9KP&nuO>T)V?~Fxt0H zlST23b(`^t61d|Oq(p=?vOypHHvpy(l&dDyRV9N6E^4!CQv-#FH`=R4w-4vQlJ8(I z=i$L32-$#*NRCffD?<o5h)ta_G0U%A><s-TXVe1bO*>s11_B62oUl`_AbTi~ZU$zm zfL*7c;3)onF*PSv;WAsBl=)8+>>uKmKg`oMXCKy2w9%&33Wch3uGfDquUx;Av;n2S zYw&h%rc+;QI0y?l*mL2%ubl^x$-WjC5L#Cl%0Vx0b^4XojdS8@5Rbb7(F@G0jnSwB z2ByWH6=#w=Woe-;HXYqSCquV*`T}tr5;<&J(+pNxk&=u$xLqfP*2-x@#mYvE*;l$J zR@;%VMlG>DOGg+@$d`SOHjYkG*c@%Vt&44seVKd_xR5OC2=0<WBnh^sY}@lftS!|Q zHYm}xGK{eU5#-pRlWQhT!l{X~_KSKkAA+hj+U^()m(VNF1q57V%{=>>4mmsi;-``? zCf>C)L`oem370TPG*t`<S67!SjTz$QWSrng+`iwL8TA0qAJfs4ZX+Iz2bKw@Z_{d7 zv!8$kh&Zeiap*#ntY)-IQx=qx2e9oaav3=<rL0_cjs&;&>X1fnSVvt5QuIZxdo6Zl z?(x-}r+Fk|8eWSEC8aTwBnfo~aT0j`00Ax;I!%sK4Jg4lqNXDj60Px~PS3GE%wX;8 zZWm<Bkdv8^qY9$qjQ~r7y}fkID%h-?yk1JPc4NpPtH|uaGz7JIUVekNf-*DGqAk~i zqk4(yK#jB0g8f&0Yoj%iH%LZEj8-TgM(sxOuZ$6~=iTV~UxmRfY;z7d{;jW-qCxg5 z*WV<>X<azoCGhdQ%*Vdvpcg#gy%4#2;2RaQ13Baw$BfVI?GR$f7!cBL%Q&u6Sv)l! zkJxlu5+J9^d*eS7eJkr3vQ(4AzEM)9;GubnrS#W3Y1*a?ZR2fo#tuX7@OpnS(Wz>_ zvw0W)H55ZB(~|yvG_2U2=LH=O{#tmI+O70Nii_LkA{*L`0|+$&*e#D$ta3CzX!4|Z z_R+!_U`P9~)1RyfJ*R4NemHf%6X2C<$CJN(b~HU|6R11(Yo&5`2|8fOu~gc%_!8SV ziukGvJ8JVCy2XQz<ujZ7&w&X4Tx<W;CjStK@R?2i#xwZmQ~bG2{x(qT-w6C$oBZeF z|Bss#<NuGhe~z!L-MU55*iI_8ZB}elY^P$|wr$(CZ9A#hwkuBE_ucC|=ia?4-&ysZ zz4!ey^Ow=)Gv^%R>8<yt_0~VJKww~C;`sBv#x<+IQajH_l@dSS3fb^ONAVxF0L5}X zC_xJN4%>t*P!a{yc_`vBiUz$8-Of`}@@VM{5gq4t#zseWPP86)IGJ7znZ5^@QB)WF z%y_CvrXX2oFa<}LO;iW?5?zo>=#eytw-Vuo?z?r^kvJL&IZBhqtS@`_`CsCIi0-)x z$FU<U*J=u2663;0Nvy<bL$Exa2sM<6zU@;eQqSuN6(m8}rYAOhQHR>H|L|a<J7cRL z4id^6JrhnUPK%8fZBb$Y<2)ECmKGP3$R<js_*Rp)IX@RQlywlA!Sl_AoSv{{7qASh z$y{vy5nLZ=!jT(pTrc#_`86)e^hvuV5hh_D8`B*1b?sgfor`Tc#YQqX_*Imr<6x3t z6~n#20N%jsV3H7%qF(hJ^h`%VHJh*wY^M%fLR91^=t~WxdPAa4&a0#;&SRP9`9YvN z*WI<>yIBY8(SEQYC4w7DCECE~wc-if{2usM>xR3lDOa{f`WN59>tJ-t7lze)J%gV@ zGpz=pH!}FHJ!euq!(FTO9{ofg{8c)hQKa2+vFuSHs1!V!W4{PTV?NZ>1~{1JU(2M^ zgUCI=plEb#1`uYgpBS$}VV~fhnX>F2a+A8F&-rvs80gHOR@<V=B|-~B4^gmnjvl;@ zhquI-?+0jDDbnJi_ZwD?O>oOF=(8`1J;b`Bxnu^Op@1yYWP$BV9Zm7^bA5cWIPQ;u zKm{8S#VrF?ELZvXur@>?j%Wm0I0n+UnD%Jmu|Z{J{LZ(b0Ft`{!zGQ|ej#ce3n`(c zkRZ{>Uc&{{Y}I)vm^qEVQva~iFu{Mo#!M6rp7-f+)a;M%dbEI%)zX6#yJ=4YpbQ@p zBXSJ8Q;`ATEa+1|xgNvZWR{#f>~OBs7O$#z0?R>tS+D!G@nj;+2QQTM&Ut#<Lo9fG z8b>ViwCb?PNG2Uu*+{NY^x`)0Q&Mhtu;pqe&Mwp-&&o#Yd?jw*Zwwg2hSAVj4G`YG zNN#{EQ?<2?Xb9-2rywp5g<NGqQeu-r?pZrFPw_fXeQ{j^l)qu6Y>G`Xz05#PIF_{& z13X|n5i?T^z(P?;&9+#y_G{A(oII-Hs0j74j!CU9v|+i!$S{Sp?JPIE*v9!!1C{)z zi9>R9gRh`hVn=)w1X<gwx1lggMmj<>64pcT%Nu&D^Y=My@mZy7I_PFH_b%+c{(bFY zhKy%l_e(o`cGKePG%rU@;@8QpvFgVqj7o(@l&m%JMEV|Nm9@wYBjg;@*xK}rT|0IO zgsflhez7ujc=LZ-dL$@-z4Ri;lEf5w$@Uqrva0ED3-RvRj<63Jc@uao=9OtLWp53w z(bi3(1j&wc0|U#<NxwEJGz0Q}5;_A7d->+TZ|)E|Et(}9A|&H|zxTLQ^R`suUYf=1 zMi4~x{l0aM;rp$^9k^5Dk0s8x?p<ZDmU$BTk*^2|kH|gfQYNi_<G-ZfcfEJKPge?@ zvHh#m?|<eZg7Acc@fbvt&d&boQdpt>BtS6yXRn8U?Q{PYAQ=A8>*3P?@mmtY@Xx#+ zej6D1-vIo#0phoTk)H!FF*DLKGckSA$oH?$|9?Khd}0s5@_%JPe>gC5mGAGyAMDb^ zoHDfO)mPy~T*_EM_<cR$($zA;?*U5W5a160&sUi%EKh>0_$ai~6`glKJ5z5`s%?wC z@g(4VFbG=ErnzF`Y~jY@3H7+*=E944+eY)iH>gkE!@6B{dlKl!?g;ech$A+xTl!#6 zKnT<bBNU*XFhaI*w4M9O23$hu-GrB|Zy>j$Ws+v98O+90rpQT!RY|#Z_zX_SDKYUu ze4|G|`|xufc=GLa5Z)}ppPZwwd;Pd8`P;e#UhY8W##f-qTvt02qs*ZEDHlUZaDTYI zWw`LRVRy|Ct`LVfqp`bM-qv6!xD`W`8+rwh)Oq|&m^}qtGItXwtMr-R9y6(3jcYD# zXClo!3lL+wjPiNB1Yb$P2{_W?`y!nz?zK6~vm}WXV+ll|>_EaYR-2kb;aJ6|&bSR# z)>W?N$b6IW_5L{0NwIVGXP*Xbu9b|cifC|S5#5*4qVifXGPmoB!Jr8WTXIV(B?EMD z#LUxPs`@Y5Su_^Mg!-;+n1L)m?^hf)rij)j@~dH(ppM)I%|56TCIGtVk2Fr2`~1K3 z#&f>kp*eFiOw@Vbr^N-2cBE`t#UaWujE0rgn*ZvM9IE1S%8nN_#Y!ODFP-yf790-L zs2U`sFw^U#XepmgVBESplx^Zo^i|_*;wQI8HmgDzvnFQtIEx6P5y-sp+PWybdP~`i z5iY$M9r#gP^TC~Ri-!U#8IWVUi&fNUr>Q>wV~YOr4IIoHmiM!r;y-&@{Of-G_nqPo zJuN=nDSl&u4FAm2;$QFnzhB(S!T6b{1qa(7ds;-QY*??cB6vUQ?0|t%1J@EtEU1KY z6Ki}eAYZMtWk4~-MG1{!IqQ$#XUC}d<@v}zCV$xAjwrK#<Ko=$x^bh&!Qp-csz7kQ z{J3#q$MVJY`*3W`d{1%{mH+p)39AZAMl|K6UQw3o(nDySCuInOkZi10A8QZjY__|# zgV$1UfdGgiXaY-$_mlvS3f=d4RGuyDt!F6xPC@=T2{{ir@+TuMK|Mj9BH<~d>B}G2 zlT=UZ-FghWG?~pVPTz&VjmT{R>zqMPs~zpnXQKNV&QzPr{Uc58)NAFZ4;Vzl+U5<y z&#Gmq&>Qu9YdjIhZ%lug6b`2i^s}g}`XUF3{><z|zBwKeSPSliW^3qVzhBOf86Rh} zzn1t;Bj-*$_YCwFl4R(bj2w&7QGnYVX|~o;^~B4z2i3_BHtW46hg~9{TVZx7qP%pA z#OQQb62H{*bA0hR`0RiS>BqC5C1V<#l)6_dkFS)~_xFMR(ZS@iYB$Q(bbqxRX6$=< za0yeb?=-{yx@KEB(rYxfaoQM6>pMYYMQTj=b8YK~pdbw6B`zMG_TvL%Phw0l9l@<v z8YsE#LYz~i{!uIXTy$Dz`C~ilLEfss`06OF(+pMe3pSDSSxTu2z9drWlQ5#+Jef=9 zZXNu@OI-GrKO)FR>Aw%Sx9pUzHPgRH<IVVa5P=R03n2d5rP;u^${SX&16=X#i-Vdx zUR7{XtJHdIbJplz``R&Bd?72JuUsalRCcfRL+OS&TJtQ$eJ|I&(5CWk9A0w0T!IBV zg=WenNg~4BHgh9XaqcuWSlJS}GnQ;YznD@I*u4uvFWNSgtzRaVFQ}Q06O#6e42)-o zBqnDUse^CLScl(r>7}i>dVRYHNdQ(rslWOPg<goc0Nmrm<xO$<<lI*dAzpi8u5}`6 zCzkN>XCB3QywsETAb+5k1YoLB2;&N#wPI`AXu=<^c)2NGb8P537a_;`EfP@zM;naT z=11=)5phiuop>eD+3cP~Vn;C4)6)D%*5rJ)fiU>7%MG>7+yuK^SEnH<dtz5s087}} zWn!6{eu9VF?CB1RjQ_G<avG*h@vk0Xd%^6$KSzc<$?ySYkWD7Z0%LKD#!%YE^TZDN zu~9W27lA&ov)K<8B^dM-9a&^4ih3AQnxO}bMvj}*RE3LSjmdIpKUN<NzB$YGBNBf; z1zcg&Nn`&GP|=|RtL8n7fV_gr4q#JUhXJJEM!?P2v6A^I>oH}POjue03rE+G6*bJ< zW0u!XgKRDk4q~IC1Wd`{3H3#6yOeR|djR5P51hQ7G2a)`uSDhY?xggl4Vxhd>-h9k zoJn4GGzfMFoGe!eDBr6cut#o^AbaG|16lef<Hrw#dJH)f7{0{ngA?8tYZF_rIjozi zOMj%TuYaAl*p=Lp!6yHR<=yCy)(>ZQDn1zS{~;)J*qx#&<8=i}>lPZGI|6+Uk^O)c z+Yks%BRL(+I-xo%*il5OZv)Jf(>5!%44iMvc4g`uSrmtAMPbc0u~^a|B3pjj4auTz z#ONF106%lSJ_8)+!SK^6G2!cG9D{^qycLT3ul%rJU&rShr6VaBu5o$+M|An9Fs=y! z3M#Xyq8QAWk!yQCz*&LBV>uR>kM!I6BsB6cESyI3#lx*qE>B*74vyoRaY>Q-+ew^2 zO>N91V=cK{EE=U_0WR`V48vM$t)-&B_DYBTF`pGaRWOC}7ug$)I)a07kB9uU%jX$J zt&iN&EzF0QrS_y>^f6pI$BfG+CIO%W8dzm8{$+UP>E8nvs_WYJw~oH}8nfI#uV;52 zZ^ch992uBsm;%7LDXJi_>Uk$c*C3unvQ@DW)<ICH7d7_tW4%nGIBc8tUH;r%ZaY=w zYCu}vzn!jP3H5cC)Wd&&e%qt#zqJQBRB5N=-ezTn$&{#@w<TJ~7yt(u`U#|)2?fxY z@_oMqkjMSVO@X~H9*_VO`?$9rR5lPUp`-$5jUA#SM4$%}Es`;6HN&ppm*$;$pZ$&c zvF{N-A4MmOmuO!zPkEGW+t;5ke*IcYsQf+rjhbwVPC%{&ygAw|_tdAo%#&I)gCf%Y z%02T?Ah-tl;KAu?@%FyV9LBhKzE(ZJrV{N9tHoV!WYKQ0+#cseO|acAw~|L>%<^5K zz!EKqv?=fLQ3h;cs6}f-U#6_A@=q&GXIJo@Aw<Fm&kXtYcPWXSFyc+~%5x&X;6X6b zEBsD0>7wELFn$0+<l~5-Q$Wz+N;qQ(a4K7+j!!s<z*h~ZgIQ^t4qYAGTvNaAvUfa8 z^hZ2+JVW+XUEkn1KqQZ>&Yt&Bd9hzZQKMJPK0)t|IArx<gDsHX;||elt1m`gQor*7 z6NXTJD`|(ZTzGn3HK%*=acV0Xv<=P*z>BKzV!=HLNd&-6R9R%geb)vZ(*%iuWU74P zX74&uFggL{`(PF{aFX)arYO5eG0*NN+7oN@NeSC(@h88hexI{wAxzX9Asp2*WN}M$ ze~(||9EfvPWnlv%P6fmeV;$+G0tj62jKYGLeYJPP1vDgFb?10}EnBD9pgSWiB6Cl; zd=X<!L5O<!d2=AgCmKrw${Yrbv8=mqCnj2Z!uAW4XcG|W6H3JRpFL3iMHK#>68)hE z%4d}5HwTh`t>Vuq(QhM(KL=oBW1(eX{<ONr@VSY}pBm-;DZ~0qIKjm7$L&Ln|F>|0 zye$EUI_(>+4xBnOC{mB`j5Y{L;2toEJd(aViWp_n%>Cak+FG4`tCP8CmzNXg9nMBi z<L9S`{t}`Rt)}QN`73q>Zv%^z5F&CVS~{Y$CP`bI^^Odwr|h<?d0UOh2NwHJ>^J(w z%gEc1?M0J-(I?DG(rQX}>IUso>(f!r<88FJjAxK~G1<-!%1)j{Y`zV7;Zn5eK|bFE zMMr{Hs`E?3Hs~cy7ps0W_|AnJ0T-(F*n4xQf_Vv1j;R}mqeh@(hikW<qlt*0AH`Ep zCvdjI8GUKZVBF1Oe<eFE&QP9^je-ue;(6)~ae#Cf(0&k^=WCZM(EB0To+J5O?(sso z+iYfY{tR8YivZVaY957QE|v}@Yr+vsDcyS{4U!!k5Axboo=47LOU=n3sodnZw98T6 zoXF6iHr8gf-9yH~$5hd(#-yfvoi~^mwATKJ7m4S0ET6dyJI79s=vPd_x6POuMCqX1 zU<qJ>p0;?uqP(lK{cAVobzg=q%5r3|3l3%V`G!m_(C(|)SGthBvH+lFNz@=KguxfC zU@!lmZtIh~QRq%iS-NL99!~;29={U6SuCi4qv9#t-j(iL&M;Q%)NW_mU+^&rojVl< zO8y1lXoAbwQ3#z|@^)^zyX!MMA~jTkhNV<fNGa-&0Em67fO1&C1Ft!&4%?FO!8m9x zR@g;oQLnF>!Z!-^`!1PnT~PgK5ho_U9*B_)Vxb(j*EQ3C3yELE0wOYPbmic@X_I@d z_1CePpn$SCCRt-t?N&oWzuI(?L+CKe`MAvt+?|~?lS;6%u@0Xk5}?l<pT#_kWW~F% z>iAgUkrid&vcm<fxCxym2edZ9i`w%u+mc#$7=2L97W2dw6lHl{asHIiVkbY`Cy4)s z^ct6V1*RR7HE&mNxArT=ZVMy&7XcR9Z65;UO_B?zokC&WounHJ(pH1@Jh)8xd3OAO za~h7LBwg-dQ*2~|0o?)aSd5i<dZrz!At?)R2qlwcO&nGe;JlNh1`BH4oDC0sL)D@G zMa{Bz5QOQ^m^I_`h_)E7jaET!t%xonJTUR|g{BS0HEADeb}>TZw^4<*i<eq#I#7rN z_r(($Or#Q?gvp>6J0aUP<PJ&Jc1pA|Dg8@-<B!5~sQ#isbVVy=!AAereC6GHzE?P^ zIwlg;qF_6MlKf^)K%1Xc;mXonNVZF)Ui$ZuwfGXiOe-IPWTLn(CWAJMx-l~~fWpF6 z+`3^5hlnegd`z_#JqaDEifYiD#a?9$piibQBf#fWOsUJ7WgyfFUjP{x8$lZ-E`q1p zr}SJ)Ipnz`24@Y@vPJ&-<w2vxj4bXv?qz=L5{tArAxs5N@Fh!Wj7#HQ^I;+HJ>?-K zav_%q_N~bJ?xL5O10bc&*odR#UnjYMn8!Qy)Ie&|QHb~3=|W_WdC`DmL<3lASSixn z_$^H}a!eIjlI<sGJj?b-h`;0skB*j^(Gjh#(;vuH5jm`IkM(1@IllpK56AWsU2g`( z;r*!pPS31&K~oxW=TX|M&x4e8bf`^l=={w!rz1WNpysd8L@l-Y@ct0Ui+kxUB9Z~~ zjDHvoPltkFf>8)O6^Vo!R%>)Ol>jxs!mvXuq)lx(yQ1VtRw2m=;8k&rpqYY#BUBp( zS?1|YNt!4R)YC-sA)G@JDC8v4Tu#@Yf%^?+_+dX<*bFPv6pq}Yf`;<U@UfxDgEXxX zyHeDZXCq|`v_C|GDvwgcu8R0cOR{7K%r_lGqMo)Ce1GwEWsx^RHq7_4u=fYr3&u~h z7mR<Zz4(2oE5~oWM*mvHKL~rj6&*hZV5FyIV`lrLRp?*K|4(|s|5aaY4yMmU<jm}U zZkGA~4SSs-e}%pAgL(e&79Ry-oA_{_922*kfx>|_LZ!H{iy!Y-nP|fDx{(cNw$4A- zR#L5T+h1%QZ6B1unF{}|E38oZ=jw}g6&w3rtyH0b)GNJ|H<qG~QEEIfL|@O-CUxCb z(!fxmC=*NlytXGt7&!B$@zUtbZq34B*JanB{JUG0G!T}M>+BWpX?)}WgPHJn)n~{u z3QQAu;?WW(U=#fTkmk+BCwn^TszcC0#QnOM#bW};j}oL)ojP%E=!XJOe6dQ6Xzw=5 ziStkzF9ET&aQ$xeSN}SdZaiH_@9lm}`4$Hp-nyzP)uzg)Zv_nE7-rQw#ip*27$U{v zV3E}lNk@j&$t9>sh|glV6t)z_vJBa)wSv4ndv{k9WDkm59m`IMSJAOL&n_Gg2v6ns zuG+U~cSLIWt%J+eD3Q}Ka0>Bko_U?ydBv7wGau}5@w9I7v{B98{^8bOYSBipbsvqy zi(e!Id`_YLPTd>Y5Q3X=FnYp0peJe{LJ{qvWv+-W_`f7+nE_xaT*4E1;J!1Nt&c?M zJ^UJ5!;xoCHSm7{lgO*;Ni;VX9oCO0pF4T*7HehGU~Z`#*$zNUR6?&}AK|Nx_WcF4 z)e_18Jf?tcj4?P#PuJ%q6IW9W%&FY7!&bwq+U{1qD>n{niC3c9mRq?eYtQ-G($=Zn z1E}67yE6dVzceE+K%Nz(QeQ@121@_dbLV92GJ`<JSUQO}+`;OegUQ-lhlV)0(v(e^ z_eBGTWf1w=hWu8lE`dF4RB%h3cKln-v|tqLA;3f{rO^R9`M!_@1B!>*6OSof6of5~ zIT^yL%8iQVp*W*#AT*+lu79enMd!FG_>c+Ni!{4D-_6hkMH!qbadG0}u0gWvM7lDU ztAJBE5gpg}FEY$%^jNYwsCva{>JPP=P0!j!MOAX18$P93L`8lXrM~=lsw+OI%qBqB z-8^|(+I*czD##xN&&Hyr3g1*Q1bJ?7fY8L0!lE`|m)RMecM10#?kW#^V61P?AxV5? z#T7492}_Y>)yR2p;Sa<50vT7JLHy;4xNzMf?lfn#?ro?Y;b@N$kP1&?mWt1WADVW1 zr@f^&cU*%oHEUTG6ij{3T#2^gbRlKBcQFE&BYo3R*F|0ltBcW-L%+__-aDoXoC%=} zo?s~2RAjl!pHuKEbJ7Db1Nuoi0y84=7%pNW-V^jS@SoR?j?+{-Z3wB|iJ&AB2~PsA z3SVWyrnTuS&XXp{zh(imp)-tVjWn%Xm%{l<!Lkm-I@-Gj`=i5)!kvYo6b?t4qW1;@ zhC~fZWubI1Q-0y|01u*g>!oMUdZ-!a96t%E9V$7)91+q^8h{BSV2<CAq6Df>PZil1 z=3b>qGt(ZS#5gbKPZ#7z({Y>6eKU-zxp}Q}^vARGY<VBJBbK6|=IDZu<4cY1S>s%} zZ8#>Jc4rIa8=uDkoYU7={o0+e2hcy$Kq{`LZdmscQ8XoE{BC|^JwZ^4>}uRU-(e0J zqY*<N2{T^LB2nUIuAa3^EoD9r!T)UwzCs5z_Ukin4s4Yia_V@K?Vh3V0`bphqDEM* z+OK*w&Wzx{NF~faxQ--wAIKrFk(tSnnsC9zBfm<8!)m?$;DmG5Q6>eiAQn<e`-ZV- z>_#cH@<wg*07E^e%{L8HBh&vYmoISR?u$vN<r}$66%}Z^w=}Ej*Az=+cxaD<)+Q(* z=^d;?<7sztQl#_*N_4jjl{5$Jsti2nnI&>xiL46fF5c3qOEu;FM+gS4eA=wX+K3wG z8>C?z|F)xXKXo7M`7qOW8U)|Lg$Mxkc?By%H}OdvrT)Y%9ra^G4v@Lv4BCoI4!^wH zdm%qa!}skQAN`^*uImOP_-lSXvmjBwu{hDj(e0`$xWr%F?3($>GB_D!f$4lGD_LRN zqvboc6@tPa15jvmRw`(}0Q78^<v)wNe<0Im`dy~a!T6^#{ZHa9)4$8~|Fw#L5O;qo z;eQIiz{X6=%t+7iS={}n9$Ejd(oLpM9JBszh5KVG93@NZbUv7mO&vs~MG*N`JDcJ0 zB58?5#nT2WJc(xMGZe%eSTlUY88+ePtNLltGy`Jy*)DYZqk6oxqa*3O&U_}^pX|oD z3DR_Jpo>PnC|1+)ejI&wZgMXhC3}QSG)p%TNX$m+eTgD?Djr0kQdZ2Nkf$jYBJriB zJ8)GS^Xhu)>wM$#Yd*r?O^P2PKH}bn4hg@RHm08D-=sMkp6|(75p%R<AjF)vj*flJ z){DV(PJJeNv2i$bD~DX=9=}0%4wOy(a*SWf$HzPxD91+eriuY^9o%JQVLFdX6XzwC z&FoGLTET8=53`0$ThFcXlbSXKfl+o=+Ws0rhA(Fx_-RVP;iUz@)`1>8m0O?V=GRQ^ zXiT>P?uDby1M>MHY#&}T+-&a&N65$Uw-`CR!7m}>QZ86iipXaX)Y5$2ZEs+=G=)fv z!Q+OMxnFNU&oanDT6zj@S<4YU;1Amr*HueK){iH20|KY%e{x@FVAYODE*_&!;?hgZ zLsBinp6Q}hEY(Q&_{F@AE$NvTV#3fDnGHV0S}u9}pXi020KM-!v?8pSpS44aC{@$@ zg4vgj!QGe3p}AF`;nJEgvWjdOBlT58f={#{WMv^`P;gVUq%7TA4ylQ!l}#Gti7*Y4 zK-$B_KMSnYQ+}&srn|c5sL=fZCRRp~N&aPNdsksILVSK8cR^s<+fdGr=DcwwWE@2m z>XsF3uwoW{eTHH86s}q>mp+NKMp|Jns(niKn%B&92sV(RziTl}35C1YD-*4L6#66p zr4h+}BSI;TN*goc-k_-?@dSOep{9*i4G`@6+JX!BwHN&q3)&lGDM=V``axnIR@o&F zDMX8{c_JKkFW1`Rk{k?4ik413{@UK-y{AI{(t<je>TN+@17KE&td~5ONbt|;*vKjz zgjWr5%j0*)kssV|*^f5`_1)pD!5_cG&6X12{Jlr?zSJ+Sz;ic7h37*7(>a`N#5{M= zBu0MU4(WFvY$b~5wXaCmvhHS;#(%?EBDHLFXp?Zj0-(5Z<JPEiusj^MAxf;aeRa{j z^-$@55py`L9jCPHUS#cSz5+_W$I$77h(z@ED(*YU!Wp-WJo~C6_uRseo^&sUw5+dW zvO!0YdiJb`6G?c686Q!8Q2zjZ1_p@C)l*Dnz`u<gGsC~u$=~pZ>@D_f^po9^=|4Mt z{p+Fsx80KI51qa~-7Wv!>FZys_y=Y@zg71>1z==hqGkQtjQIE6lIe4+u>Z|nO-!E{ zhq177{PAu%s3c`Q&xg=?q@qe0EHr{ueenQJ5TaZF8XyZVf)5DZY>QML>VFPvru4Fv z%9h^HXzPzCtZ8&{vzE$cZPY0$ZtZdonv_7OJk}VOO5)GgQUz1V_uTj3-y>0!{VICG z_j8(VWa1m+nH0a%%b*<G4-3$2*pW2J-W0|7QV2p(|LReVab*b?{$q`%`@pO66yPHW zML>0{8l5AE!71a8%37*jEv5nr@TNE~JYw1t$McAYJ;+W?oz0ZwBcq#<;cTVsT9yfg zda+yIDqk&or)k98uzt6nReBcYz()4cB3q$53q)Q*1K5<3d@{y?JG=CFvc{lT77>1I zm0Nl4TbQGo3YSlTYIwObUz&*o&%!V=XaX_o?C~E~4XTcxhu;Ce$6kVczb{U7&7^X7 z7K7Z(j(PSejvs9zN5Gr^O2s)xSC8}FumJB=*1HlZgffrlA3y&!Gc=nv_B3oF)pW{| ztp)yA#BHb(NMX`rw!IwO`05LYO!AtqyWrUlS@O9}RO_T{p;zd3j}itr@<<AB4AHd2 z^{kF1sD;$LuM1!k^^JF0_V%oMtnZwkI2MUHc$?h%KI+@}tn&xqUBcqX&%sxfy0kX9 zRg^|89T4f|<!-U(kDh%`qWUAKV|-t20H7(f#jaDGrTEK%U+*%_h@wkpLOl=C3&0_( zB~^)%+VFM~Er#Dx*R!u|Xzole1{$Ep1A>Pct2Q3wh&?bU+R}*-gKAsP^x>B`iBH}^ zAd~KnK6}jnv**^o?$&>Q%>U4H>(j^l-#xefwTgcrOJMpx<GIDb{F&z#3+o?O4;odz zMgQG`ex!mPo)@d3f%s6fe<)iZEN?NZxeDqgW-m+ZCR~9VBsARqtLtu3wkd&SE@!zj zWMRT)lL`C7?rwLnonF0U0bU7-&dLe85Qz8Nu1T%99&ZF&`k>TvZ}@xRZGw7LB9#6W z-Nya}BNVqegeLWpT$)R_a+|8iSUXk{p0$_vgS2I6a<^0*f`$L!*Yzh|RO5-O$u(Z( zaYt+;?XLQ^<O`lF@cB)oZ`*OpuMRam7M(KVjwx<#OAi4HKvZo;)~6Vq7k4B#&mADP zyvO|HG;)fUil(=2I!7R;(<9pE!vxmfOyC`r&WCLYPg$RF(EW9VI>0Z4d}L^9fDl@I zlG=C3Zun6oJ^8ew^4Upc3cMPmh>YH4a^}9l<y)eHV$FdlUftzg;hXGzp>A+0Qw6u= zOlc?raDCZ?QErwUfU4_7)T4h&UQmzD`$3S3Z7`~Es^mb!W&F_j&U$jAAjXTS0m*e0 zix+Hk7!73Q*AJ&)vL>}*NRl%`2c~X-z*<Opu=_)GzES3K+M~M~b`9ufzNzDd!*S6~ z0Afk-RPlNwQd|s3Bu3CMW%t_$3BjU06;@e7B2LX@OWoHM?b)BrvnQz8=5H5O1y23! zPjUNh&ia_1pau;ORZ)qh)81_~M*v@Mjipz-a~;O3Y~}Otw_mh_*FvIALfY}z1|KfR z<ZxiQ;OaCsBoZ}X0azfYbC<4Tbw{iZ*k$uO9U|(y=t*8Me?=PEHnslf)fOz^^A*#Y zdAHp!wH`ZEUT=uw{W&CIr?b{a0@6_Po?9cM^C;a>&Y;#(o~NLY?_h?N+}EnHVm`T< zN5aKE!~IaUqhU_*;r$gXFaJe79cBc;d3xb|Y-WBz1VJdn0j8vWo0WkGp0fzv0>Ik& z9%4D7iQNz&Etd$mB0Jb?e5~I-L^q10$UNL4%E5aMjqkFu)VR15X6VMqV1hc}%O$HU z??|+1_>1i6Z2|?E^m@tC3F-C6AtM0pqt@ZMLtXLGM&WuV=Jw`?SqE6r5Ol>7C;Gr* zZZ?nbmd%9)(-N2|Q+FPyvQuS$SkN8v4`!=J*Hl^hQ-7zUiR1!wYJ;O8Xb^!NAWTTr z9`cILeJ0%`OLhdpG%uq(CKbgf6Rz(qT7B^?ph+F%{I!e+E(!UU=)GUl6n{X%@{q?< zW3Y&cjE9D;>A1Vs@+)zul4wvcsh6)evQH(2#Ek&ifaG8SPO+Y5+nH>`EDK6!XV<l& z?2{!oEFaY+Jj-?t&9vTRsLEkY=*C%;k5aR%%qg|Tq=v_`V@Pd86r3Bt8UW%|5X=tL zRki_t{i@-2i8ZFgmy#ZqS_3au(nY0K9o&nP!2#p2#}c=bHH;GHx`@GK$8<Lre2oej zqR*nVd8((d(rZq!{(%26zQG53oMlAe5<y!Pw~hr)(9VVf4oPU+HV%LLJR!>pn}D`R z+0bI)j?{LfCR|YnLryXhRRZ`%?=};*Y@acA&$}1ULny5p`z(IAo9P-$n74E*kxBw% znP#tF1~TVo$YggOD4hOHn_K!uLEDg4vs8uSMv09b>MqeP**uO@e@hw{C1f|AP1pgv z0i4$sRseL9rK2c8bMC(S>ai0SES2|U3&xN4C-b$qm_)EC=pByj8@|TY(GJly4`Cf; zTqyK_UZwoyj?<Lp(AWrx9z^059mhmVx_@!idPDijTQ6wRBTbz-wr`|6!i=g%On|#r z@*Gx*7A8lsh}ot5OEtog{Ljq0(uS@oJP?>B_;przpceC1u4wwNVI6o33sow-721`{ zEl6I`&71D36oy}aOoPh6Y2~;7SmZ&R9mnLs(c#-OaNd7eg^skZ*AzWoB>kn>4kP0E z_GXc#lxt7Zy;0;3?(d{o=#qx>#IHB)B$btIES&v8@FF&E6Yp6{!B;`S%0)SElZEyJ zQD$=#s8-2pdLV_cZ&Ddd6`Xh4rY8dJz$Gv9O(z2-yBbN+A!?~nag*4$Kw4M9y=s0V zV*frtOnA#peX`ikIQ`gkD_uZ3o0NprGB>WWI*wdzCVvXvPqj8_4SfX7+FJV!T8poi z>yyCC{GTn${uPe?E$}k`p=H@;ftUH;EzAD3ihnZW>dyfF`_>ZX&ke)=ABDgFcrF|V z^Jj)(Y#e{=8qlb!5k0Sr;B}-TBqxkhd-H<1CRVa4AH&yCE05;`PR1d=?s&d{mSp*S zlWA=fwMV^zs{VqM&15{4(W-NM_mDrH?8SQH$rir%-L5nBiT_l@3tbx3b{}k3kD*n& z+rG-Vh@svUJy4qGE^{x9$9Mkc_zwr5vJ)4g@kMH}jLe;BDXN;NC}&r)M<<Rbo+-Zt zIlu9h4E!O*I?IW!p%c;V)W-Ews`IwI1k2|6_TV6sCGaBI=79H|mj{DOGAnH3`^a_j zJkWyHHa9_)w;tE4L0qji!b1<E$?t$)LH(_KM2;q#wvc58#L3XM_@Eb?rkh)Y3_N`I zFuTl&sFP*ERV4yFzwV~D(UvJ~z@Yb7-ugy1a%qROG}iTbOscU?OC;7QW}1fm9Lk)` zrw{5?KMt(&(hd5)v+gG$msF=v$qTwTo}BBv3m=LVD920y!!{8YlkIl(9E!hXkGmx$ zXw9DiseJzBI&eWf6!m$B4=8C63Y!m2OHRcN<hhyq{Zb9kzt2{Ar=jDupBd=8R55`# z&?F0+FsK4o=HwnZA{~=ok5%uzx<X|_xZA)F45g2!wdg!fRy<pXbjSi(SXLv0hN#GI zGnz8syk^T?mmHH*l}(3$+!uv6Y$ZvHZqeP!e63^Qj#RTf>lILhIH?bTHp}8De#Tfc z0cyT;07u&q`ebwx_%z=JDJchQw)%Zx%p#wa`b2&SEOW9t(phJPHMJ^~nn8N6TyXp_ z@=!vz+$KgE-zT}ane#?D(y&O@0DtMEOS7$E@&{RlgMq3s>1LkF-Fd<V9pz~6;e;!$ zb-LeI(oWjaYH4m3CWAEY8tc{FAC}%C{A!B9F^@$r3%u8q1|{iHL9sBb-YNt~xvR${ z7KfLKV?)V_Cg$=Zo8O9thtFY3$Vo|1WwTE$66zaKPR3ns^Nhg(NfZsKB|+EKiVwN_ zJmEYNq(Q6ZrPPv9{G%b;B3Td1kvWl%#%POBVdZ%4`E1i#Z6x<{qjuKhW#NjsnRjfs z-{8=E*Q&TU#b9g^5E@S`lRMLtCgj0p((U4}ogcEnU-_UuYK*s#;~k~CPeGuxuP+8e zV-xaH;-0H&>N0!haCn6ZC){HB7DHv*>={v!BZBmxBf#z6O&j9F;?9rVm)Cbw+vt|+ z5~W3B99WLqcA7!SLB}{nXnGOsL{3opHAE2BG^y}d59fhdy39DpOk<l_8<i-U4>nN! z!ieB&+9<D#6mK;j+tWWdLWN;Kyv7pIZjQ*5YlnRXTNlB8%m5&$0Ru>$L|8XM5MWof z;*2F{NciO8Xvo3Rq?b8JUf&+WBpcRt?6W8QJf1T`;<6R#Z7iDdwA5EYwsIFm`AMVR zc~#Y|a=pWT&@rha!M=8?3Ibrx=_Ib7YjZtuv>KxSV@J@LBg#jS3XTVI)qyf-5lWr7 zSUwCsU=%C_6W?H}SH)D{U)AY6?4H|{lVu53?37fsNo3R}Ri>nV@B7UNid)ZQn)dE@ zf&!(#ND>OeIA`y6Mhqd@TO>%O$n>Ik1vc>Dko;`jyZhSO3Twf!^i4@Y%UAO!t3F(M zvqW$HwJ&q`LY>7!0EQ!(BIDAhygwWjELQ68<U3T&6~-mN0o(u%7sJ_rTz*E-MtFai z{!$Wq{7I;O3|7k<f?8w3gOX~L!V;q^cogiMpvg0F2w6Ev)<FKfD^U=}y=fZ=>3TVK ztR}d!fk}Qs`G=ZKj}_K+gW^wf&+)IoKPJf6lhuDsXVazV*Lk3lh0piW9raRu%NTap zsik(*V`g++gk9H1Eac)}S@rY_q9<ksgx_!yiSroaNLt3KEe4BjN{A>xNGyicU^V!L z5XZ<DZj5%6@yN95M28Ed9%G1rk58xr(NluRk}}bq6?f*1ohM5L*wAd_wILpS&dDoo z=&1p%J34+pa|iw0rHow0H8yug*5E~mZo!Rpd){eGGz)<?Osj;otYtY5brdzU+*3D% zee{EG<LV2Q0y4ZOhvOZeV7iq41a`C~dKj)5V!>`5d-a5+nqpgQLSlWW3Qluij<Fr5 zwqaMK1Z%Bmr{a=$J-^mE{R%Xbafj>x@BJ!h4&`H-6#FP>)1#1nJ=IqxYxw6eY~#+d z1#u(&wK9>PlpsYQ^vhSer3bb`W(66M#R2gcN@2L57G1)|uQfmVYk%ltDoYxQc&j%6 zaj)VR^&BcrMsJJZ#cpKZs;v^x{9v9QDrm1hC&@Ck`PyLAFj_v_`9MC;Q{k~FKHRxy z@l=1Z{4iXQBUr7__kHf>ISI$0dm1ZpR0RI=7nu*h4L3wGW4sUu6FVmi+=7XNJ-xaf zhQ(A7p!j#dq2#))af`1vdlL_P^hMMc?Yfv^JEMBoJZ`q{$8`9|@1LEYF#l)syMG1V ze`hRzXnyx8WBGUUyML|XACwB1e>*_=6oHYAiI$y-gZ(pv-^vxABha(cGBdD$;?v6U zyYIxO2n?)jw2XiK_h)PP+=1_ZnJBS*(u2$Rx7q9;5~V_PbL+K{n|80jQ&b30A(&*% zuCRVU9_FQ=G50g8I$@eTGy7w^snvF)%ObCPoYjToqBmcT(QKWKoSZh9%JHn&uDleV zl__|m_iWtVm&@pXD&@slBAN3ph}U&i^0=;UT{tGWduKYmk}qhtLMvREIJpmw2WQ?= z=jmAs(9hoE<dO0r5}Y$yBbDLifNOsMCS|)kr^=)i>pB!yRK89zz9r+sy~Hj>4+Dt_ zWr!A3q>Ds3f1x|{?RIYG*0emm%zE_LJ6g+blJMU(t=s4qIAbR>l!MB=d641z8Zo5a z23UA`e#HmZxHb$}nj@ARJB_e%7nK0I7*3|klE?FI;>jaow9pz%$=qa|2i0XWqB_)A zfQOYv0-lzu3Nzp7zqp~AVDbZ;m<jm=h24^IuIT(|5S}<oM)6hn0U^YnnsnFY;D}zP z!&YQ%Z!C?@VOWfjQ&oey<1EhiC>Jmf(tnpeH8xo+3Z(@slDZV_uvP`yG8+7#t2xIN z!Oi(@fO&U9kS+;7sOQ3uGZSz%*J|JyG84S((eVi8HVN^E>~;~YA98gmB<~H}m!p1e ziJzc`%-x1F28Obg{FeK3O0aGikKNVnb*WVS?d3W^g;-26XVEGUFdb#MQloZ0i7S-o zVy0=Xzl`F};PJe>S`Bdn!@G`#^D$t_i{saUExS!~1m&d3jZ)lytsCYpO`F_KP-)pr z!;&h-xEI;5mZuw&s_%<>^wR(E<F{ex1vv=wa}}_hxurx&(-b;N&mx`IJ%tV(XUJ_s zKRIt^e-N1<4#^8`j^ubQ>xBVXk7j8Fm@O!3$NY(e-+}l**}O+bMSfJQ&yU6*5b<lg zv^m+JntUIxRa(A9irZU1hC0S20o#Ha{8V13R>;OED#L5v`@Zn18#S|3=m?yayKwx1 z{N^KKqWA;W$N(f2a*B_R==88QscnFrGxnRL`Es*eK?>RaEULm}1cLzrAV<v@UO>!I zOrtBI^hVjb7pK*$zpB}&O7Re}sE)d6Zo@hQJy<4bh<9ly@dv$)n8Ud|h0D90`)gVx zQ|%2)_Wl&B)H%T}eZ)hlLX@OaO8c#3_-Y%aP*Zqsm!lv_X>1*+HpdSnu6~?2?p)RM z$7U?h9aM`&)-gujuso0Qz2zkihmX3AH}ks_`<hDD-k-%%+oBvJ?-1!dDz3OzYf}5e z5{6b=7FMj@I_Q^ZQLilHcwJdkd796uQS<YQCK-LqT^EBMx^Yk9MT@QPb}Iaw6%Xoq zB+(tNWmx0m^++qxD9;OQKt8hCa@Yu!jt;^qUtrai>5c8Ayra8?%`rqc43)`_bWO}) zfCIiG>j6$|cy#}AD%rFTS15IU{{W^-!t{eRfH!*dBIQ>cvP9^LV|Bo?sJ1c3JWn}1 zr6HA!lAv#Q+r2UglZeu%#}A<a^KrIv+HMI36@Y?{Y;A%Ma5P+c*-rZw7&bUm6<6%h zF5SaCtngk3lc!;8i+ONpgjBF!Al+b`?MgqO1}V3WA9%s|ecQnoA(htUm^l9wq)m|Q zUZJs@*nzj*Du2)*7Hn(mxNxOD4=7T{DgqQ6#+#Z=pmg7ahDn$o2ZK&@c|S$!%Q~5y z`?!Ukg^0vZUhGNFxN)AHNJVBvmC&hdZ-)k5qQt?bMd^D$FQep6TAKlEFKHk)#cXuL z_tes!o~QyPF2}hnm!3Y<$_jS#8BcgLchn$EDLM32g2z^bu<1okrbHd#r1YZca?U{v z(0XY;3TfohK$Iq80ng~5%dj9oYcR|~S|#=na$ZP>j>z4KX+50xtuIzPEjslbvO5lO z&k`iFC#MR5?)_ij#u~DZPFgW?8>PRCtAGIWD)75$11r_!Q|8|JKto7lIVE*1L^H14 zG3%j6*4|MmRXDW>$aYYA7NZ951geROBa)ThaRvH;x2r@kRZ1pPzlP5ltIYdJ`^_st znnl}l?2xAmmp-Bez%s5+GgISpjOdrf@IlQ$!~2eh1Z{^EbMJEQ_0+mqriGcFTI~!$ zH|z$+d<?&y@p^iAABLe_XqF~YQQ|_ZgZPJ2U0yM1zyiQCA8~zSR5G!iamt+H8z|d3 zRk2B~IoGK<bhac`f*_;DfJbPSsD7uK@-Yisd77Q<I9Tp3vwTWyGR7(7S^rU4apU;0 zL9AgSBpj?}-ZfnQai^t}gOgRrBK|&1f-w~H_C(ib9ox+9{*yewvb&=x`sb^)Ijyx* z$*=71ULqI@FWrE=B*FR6))5jFVrm^u$Vh2q3RB3++Ut!WsWL9G@FHFzcU8wJRXo?Y zumgJd_XiaeY`2_ji{t4(4+MJ?9^AeL%|yF=_qo#29TlF_1s&h)JLHJoi)$vhm%2yY zOeg)e#?6VpIWR>@WHY*^o4`gtBG*cFw&;mQe5Bg@h&J(+ZQlmwT(XXF%;t@cVKq0_ zv$msoV++s@Tk4t3EjNWXPsLR>AA4*e6i*Jj^uX}e%W4wWx@y9-2rXRGWN3-~Jh5tW zyu6%RTH*Pm5?$|=Fq3lAvlLppW^@1PTWAr-Y+f}ojbkWSxL3>)zysevjrsQj&Hi64 z^mWPAXL+R^9ZYVn8bfj2(#h1;uKfLgRWl!j6?(uMEx#nCvyiE@>~JE7Z7<8&fq2xP z>A@JXxojify1$}PaDGDkSpJ~No#m4zca}eGa{sTn?f(-o`Au)i^3R&wIaq!>O#U3< zzpquX{8sJy9D$LZmWhq&6OT*|mfz^>rwA-;9JCC7bKOr6ext9SBQP+~GBdM(itrnK z{S<+jjggk+Z=U%(0_$(|^>YMfc3OtdtU@_he^Wty3c$p~LCgHNOW7v~za8v<ionRu zO3T3b*|)&@Tj}$20A^-d#=r7_&k+9Xj$~kEq^1A6ZRwL=;&ao3{}<<!te@xy7#Udq zcpyTg>YCO52&`vz^))M42xg7p2HmKOkJ@*zcK#Ty3Saz`2Y+g%_AljyQMCHbw|6@P zYGw}=KSuqvP|CvwcMoC~c{jV;-*=Bxx~>jwu{AfYLMAq5#^cI~qt@{y;>ur7%lAYz zwrrc(<SsdWEgSjHORc5*@RU`(_ml5;ErX@rSz;AL0S-HhtS&%4&mn7JALPft3U2Tq zHqS0%QD2eO&#qiVijj-h)6)!`@;g#tjg?wU_qm-ztE*w2V^sBi%hZc8Y<S!Gm{##U zGU`g!+<1z`61JUs#C&WZi8$t&srD+<7%>faJYgDm7q*&;P#%gj1>-UEw_as~=tfuD zLTbB|BAKY2k1aYkC1GX5u@#!4hw9$!9WvOIp|r&;%4-G7WRG^hNkL7%IcH()5>dN1 zV&lKSw}nz$mdf{NHbPg!$UDOsN`RxzfyeWz5rX~|*$-bJkizc0m9EToqUt!m=R$K2 zGDrX^T>@+Ar_NR%3p_V9t_PX*gw2&*2Gu4c$BYGXZ-WHh|5DxevYJj-zCwkVZ;Iz& zq%(f1)4A-wwz4U_mKMbR(XZw~wqM)qC!uf>%3k_qt|RU|_fmOJ2u3rtj)HwiL|xQb ze1710u!cGs1SMEsAMCmAC$BN^3bh2Iu^H9;c-o|~`=N*hu<N59tOQUwEfxUPQpU$b zoeZ4@PlQvf7I2=<X%S)>HE94kF~*KfhyVBZ1udO^$wrXe2^%Ndx=?qZ(W4be>Z;2D zj}8P1+>AYihbBAiQ(HPk{IgRhX-fq~bG9>tLfgwHgA{g{L3&*Q1ch%AWA}l8HrW!& zp@21hFg>;s2HbE0DBKO{)CJ_p^$A1INC-k{Y1($+Na|W`zi7chC8p#Ykd0a$ox~XE z@PPwR>LKEMYp;Q{&Kf4!QRDE35@iTO<TX&&Y6#~q0)bybd<<p;5?mpfoEdeT6nJIt zD^s3gX9=PdTiKPN>t5Yb^;Gjyb+~!mzEBNhu;s_JvDm?7HXeF+A-5roPVjzzU@n1! z37&b)SzCZ^uhI$RM3l)j@ZEkv+7MyDtwC_j6)XI?*Md5Qfd;m?<q16$#}whogS}{& zPy;!*l40CzF^FSAUu@LDZHI^@HSK~7?7@);_if<|KT?}&!%D3J)=sp0$yZB*Ds+R4 z`CAw1&bZyhcTap^10bdi5ZUJ+mh+${`Z-WP&>a2KCUqirGkn8bM^1cafv95bB{Yem ziQGA<)6lcvH3LuUOk_tGY*&OrxOgtBH@0l#j(N?y-1>pO1ZnsP<%HTD0~BUi8Vf|| zo+cs*5$n0)d89A7`DpMlCDEYi01zH=wK%;Afi_nM8>i4g3>?zt9eJ;CajtndDNd!A z5TD(U;~|*^w+YQLYf-JML(8s>j=+k%8kkF4f3Pgt52&bD_@L%%$&biNnD_BbUl!Fj z_V4<8$GCxhF<<IHv`i1?wIoKoy1X=b74<M!V4aOxqswi!;EErS^5-hj9G)Umvs+0Y zvXVYJ4TFXGQe+|u%0-H(Z3f`i6+s#p)Gw)KfUwTTI^S)DWTe2mwj0?xEbbe91~0KE z&Xa^NkJMJ<t}rdtxzODpV&1@y1J$w<z_XfYbcV*?UDgvDre%!6i4w+=o3t_^2XH>g z%W{V1Ww?z+4RCv{<qeud$o=m4{xHaq25zmV`yo=$CxBflw7xl}>J;1>dNdOTL}Qr} zxRG)!wUVpY@X*aMN2!ZuX?O&W6X4;W$4Ir(%AQd7S|ZE)=4H|q^6C$Bu~y60pI40$ zptB4r1GBx{(<6YfDc@K?M9ny}x>rkpt<Qdz0IoW(mZG*61$xNDlYys5m1wo|oUj(W z>){T&C+)eU74&lcQg}dDwokZ<d^CDoapG=83N8hE@s0tD0dpM~<@2)9Oh|mKOgQjJ z4Y3Il8aSVj6Kdad3fI@|l9`e1#azE65H5vTWG0(MdY*j;VEme(M#kU-*ziH5UXT!F zPDRUG7oLqseG4q$YkOJ=1a&b#@jN5>cI(2kQ9(Ij6O8^$>Cc79?+K995Pm@=vk`4K z;y*OfnL?SLRp=goh+B#h9frDXz6O5NZ7M5#_spg4N>n|y^^<^JopNK9{38f)vYdj< zD&S_&F-W<#kw^QRr_0LHEnIx7?sUw$;;m_y<t!&_d<MCsYi^~9I{vY|6-7?`4iZ>U zTgKI-Wj90HLcFgpP=HJwH*9Z;+2S<k&bKqMfw0FUC%!_7S)jXVtYvx!#@j9!BTZM3 z2zRSArVixRRFbgXuKY&;S=Q)Aw`(Tdn{t5JU&g9@q=n^K`dayY9Ic^R(O==r!N4|Y zI5*em_+1W)t+s~|p=elStYQXKi03BzWxasIH01}2MKi9zWA79u4O#DLa)M1QCh<6V zrDZ0xD0T}ZVp{l7Ln&{Yh@^rA2ve#Cu7LccoNhFcLUXO%VqS>CmnDeL(OV4KVtlXI zZ|vzc-U=2J4B-3H-wW-6F>Fuv-c>NzuH@L*Zf%P@D&IZ?_x(d=%4gau)I5Kzp4B|z zPiH)zOt}I{FVc9okC8{hEFr`g>fnhUIL|dTI-zx3nLgcp<nutPf8m-zj`Tx@jC6hV zD8_iDULB7}=pBP8pB7m|(UlpSg%f-5Y(i1J(s9o0Qh0uq4*EvwpO&4?AL%(K6&>l- zz3}qaGt?fIz9FGPZ6RLTZ^)r<9Hy5so75i9UCpTGq>gwkIPmqw1S9~k5$UK2jh8w| zm;I=sAvFO|ls2`Z^DTpQ#HiIlO}g`PKl{!Gn(AFMLv=>eLpNvH*$X#Nr<^a`d%b3S zRG8yO;dW=Xq1C>z*xJlwC-L^#J_YHPXP5V*j#RQQ)h8(h>mSI@SU-`SvHq#-?30v& z^*18S`VVDizxRHBj_}{76l}jS;m;8m*lFpRKVzY6zY*b20sbBu_SbjtSt*(AHzxck z0y8VyUm3-xWc>GDz|RpF+5gHY7(Xkiv;CHveTu-u#zOm77WOH^Z@Jm$2#k!htSp~9 zG5-+&BLgEX2RrkpS<UAn#Q(k~|NlxV%=Vd;GaJVrTRB&%s{P&2=rvt!0}EW_6M|^X zz%Sbph||L22jsK{P6p51S_g4QnS6h9#kn;h8>f_ub{k`2<m}`;WgYafb2!-!O~-x9 z#TH5U>)1$mzfVg<*9Jv2_bk}f!$D#FtD3^ZA%Ba5MH3_U$b#!>ed>`zpMg>#P<`uB z#PftqMq>rc5S(&!Lce-RUSa*7mSMoVK8Q>l`}>9kE{(@gMcswQYLtMnYWn7grCPOU zn$sa&CYi2<M*7N9dUh15s6CxSKfQ$7)#CEL;0mjQbqmCCmIVUkG$z5Nk-hw)4`k+S znm~zsGt;wchA<+xR-c|SCSxaoP6{cTY#KAH=T<9-r<8m)|C^ie!eX*;LymV=SPh-+ z$>Q_T#Sf~3<O(iR=;D|_eo83t-ncK?0=gApeK}xAmWjl{(2ag7?zy%qL<ObofPij@ zKj6485+~o?=cu&V$p%7kvYWv&xR61W4kXvYS;?AT%7?bknZj}CkBLTKYU^XNt7*qw zLb2o;v>~(9G&b29O>;=rkT{}$1iBR@VvshUj7<j#&V+tn8L`%~n?nNKvf1xdWr8s% zr^oOT2w*b+mkS^vvn|_Ls}R{3y-9mQMxD?}$4_k@rQ+3+ZDNyvjcaIFJXL-++yNaS zYFyMQB8(9a;i8~OIR&3OkcjHs&T>K#DXTm{L$ocAR-26{)-l*Y;eUI&-MOcE8gNY! zr*w@v**9c|kK5(?;W8#bZ+xT@4D_m)_ZA9D?jRsH2{oJic+H#6rlat4TCKV+M+r6b z3mU%U^F9I7q4+81QpqoRNVx+Ce^Vh+>$9qg7I{H9HY=;%z$jN-N&V7Y_);}PSVfF_ zch|4@!BwkWM!<k9UgWKL?m@^QA)Cv!m;tC7{FVYRhl=xY+!2&5p3h+@+``-B;Rx&_ zofFJr`PT`U#UAz5a@GjQp605_KVt}j?7^f*bLq;ndiEj{k|v98Ne`dYD;}0vf86Ya zquvGU$5LQ%rc`W)c{uNYmq=`d3pjwdaf)p)Llk@opv`;$YMUl<-l(aLTW(D$49Gsm zgj%Mn?;)cCj*cJ<(*T3)wR$25Es|Wd=DknBYyV(W#0U5gmF_>S_qJP?y9<=-;OCCx zsE-e&o`@Ox247cgOH?)|F&hbKKs2egKF&VPH?DPPTjU!R<GEk%HPKqU!%hZ?7+Cv! zco5Y-#jkn<>?PSb$ddy%N;lk{-<zpk5u67K;T9YV)#vylVMDdH&X7tK4#S~k)Q0Q% z{ic_*mG|x-Z7b&)KZ8HE6s~mDDQ<WDB)AEUK29@zz33zYm8P{p$Iy+G6e0)<?~6T9 z<!VoKhBE!NI|QCJ@+#ko=FC-frGQNmGQx;hV7~0AE0E=kWh^j3avUXfMC?Xa2I&{- zBd!?(XG0~p!dd^cdi?1Uv6nfXWB+5c7j{8022(;KGqc1m%?ZGfdZ)MC{k`w%9YTRO z$|b{$?sP0j)Y_3Iq2EG~<O_+dVn_jX1aT$dzM#a8e@9d>Xw7P?qP(+^KxOtgHC~zn zx_^(1-9AJL6_6msE6%ELEpeHz+Glfj?5sdkU&2oB!(}w$p<sU;r3g2C!mDUaq46}P z`?WQ0A*_)_)Q@L2D1m5dWb>k6wxDH5>MxlazQ7Gdv`bdEj}$;hQcztCVxb3-QMMUE zY1Dl=pNWBa%oUf8lChIUqd3prj7eqttj*ZAwd#5_jnl|d&J$kZoJF9w&sx7Cr)}4Y z=?oNZNPCC041=24DKP6p0j@w58p@|zz`ma}x<lX?AFr|G*!mj(G^uWe*6*Sn87Mae zWtIzl?AKR-vP&z;TGx_x*r=HqT1zO&lGN|!1@UUegurg2%HCsgehm%0N?MLmE@m|H zODQDpmsTa?wnv%;#>8d9h<ox^!OMo8%99SE*eGOcw2|W!4`@XG`k8*Ch}F)*QA)Kd zH&CE4c=3nscN<7<YcocaD$Lc$NcDhiR~|m;{WkgffId9^g@F6wZ?U`T2*wtg(T;K( zcTPNeCJ&*0W4LAkbV_0(PCu7;rGvSe2B)lj(C5uPoxbYLdqa_^S79B`cg#mM-{tna z{ak}33+p2%yv`U_;vGaG;_Q5zR0z9R@fuN=3JWRQ7mZRUs#gZ}j0?o)d<Pn2+ga1& zy{M>HK}M=P-znHkP%Cd$Fp6kW-S7SN9V`_yurVPVodemlb?v7RG>*1u;nr@v9+MSu z*PE12>1$c%9z475<3qlzr~{e|((Mfh#q&0)9u~9S={dft1;403TFL5F5&X5O-Is}; z;eaF+2E(By=n<4KnAY@L%i&%VOvabH{l2S&rlzli!lh@z{0_`A$yV6ljMxR=EV?+l zUGK;YCBno$VV-P%VCl{FiKRE&pIUl<!aUi3;~H%L%+j0VH^%iT01E>fEh`(#XEj{5 z&n><GAKe%JxtxIgGfVHkned<1C6&gl&R7vPj;JCk404R5!WQz|@0)}b)`fjtmev9Z zXBiMv8ObRtUmr5TP1}8d9f;t9gZo`GFy33-pFYr(suEBg6~-5>y5sDqF!RR~OB?A| zj~A_;@}KOErENQ717Xjk)Kmi1ezm?@HfmWqP+_W33UqpS_9<w2tfkT9>A-2#ki(R) z4XPYjc9m@FDKtCWoHzghs9p&ixwkP?lcdE$kl`89BnUbGbZL*vtHN}eg6NTGAx@;o z;{R!0^QB*iHMlT3#~v9chGj({C67gf#JmitY?eiB4QKmZUS*Id;4UPO;%E5PECuU6 zr>Y3rQW@=3gk#oHF~{om;bTE2U2z#j-a|hLMvkyPa=3v_#>}>knjrji!d**7l?t5J zek3=c*UEl?1Wf~L#!RiCiNwChq5(qk3XV*^;WN(Fn*CRH|1;6rO_LSW>Da_^4|77? zxxwhh*?oJP`M8VjDF&aiGkpn`5_206LEiaq1cJjcnSw-ux7&`k`ft|su%P}Y<>4W% zl#7;Oy2*_c7|AW;bsa;&08!EKH5sGhmqk%N0^TKa$2-i^5y37}v!HFY#2epvHLXi| zwsJ-M)6?BIANLs9e}SPZeVOjwQ}4&R=GZphR3IEu^XR*;`(ml4tWs1ya8Gxf_p2%K z1@;|E%b}okbr#6QZpVe{RQ<;aTu13~I@XaP$L`N%P|c}q$1tS2GWjKe$VST63%L;v z5scRA#G<mQT6?i@p&`fByO$jS&5-wwXx*DDrtwU?xRnqH@)Q{|(e=F%0J9Yk0Ya0) zu<z|R+89<Q3gepGVm_s-3%8Dx+&6x6Z3ww^9wGx?P}DZ#brG}MnD7fX_y>+T<)dwP z7^oKVuyDAPmNk+$08v1$zwS}_WciuiKF~A)uWS*q7zzY0qgTFeWo0gs5yx{%8u8&N zf`%wEaN~A_c=Xmnp!d!ahS8hHJh@hPG0;6OPNBMYeTSE=o0AhSE13f<jqX-}3BcLE z;zfHySDW+k2gtZ+8%xSKxuz^{kgc#|0FvgHpMUWiRCTWw;i1FyFq7osP)}cCp#oH0 zaqYE{<h_V_wet)!L>YtW8LMB~9Ll?qCj%b<W^l{h#5r2ee@`_X%DO5{aw)-IR~bOS z%od#tSRAl*S74TH=dM~zgv9411QG0k*0k9rs5xiA=r7YGYunAn%qq}9wx+$D;q`Gx z??r<mgto)Vr_JQ_rfYGXKv_0HujnqqBLaKyU2NG$CZp@hYW?DZcaE!3)_n42)B0VF z{{oUK5iw|?F`}xwG@D{G$0b8FgQ>*Vi~yg>oFrYuWF=*Bh#dbgiO58Q%j3!Q@tQ8m z#*p!oZJPZL&K%i4Idf$HUpRAQ|819L|A%Leza7?n4)EXA2bk%9%kDn~`1_=djpMWH zf6IzLy`G7giI#zZ>Gw~-{QK~U&jIM!X_=UqK3T!<=H#COFw*~h;z|EmeS-a;T7&;- zZ2H6u{IBf(kEL#bs^ZprLr7iI)%124P&FL8(m0#FfSdTpAfo_#f-wg(q#C5z6!P1< z7)MLRU1er*^2Z(Fs#;nbTCaImc$=P2=-5_%J-o!?E_XJ>HdjaD*c%1n=fSpVn_LOq z?)uH`;kygv=a;nCX-vwgkBzugzG0^LaXp-)x3*>JbynF1fssT#>sXKjI6mX6=Qb+( z>bd<!WZySXCl%GXd6k>cu1#P|iZ<cC?<duWAHyotLNisbzCT~@O@18GhP<;&!%egj z^pQ(;qRINixAlm-_w70QPfon*XP=v<KE=vp$0YeqCxfPD&j`EePqBT>T=cEKhP|p{ z(W$QDcAVQ+4`LCqZ;5WIBDRAB;tI(cz()P7H8v<N9j=|N9CkzLDUIM$NP18Oo=p>x z6<+$Nh1V0{mg3&ec~@>yH~*%=c;&1yvE)ES(-RH!zQ6+wF?1csef@r~)|IC@-*g|h zytTDq7~JDtvX1y%WH9fmsr$W5zInAA4O|1FTeU`$N;>Ep7Suewj6i_bvFN?)IG5fv z_^d;UA+92k4P}J4{#wI1Crbw`K6&(ZKAOZW_jx^MJv^{lN)ZMK$k`L-GmNnZ_js_` za$yYYEH$TTib9QIqg(0q-6SgV^JsdKo~LlI|KmaNs}`;sd^<LE++Dx+vX9G=JrP`` z6@cTMzimwD5pt@F**tad_lox{78@EWF{r3<k!ZZv%l)W1vd5rU{TRs-c$zrN<*89| zQH79OLrq%=uY{r6$2)8$AwdTJL|SH@kbMbVH&E%2j#7*>`+W3Q*u%<|s#yYlm{5n# z^LR^RHMSHbDp6CoT9)itpt$1HVK3mMi9YYROBOi3<F4paWFrA;0HQ<U?Qt20TkY)~ zNA$`rISlTzIeg#g%0o<T&q`|JzDR1aW`#6P6|M5^Up+JjhH9Z`4NppvqFtDfs*V$M z25w!63C9T{?IRd`lhKm?X+l{A23)dJx|l>Q9ORmO->XY;%%kVooi5fWes*Ex_;P6# z&U;*7J|~$Y#64u&TkI;x-9p+s?=Ji9aotd(0k3tB$v=;gG~6_%&FdI)uxA?v!x9?X zteTy(zjdQWF-GZvEeC3ofDI<A2E?Ds>lu5!Rv`wk&>DYNYBqeAPe$gFg-m-XwPTHB zOqR|kcV=V<?S%5Zg9mCY+JhYpj#to6m=4>7KvXQD-*Oi`(2O?(3@Zecb>KGM6fhu` zVK3<rse~-Mba8}n!Ur8DAe6A3sNVGU%Q>H!=(!(pMs+C{>8Wk-&?mE=VygyPvI>-O zM(Nfp#RAMzZ7WjNai*1w@=``SBGg~)gR_3UI~q#khyVH0<bk!xhb!mGn~7}9&|g*} zS1~*&^@T1LhivMQ;Ixt-xN!!?M<xS)g;w%%Di)0~8jmMv7WPII2j|hF{z{}ayNG{? zi;SlV;yHOv2q6G+F-I_<CYdk*{HbXiF3tff$SbBOZ_S<d3KOXIr%%<%NQ3=0O89|z z80HdT#bVXooL#MfTQRO%srw}qB8qDC_(Ks5otXPs$R)+Y&xh-dgZ)C!Qs^f=kproA z>{|(bXvqj9w(7bW2Rdl0?CZoNSTGNyiD4bvLo~G*s@7vsoXFCXGehI;G5ySG<vbXk z+YXIRqHH>$TgZm&W@1|@h+(BENAQgja)@mtMb$~aiq#1+)0S@++8UieM_m#MlMr@- zQGjk_cRWAd>Fq=%#U~fPw^~jyt>aPUq-{*F`CGCp1iZ0!(LMlYr7Nrf<c2=9z0n`2 zV=wiMpk7C6Wo92LN75T1lyxt&!ICj#TPaj&o{4SCX1n%pNicRd1a^izT6}@hG-kQ1 zzW3t9n?p}VM{L2RQy9&FlCR|W<uPa&CbFMWX}_?JP`EUk@jOcatroI{bsWjfmXpoP z<_Y(3VR3TA`@;MZMw6I;@5Ya(PXBC8y#oFM*~A$BO~E{<YiW*KvQrDwUz+ljS92Ol z8z!egcG8{ZD6l|-JW^ep<i~i@^0u;p=~pm&yLVveYKn->oz=kJC~IfvjN*Rgg*M?H zXCrx20ZX{LLgQ`SLr#M8Df>bQ1xWdv(V;0hQzbk@G>NRCOJXT0f{}1j?1d?44(-W< zhyEmnQYvc155Us_oLkggQYo#Z9MN=n`frUz!Y2)=MX7dO4$eIf(t1%LLp4cA?C>&M zcVcv8jl+vs;ONdrI)@X4;nMU;hR@h_&FTH)syPs{3vcU@8BQCLbTN4&5*c+Qr6_zu z@@cv9rQorT1{&>SoP1x(e=3QxbB^3R--h4F#Bm(z!t}1)B}wzu1nm3E^{|nCU-97W z2rhUXNNnf(#&luIcoA(c2ws7e3i#`AnRnbRG2wx>sTc#T2qA2lPimr+^yAw_+OJcB zYKLkOaX%~5#q;l|`F0`R#trmZjy-O`#*$wnfwJs1B%v{wK(u!=P-Uzb`{*RTBaKIT z=(&{zSWKe+$`m$GPrx|3ow!imhG|p|S_}ykSIjL3^pxHaV{;G^O(a>I9vmdmR$*4u zWXn1zi54A1@0>%~8wll-zF}vyjixUbZg_U8e}%NP$7~N}>oSvvBv81mFpUkrh5BH{ z4%|1`H<j<FTE`n2*PEb>8+i6&gPqgMT8BKBzKd+^T0U8N8?PvmB6{9`%La9~Dg*%6 z^WlS8NqQ+J04GG;AOFSht!ckol>NstBXs6vYL@+~Dei>tz<RBl>mq|Si1@cbQBIIY z6|!ifdn<Rf>!mJR7Pg8w|5%q@3ayO&<w*>Q$Sg814+vAukT)(Uq(dSf+Mmnbk6Xdc z-oUu|wJe{}-9MNP!T!l~2=+gn4)I@fmyX}c%K9%fjlZw`myr|`2gkp7)W6ZC-`%qQ z$F)#&0@ij0hIaqsjTp4(#OTE71U3HVZ1h@xuTB3i62`zzPs_l<fzQgsLd(v;!uA*4 z`-|~1FtOvaGIP+fu`)6L^{)z!dJg{sR?^hU{I7-m51OZdPbX@vXpR3DbtJcU)U*E! z&eYn9mW7symXYFbruYB5#Q*6C=btW-ftmI%w#$sq!of((%=Q;aWniYKWoBhz#Ap3$ zvCNDt9RGNYjI>O@t&#orl;9tY;9&lJhR3G>%uI~594ri<m44VipW*Sp*?5!Vv(gVM z#~(}53RUE+*F<2v9;*@j0ONgCXEPn@?qhOKR)HwO@&w;x@nN9`+Xe&-M-%r8dYgXn zc<qZfX*iqL;<peva^a2=xn^h6ks4Pk9#VWU7&5W8J)+12s|_QhW3bKHBfdc$Z1jG% z`WoIhakW-@+x$>0y=*9LL34lMP;}G<8vn8u1#y5@JV1G|WhGwaOc|nia~eM)KysIz z+ip=g;s{%7KD?cgNB&w@%CCIs60(3N@MX(d!(+IO{388ia<`F9;jSko;*dQ=pKyC( zF9F8V=DgUa5H3(2)s01pC1B)Z;7Y}iEaBbH{zv*)oq4K`8v8vJ-Sj(c_GtnRks8l1 zROeVP*Y`!wQNy;~nK|VWQ;LRL*Ho26ngE{O(B%*2fL{jmRL-^}LDXEkwe0rMe2EX- z;zk773lOdC%zDRjP`S6#hh-I(*pkMftPl{H8<$n^O%>^=z9E9QPKM?yplg|a2QHxl z309r9_2Fgp5M9}I&^x&|?_=_Oj;Qvi_}qL~nn0pUQuh1K^cF3^+UNqr6AV)H&c!3G z#Y}>sQf^Jyu4u)|0n#YqrtvfA=9u!by6AH*0<&R`=Q@g7cZqCq9tm_}sF|43NgP;d zb-C|+YHHQB9xh#Lt#@H5>t7I#gG&*Q%Iae1oJVvKG|T;q2Z+4Zyk=D3(nvscMK`|| zTGMTIaXK*!p9?A-4_IFs80iqIxAogzV49KAp&<*m3COsri~2Ik?WP9IIaMK9w`O@{ zX>J8*GeCAO#nXq>Ex1Gv1o)0IUR09FeNT`8?@H5@`au6OB@$WhnK<2T>7Y)=ABSGg ziOEyie6=;t`%%C)QO7(ZawfP$M-f>1?M15<GHHb4QplM+5Mrkx1P7#G$)a3fxpuQ> zUpn-F&kmMr6s?OHVaa^Tu=UHqRt{>t!BU2vS=ExDwGHD`NEGJ0Gge<6#&m<ui+z=S z-pWC}3QA`u-)yD1AY$6I>zU(VU~uNLoqdBrwuzy>DZ6uFq>;O1ozIM*cz@jB7Jf`z znK3BbsmVyTtw^-7m&Frzt1uq05}N;MHp_ySFCkTRid?PtNBRVmqa~8X0tKx22#J?O zexJ?5q2Ey8y*~RR0rSqL??BmX39}fJ<3b6r%yr`v2NSeV)wpQAHUzvre#G}F))1p$ zb{;!KRBv16+DnTV>72JUg0!)%=3l|o&mmc2iTy;dSB5<<VTB5;G}S`RF2Z*Q?Myb5 zVcxmV)5$Sf9RYsbrY=n)NU(I9S>jvxsL5Ne&fbeTh{6<$TQIOVbkfAuv{G8#;HV*6 z3Evcf^D*_Bu_hF8$^laoDv>p9Gd0wvNmM1FQA*X^LRFolMTt1&bOi=2R+iX9BKO!% zw#=HE#<RALg|fJ^GPB4Tyh!Lcp9P}RsL>3yEh$+O(}F`4yn6`{mugOgR|se!SqdhL zD3dvuB`i#Mf98QYayq`FgRFA<gbLwS5m5;8``cijGU(Z&iw{8TpNqn5h2P>HJw|QZ zQmrQ^nvlDvF1b!SH`Qe-XpKu=O#Hw}jaE)IIaw$O?pOR;xc(iTir#H@U!b#L3lPuc zZgF$bUl9E(fxYC;C4*$^XfYf$fS{)xJHnhF_KYlyNIw@_x&lN&JMe}(&4fOOZ2Awa z8ezii@uwJM?n|%=uEQvIV$J-eSkZF1446nBLbXgW*i-<(Ij$jQav)z7Zs3ZpeYWb$ zs70c$S#XMR5ZkSMgsBl<Ni*FEn7`mFWxrnVaqaQN+j^!Y&^p&+0G4BTtKWy@`<Q9q zS-6m6BwKNu2>+_;G37pD1SL4D#PJeFu%CTsqG`Y4l7T;%BTQ60{?%ov@u;jK<Kinf zs&>c+M^IE$l@$=TK2iGJ7DBfK$g{#D<ts|4Ohzn#=W>nS2rToF6}KJ2#T4W?M!*sE z(os{R74QRy=FquG^CdPustF>2AZBVi&7ceG8^Y;<zV>*;QY55pa^HAzBW?^-HKfau zf3-)tPH+223jW05(ER#L3CAxT7dEqui*hcYtK%kr;)%SCSqO-0Of4gnF=)i#I|h7k zUee0&VCZ0~qSUCP-VFS`+K(Zd=Gav451^lIJVeBF7xMG`2V^24E%LE@sC5@^J6*L< zlx18w!#(^Kqm~{#19`jw2R=|4{KtEZFMvX1?)$OmwC~;DHx@}E-`1U9hXI?gtrdu> zzHae%XCo|%`U;r&rO1b28pIUUX$AVjj;whD?7%ZOd_vYZ{-8F=@kwox<A0$x`TGeF z$3Ln~GXFmK;!}XX74$5hDvvn+vwHo1gEJn-CsjHI7KT5j5tS<6toK;|_V0#hRRp7~ z6bo|$S?)Kg4L3r}q1jca=NPHOhK?ms$%}v5y5bU3bJC=q`KcG%zhi^D#pO|-;`u~r zClf-yr0y2pNM?XKBtStoYfJt&gD408)m&D6=o?q6GZ8p_Hh_2Nd(DY&aj{cmb#%?Z zhneD6OhY$b^^P0*1WEqdWtFWe(wqId#+zc^oJ*y=jmgGc{pj!cvyl~xbYrXcrugi6 zZ#NySMAj_U%~w(|wus||rq30@xb>H5<8Hf=K1nouQppY2q}f^-2PQ`g$%Z>R43gAF zW3*)HS|~Cm7ff%Tqu7{GjtDko<+A5o*^TQdkSuW$gE`8#z@+A+pt@M*1x_kvG5+K= z7Q8)u_jyaT{J79^%;w1|igUxGD^K`)Am(D(94Epco8oOs)q&b6v0;^aLBJmau|PWc zN{eC6-?+YRfBjjGnyto)!pCLszOz48#sW{ie2?ju>&B!q5!Qgy7Sn7%qKTbGXz;<( z^+Hu1jlZgxG-z?!%i&b!Feq~$T%V%aEk!6)v&u#Vy`V?S^b3?ug{-G$eGp`!xJb1K zsukwB+jBPsJYR$3p2D=m;@Desac-mwI2>|DVQ0yxB#kAdiqV&=^MG=F*RYD^oIDI2 zr$dO=?-87=jlN?w&k<X&fS4nI9w08!F)kEg-+KTA40)2IfLo?R_^^AMO39l(ogp1k zD4~8@lDr*vNA#`G6t1QV7dSPTa(YF|Iq^A=k@gNeY|@tv#YO#s)uwr`FXlN)9aT!9 z(#11S%^d0;>bs<-?GrjOMqY&7!eT{I2Q0X-`PGt<yom+i$jIn>muFW<chj<RQ=KNi zgd$K%wS}(v1>hXX=@302uV7o&kKn7=C|S-YD4%b*&(LS1e1mDk*JiD3Mdsj}7DojY zwW9g~y7sub_@vlU?ASlYbI;F6NX!hUXIh63hT<$2>p30P(jsEyQbLchX=np~ObtuT z>r(63^6C}15yjH<#+T38z$%vyz>`v#kScxK&abBnPxS#1%DV1}pjQdK-4zOg3iE8u zeCKv|iRf6QzU`VM<Wnx{R9P0v9kD;LG^Sh-FtFO1xHR^Ty7iO$P9N)X*Tr4N4(`vy zz!MQ<zc2paL*Q_ZdZid`2sF2Q@2%j8@`Svo|0Qr{`hjziB$+OiM7N-EdqA=fGq<&& zC4jLh2c7DG9+IlTp;`Za)<L$RkQ=Ba4-37v29Hz;Jz5lm(h;zZk9dUgBrTofD^6Ln z&n$Tly)Bpsfa)Z?f+O98>Jhxvtxde-3oS{&)gh<`pib$ROh_C1nW}2AHF`@bpEm^Y zg3b0iuC`lL>+j(bB#N99Ke?^hA6CBASf1A27EQU}ui5&Vu(~QZ@?i2ga?x|PG*?R4 z?*QSXdqs!-Jg-|b<IRL00cQMGDm~}CUCrSHK0Yf)gB<3Jg$vncOy0s+96Ed(%h1Bk zD!87>VnG}k+biX(0LE-W`%q}UY;qQe`HrjVB-EG-YQfSJAT#eoy<d$56aedOX{!h? z%0FnrmE~Z;K`T10_3-QZOAY><EEJBuG?;pD>_`p3fiA8oSQwlyo)82<<FC}!%~_z5 zP@&!y(_iBnwS#ZwWjo|}U!nKe$A&qW;pY`?k{3<HLWn}I0~5U!V2%Y)oV*`H12a(J zPzV7LA(JCO8x2Z`dAwaUtx|=m`havS_{oYK%|C7nAi^z&?^vYB#8l^cq~a}hi`;m2 z8W<s_a7r?J5gg3v_|u!N+M^B}Fm?cu=m3C#yUb-pv1*IUD&5%FGTs_@BAj7w-ee|D zz66I@Zv05_hD8I0X#VkB3dMEXbY}jOEdmhP8~ie8!25ex=Z6neKQ-_sp9POL<HWX0 zWBK+`ex^D(gABXcDpaaAf*48dFJa-ger#P^ew*52#;EgzVlcYS9W1=`G-PKx<PUzM zR^fFa%V(X1DX+Yyw<WXjZ!u`8aQY^VDcov9b3*$qwVA&F3Qb0IJ`2fzP(R`Lq<+Hj zXY~_idiqa7@^6_r$3L8|$?=;a`EvwjW?BYjrr%|-e=X~`^SaLw7&vGd7=IVB{sr)x zAo)`O7S_LM!SBa)e*yf?D?Y7Ha4^xbF@4fl_ZPx%g5=K;SlDP;{vI^^3BvE>=u-s7 zzt+I^88`av*!0uu|6(?OYk@!c3`~FaGcYl-&@$4qe0nSV|Dj0p*BA9k-yr+{RipW% zfyf)y>GTNRN7dh5fhby*5Bn8Q3zXFhl|7de#N5U5M~Dh?kmdkSR^K1m>j|KVQ|lT$ zIlMEkrn+A<FUo6eohE_f<&mCwn1-Q`+k~EQ*?@5ociM6}vScd64He3h$QcpJ^`LGy zA2wv#3V%9yn70)Pa__o!$)=yGsCr27X&zs&j97r?EthNejkN*XxBwDP*QC$vDXFQj z$d}ngR?V7La4n%vf2;Hx;~&Eaff}ykz>L!PCW(MJ`<)jIWgmrK7PSfW!*>*WgEwEj z!Uto+=gqBY80cci1|R-hQ2)E=U=J@dSk&5dmFa@6shEdYO+T<eY4P11ce%ovZkDkw z>wLwW|FTmLQqjj|;bwo^La8#7pe$s`51ED+uJ~sKT4-$Ba+cc|6!Frh^qkgK?L>3o z3X+s?hGQ=8M$pEP3l}SsNR9a8W{@xf7-_6$R`l+J_zN3Sd}UPiQtGfDa#cs=4vkYs zZP^l7`%Gq}ZlvW@=R&akwuRC@yKd%l4)}_Ta5?Ho1($r$hO_8Z^937zRgJZ+O)!Ap z2M;E%!LeaBuEZ;Dk8~kY_|CyrNwAIq7s||bW}sxnca>@ZCIl`u*p6G}O6tfOLBwx8 znsx%A!pp>|6-A4yC&|rG7fKTnyTG=v9>BJH;#{jZJq!AS$kj?k+ik#U*3<X))^o;4 zzOr;hz(Qqd#iwQ1AqB`8+{OSBs2U7?+bd>BZ981Inbhbf;X>+qh6ba}l^d8S><yJE zH5qPYVC=Gl`HB@j)ig@gvD4nz@9T#W?wVhWU{ZaQhZz%8CJ;l9qK#H&u0d}eh%hrl z86QaaZ3U?*B%Xj)*he9>L@qZBVy$VS2ENcAfTnR?Rqup6ygf0fUP_6wWAOu2Plwe> z;er5UY{C2lo3<ec=;%e_gvY~WTn-6Dpj`Ue)+8IhW$R}xsVlz-=~v2Zw;zMX8_I$m zJ;6jV&dK;gFP&}{xKfswkFyuAwf3VQj?>ci(@{3laBah!+B@85yc>(&Lv!xxrtoRA zm;O7f?#wu^<e7(#P4D?RKj<eHi~-ueCfspv`CL{xKU9B5-|%h0egII0IDa;qfSWOT zZMK)^J16E_ZU^k!gd5=}#KS@0^i4jW>@Xm^iF<Huz2ipWx!Df2L4Vs3E@|c8_{kOs zKZ}=!^d$XT#QW<}{*N6r|Mj^4PZ960*Z!=7=97r`*GvBvul{Qlf1ZTW)BhhaZf2%u z_{_MOf&Gt#hl6P5*7+jW?cSj8U~!#Bc;DGamF(q-4p1`XS5C!~MG%dv;Za~{x7kms zuO_B;zvH=PQay~*b8>QCrE2j^f$!O4e9fq5hX`QO0X(fImz{$I9t?mIH16tfdhj3K z5CJCdkn2h0d{69h1a2r81xNw~u!Y8-Mp(q|iGc^4q6N&Dlojy<uR|hvKLGc#G=UHc z0B}hs`sTaJer<DQ^f7vqiKrr3ivQv2FZ)D4SP9e`WHNKG0`5bX{dEQ}v*cHUPly$t z&_G^_%%*XS(EIvJRFOj?Aic;8hJFgioj&F!2AHcRnzcm#PU$bjU!3#!I+f$dFi5;# z5NzdjMv%|sc@&cO><Msc#L8wSkZWWpQG=Q!fe$13T77{4&;ZG~??mj7TEuIK_hsmm ztx^f*1*(z#_lYxyH%tSi@X_G~!#=ns&0-K<X+3-O!$9Kh1?x8V(@>9>!c^zxkYn44 zUh>IEjqJajftInJd59;d6P5Z3qqMKVA|kgZf7#N2eXJ~)Xo*37NM~a-0DvdfTQn;P z$rpFj(PJ}(^u>kz((<6cam*4R`^?Z{QCcufE?CGR-%sQ@qJrP0l|S8r(b|?5X<3=< z08!Q_i-{~<z<16^9yo2I`n4%82I>qPBG<;*w22SYRLA~2A{0e@b~R|nZ@NzzQ)R0; zu?gD*!fG?Wu@IJ+=*Jf(%BKKOggjvGBW>b!q;+|&25EAh6L!EMN{n`KE$gK;*7OCG zW-WlUG%l58JR!-iEj4xJmbSr`W*jwMv9u=&g2-~<i!qg<cxe{7i}^hDoOAmiW@U2$ z9#X9O85}iGdrjg$4FL1}>2n15+(gZ(LSRHaoP4#lBE?~yFBIv|=>c;Hbq*2xyLO4w z@pbFN%WW-(K_)|v>K%NQhKL@s4dNU6120}HRdt0a&iSax=7$5PP9TQi<;?}MqzUZv z@zN-y*ep3BeO>H)6B9^f@`R|uI#{?4v|$j6$wg|q+`4KG)Qqv3=oJ>3?_%^~_c;ip z)J>(1b*;9^%PO_ae6@ZQY+O|NJ7(pm`EMNo!!<p_IVT`d$I)95#99!(&!|;^d&5^* zdl++EXUYI)kFrB$;81%E?WwY#`5FKo$+b^`*Z1PN`{s8J$f@j$dT`)Q=@km3yfC`R zM>3SHg@d^FB=C&r)!q;4Qg;_%=9lJq-Vu1A)8Si~bgb`~3G6l7gWM}N0Pi8mV5mzK z6ct=CezTL5!zW-`z`#E2T3Ks`f(U$DNe3)mm@{)j+Fjv1X-O?5;mP*w%Io+-4g!8z zkm-^r^#Ns!Lb{?!ADOwh)|86+ou8Zd$4@^1I~0J+*M{Zr9M)MBoR**vH+J@HOJQ<i z>g`4FHhuVC5I-*=*>?mlwnNR^Ue=Blq;%YwqigDWmwHi<LFQq%weXIRQZH|GYw6FE zk1zX#Tsnk=pI*egI6e9{k~FZfwyrt+&;u%uwAL9E-{6D7nz7v8`r2xvZ*-2wb!t0! z+!`M0^j+hf=T)?SyjSc>C8dY)%}+xA4Bmp?e2m+Z>p_vkJN`x*Xh|4_q{zAV0a_GN z!2C%BVEB&?!vD1|{#yiK_%jFLPa^;W)4xXmhJWNB%*@36M*u90^t6nh=>z|3`Tr?| z{4c5n|9Y2C9EAVM!~T3ihq9LSDm{wlk;;B9Jbo+!r)`?zDRGfNV`Oe<0BogT2vV7F zei31Ax#G)~b2M@n&;`)xkL38}n}=4Oqt&U`97S{WsG*b{$lk{7AZ@AsFHMCUeXK1P z?CJ>GiT$>LiC08^h?`UI@BunzAhwLelGmn`kgA1v9t)CEM^!s+=Zb+kgXr}PF~~o? zQ~K7KfE}wzb(?h8`nc)AwaLNHvJbx#bo?;bOlm0(LdYu8i0Vzrl;HFd8)A$qVq_Ij zaJ5ewvP{pT1Lk1D9-c&X_{Q9i*lQt?GmP8-7%OD=?g@>~i~r3d>5CS9yT=Eu=a5p0 z$^)c^qu+NC`s8kTh6!Xho*$e6$r0P8D)`ksZ*^{vo=83Nu3A!=w_pL8wEVBgy*;8D zj!y4neW32WX-BD!r{+I)6rt^%F+r4qJh}v0#ME4&U-QJ9G=qQ|Eo`QuiO!pH^{~!f ze#lm!g`vjGB1I$yo2#Q(i==CuDpM4b5@q3--yc=(0=jm2p<+>kGVTl;_Q8(_pe-2C z2l|Y%P+CT9Ue~M(SnRu`m<ij&Hr3}Pn)Pqw8t7qDb<bu6Lia&}jZuSJ5TLv^j)?>f zCtLw2G`e#Kf^?#|m7B?z!X}g4<3w_1h{4$0hU}i{!n3TtvR&#tY4Lj&waV)`Pm=>L z)-k!F53iV^QKvOGg>`o-b>t{*{;D5S(@8@ffSWr*MiNd@9(woO<mp~P<XC@_8QEa_ zxP-MZVhEET#P&itQUf1*Tx5`YFCFM9p-yCSOzuW`D0`Ct>kf3Enue@E8F{ZS(Kqy@ z@2bLoBj<nG#KTcRZyGLT<?45w&p<zw`tDGQnD7ChI}{G`*^coa9X$W*#{c&n<IfyC zKi@IfetY2mk%Q-dz5D+G&iFr#AOF86WdC`yN~QAuH7XQ>N6u#;rhQz+7u6;lOe!`V z^nL~fP_Rm>Z$X}<bmZeP6HS;hR$=+pkmE1LIBjk8e0F%c;f_PsH#40lM#JjN2j+!| z(HTOtM}<5bF7@1OjF+6trmDJbhZ8vT`i%DR6ZrZzH>lCECLmka)Qq^&&+tpt_s(~S z@kyG~ksE=HydoKXl>34HK&5~hFDu!BT$aD?{@d)y?C|fk%B9&xy0?tMD68-)Ca-(2 zZH&!e&>X$aBMgs~i!)C{LMPCbQ*%B9m6Tj|<Rn#ZAZO9mou%(+N&J~f1aCY9D`z<J z)e<3Y^#LX0$aWmG4^%d#bVG$+UuYlFcjR?KzP)$1bo3BBlm(Q8zX<&OHw^7or-~aQ zX%`fczdp{JziU<eM2vSVe4kM(oZuJN?%Z!B`D#^;NUq*FUMj2!p|9dt>uj}1mXvq# zLVWP6KXRge$R=!FHn(gX;&^4LeoL9m#$3pIqmSY+PA|Lc1<dc<L<J_qWgWvxjUh_p zlh!i*#)F~$k<=uLC9LADR>eQW*lu>y=gY=MJ`3N}uNeE}FLqEhFhc`LU(JUZKf^4# z=c%P$REz2?375zn+@*1R+^Af;#OpgsGZ(tlJb^_?iD!N43r``oj21Z<K;T+phZt9~ zjqA~cgenwN-Mg|EWf<0*^uhFHekgj6>5GE?AQ%*uPa~-f66&R?zcSYZW8JC@e@SY^ zQvuFhDtekmizAI&_JFqN%X+5=sm})jjJMK{+P)0l&YZ3<Ki}it`f}V4vELc@(K5al z;VSn?kj$493tV<lxN5Y!m6Q%s2MZlGsO(GiBLy&Suj9L&YWHz12$CEfF?`1ZEaPr9 z&l?ehR+L>|sHzB`CC`l#68U~T#8^w@jdKBj0s%Ol>64+qK>k(ay@w2ZK`Va8iO%d5 zk?aAdnFKEC)&Aqih5sfHh0X^@0bgOSqYfYw<!}Xj*lxEvsD&ZyqN<jg$!vJbcNNR< z+t2!CYZ4^#Sn){bC8sU&bTk}z&91;h-o1+lNhG702eb3W+FJ5iu7pC$yN?rdo2O7$ z1HsGbg<W$;smefo7C#Pe#%tr_5P3fET(U8fFc^AZC*W*^v~7)sDgI`t_ze)Kb6BqP z=a(LGV}fxI)V#A`IbOx1GbD-hC0NYYIn~y%e5)(mk%NcQ>5K+bBv3|QKa>}zA^VB7 zM^&r*I@c5%T3sNe?>JNvjIo4#+w~O&_oC-DRtTj9k3LIzVy5jk#CRfOJfXsU-p);X zA{Oz;AS!O;eqt8l3Iwz8!`+mt&~USF^Cw^2D6cIiJjqvZ3JD%~w%_3OT#1BSgGUe9 zgrdH>ms!ZHQu|SjkXjr301$@cMqa(I>Md@lN}}*a4cpI<K5Cqk*V&dv_nm~GW1kN9 zeq`Z@z#>Z?6Jf{3iCrif&|d~(=|$CN0vtN*YKNGc){}ejr3@-$=Sf1k7uP4hw@JVz zD4H|Xl(gdlq38~n@$ldxh<4nR1u{v&u(7dk2x{J!u`H_a>BuOJ0!cTuUc%8S^s^DW z>FG@|!SAhjGwTJ@NrySa?1T48`JO26Y*%dv7y!YJVGe9~kgr|TiN(TjPg<yd=&SG; zkFbP6mH~)xcm$YyRgg-q(@Iq#Id*d-N>aZQcGc@}9`z-DmO?&QALAM}$PPz@yB;r3 zzgIMKKBmghq@THOK?1lS)|ye+yE#@G#T5@Mhkod;e2Y!x7a%;pi0WrC=s!;3{I8w) z-(%39P2v1B1~D@H7K8rL6i#L)_CEsnyDx{C=@Zh*%=l;5GceFHG0}fg=x1jABLF65 z23mSHj!&cLpNs+hU#88BpNs)zU}OH{0a}r0<53wR*E~AD9(n~@lJio)q8ec&8nG4R zR0rQ*eT-8I8>uaPZd`uxJe&rt42shVDmgkjc9tK$Z(LpkONx#WuP#%!aSBTmil<`X ztgI8K*0Q#7dWGH@c$e!5c4K-eCJlQ}g)G+hPtROgJH`$_1^{FXP7W08n3pm8(`3Vp z-1`tCdrRG+%*GDfKi&e?t$Me=-v9J3<0~#0vzMofw5q3;`=MO0q+<yTj|J<tO%_?) zx>@exBsl%V-I2J`!e5FUFND{zaC>syLzeu*5jMLeRoqI?!{MD9B4`T>e_t7$k9<V- zrj--w6gRugxJ%=4-Z1-%EmIyz$=9cqln&y>Bh;)p<w5X;mNWF!H8&CR$hDV|9_N|b z2rOn44$UhgQ4v<rRwnxVbkHq(2mlYEA#iyCt8j+~@VwMB#*cM8%wOy_&|JC0vPdB4 zGzm*<ZmWz&42>Lq{&ig8TT)EuRU`f=7chk0{L8tusXq|h4QI-aYIXZ;vQ#`uA~|!G zlcJAq)_EaDSP5OwU%EIZB3fJ>;lR=s2Jix%AmLxBRFZ5&V*M#?%@QS2d}i8Sn^O1h zO^J&mdSFkv$G;TB1O+sr5R1$}wvFxfV`wo7Q17g+j}DTw^6955-E4G$P`V9$>jxiA zKLg(|qK<-P|CoJ9!4>%u!|MU8tB43I;DR2FfKS?tViFC}PmL)V@gskRlWkJF<xEGj zjgqftP_f~KLvv-u?er9+&rYJ{v^pK>+ALnRJWOR{M2zhv6HBx|^6)h^ZC)}{L_OYG zj>Vf#Zr9cvmyG+&bU%v0mcQibsXIM(O5P2K2Pb6=G?79ck_8FX4YErn-&-%OB*&Mv zVxT09MOgS13w4kqwXhtycg^=JBKM3!TZ@}jRRNA!iC?8x03`fQZkr?WVJ2m+5k4El zZK=P_oxRmdX!e8XLNkEv`z%fiuM}ZEtWpHIi|~NYH=`|$82HrdqIG|K*(-o<Vhv1h zlyZO0v}_kFOdF!9PG{bq%bcD8y&h<^&k)$I5ZEy%Z!P=f?5_jJuxGZM<dT;srg*(< z-!RCZx^_4nz1J<WT!!VH*X}eyV1L{~A>@o$pH4>7*H8YWMDdA(_e4@n!&!e79w~2< zR&aV;+mQBEH!UEHKP6st#pM^3v@pFrzHWJSe>~8@#BnygH%%sOqr5u?5=$#78_OHc zl(s9Bh<0x0b@m4FZRX#-P~Uf7=dL;%Enpp$(oHI!<+flu9uo%uOAMV8=@bJCi60u0 ziSk8c<aS-t9r%jPvM<RV%ixE90O0Yeiz+a^#l%s@Z*7ijmt7Ab9H8>U)W<*E2!^t* z1$P8ITZrA+1EQd|rpGr@K{&3TxQ#JVByMN!I2vZ06QEIwo6(`5F=sE1aEBd$3ak6B z;~}2C5LbNJ7iut}U^UdWfF1#f7o*+H>W~y1!HNg}Z1;rg(u+l&0HbvqzY&~z44Oz9 z>5+>Cdy59%#>Vr<S%yD!U?-eK7l<+@$NKdJD4+U52|Y6^n5K7<dF7FISrQOl#b7Z5 zsIo_S$q~Wnx88Tg6n&y`aEi)4QbGJjmC>1i<`GWP(;2phuMw)F9o>NM%n^3kEK0hD z0))<I4?ANKkxl!NW8~klO(ve4B5gZO;P4ijwV`ZnQ@X4!&M0x*)csoG`gVIr4j;+* zTrjkuWU8Bt*0COQ8P{_CVI7E|ITF+$-DWUV>jdbi{KmX??{)@s)T6Nx$7{aa#GWS@ z*0Mt)+R2YDoAK--T9y>T-e#DP;7-&%-OX8D(`=>|9~#*^ZQqHcDp8wijVFuVC_1tA zN5TOv3oV(G#|H5@MEP5|1pNehk*Du8kftiA2aoAOk4%XVZi<KQzsGy9QsD&e>B?3J zNUCf8mJJkh3)__-bggBEOB|2}j&5AlIK%inofDQ`6Z|m3diSofhx95S_tN!Uuzh`Z z!whJ#tU*$nS^+3l$(T>^E3j{a_R){EFlIM@J@63DQCF%uAfgYY%(Tk^15JKEo9Xb@ ze#*V>o6%p7UhmOLlyiKefG}aN4`V$s4t9itAqCrB1$$Y6I@0`za(NI=0J7UUQ_-Gq zR4>#ZlE^`r>LFduT+F%hP}{E|BcT|6ch~T32bDJE-vxT-@fb|ARv3X8o+|N_cpB>n z?^7x?8(I0PUX)Qu>y6F#r{u9iICPWpg1vXHW)k2w9^}vOt7~WGR7F?7UE_N_f4236 z-k0^5CSt!yjFPSlp3*-7=G|LWi!^tja3P;cQMOMY1D|bI*2w}354Kjzf2Vl+@eJ>} z-c0ui`C<HzLv{Zvg#H`(Vf?e9x}TFDmVc)XjQ?n;F7v-nulVl({@bqRfA@0!Zva^S z?n-84_)MknKZzIrxAg@7h5N~QI0G{)`=8PkPZhPl)rMYMI=biM5<Tj%LZ>!5e)j@e zIpF~2%+L*<F(j*cMBlVy?ac0{o#Eu2)Qjm*qg#*CF<#at+uQLJYQ+o{6NKxQ&r!vZ zL=8y?38@ScMkQ%kC#`#(Egc(n7$FzXX@z6KU7v;zkAyo^$CMOF2_F<at79qz%c!5c z1|oR^{W#)#@bOM0!^ov%-{1!K#TEBSsK)c@A(3*V=crZtUv|E^>Bh&#xSlT0DJi0e z@2v3g_jPBri!K^Gv-?Py&PX;cw&1xXrB?JDnIsz4PcTc|b`YngD`S1v80{&+Y^6@g z_f4F7%e?GwfT=jeTD%rNu%g7jq7wqW$tS5H{uTu7D-5hcSW~&{|1iPNfTLSGFz8=v zws4p_dUE+KvVf*^jVc=}Br#znjEkeNgc;f^x*okGD7IMyFKQ!o$vlKfldOX?$|T)T z<1E*|Wvl?^$4@(0>1>C5m~4w31+amITk%0W8weRuLq{#gs20NT>>Ur8u%a$o$r=|! zUgKT%Jo{wq7~<GNge9CpWESk0Av>?_G4Do}juaSOb~j)t0TFSzq+k3Br!)5f>8v0q znHXCLwK3KHufK%n$8yDW5maIVg!I0`whQ{chw<kaq+y`Cc%et+v&&N^JpNqfF#Q6W zY-&;dYP@mfD!P+G2NPe9p0G_I4)XEBt;yBsVtW{Fw0(tf$1T|$H%|q`bBzE5KJqkz z_=|;l{<|vg?FC{cu90MKQ9Jk!VYi7;kqFy6`1qOqaYUxeFS0gXj5Fji)m!6gKbxLp zUSYz(%ocAMR>A(!9CU4rkAOql;ZvSG642yqNraF?(8PSImLq_J5VQ5m86|Ef<INwy zC`dVWv`azL6!BpO$-Pc>(#ls3*TJ{+YV&1P_8>p~ca(~=N1<+YpI0G+z7(;B0hFpy zRHX~{vg)@xrT)Yz8=;UJq6_^wF!j|0ScvH%d6RI2%k#>G+i&{_l%JuQtZZPE#XDrg z_wAH`x{7v^=ANAk0lQ{=fW!q*lo5VnAQE;r`4I95Y#LJRMK-swG{B%_OqwVd_lm>T z1AN=z8DHX*6`ZvE=^RLYo!_{hcq%elrm=n`6`*wOR9eH~*ISYTqqM)je9E0FeTZl` zSXXiuoBKi#;wcPXhsk+P%k7HLTLI*QNZi-$lulAml*j&nIPBu-twFJ`O*D@ISg5Zl zkg0xa3QN~<-(XNzZ<CF%yq<wKhUDNP00@L<a+7F^6ET}{=sAr^*LUs-VnN1{bwdy( zD#HsoI|wimlD@vB=c&*&gK2T!H-1%zDx_k5(i17I(f4cGPqPNFazzBsPB=^oT$*96 zDTQ7a$4q#7?+}R+-OK?w192}6D3|8w<Vk7y37`mDh`5Q=PnCz&YJ#GoFB+KzR-U&Y z$b});_2EXFLexoB5@(kcX8=b5QqbsDMbuop0~j$=p_WmLeQRa`qhnbrT5~a=dc80l z!T-R*Rgu!(#(`S$Rtiav`lg8P^j4XskfK{$_^8nM*f}40w&Mpk{PYs(OJ=VvhD&f* z_Tar=i2--Yi0jmm;lJx5TK$fNdqCKQdobft7=r}X7Gej^;=^xie%@b)Vhgv!NBJ0` zu%|>Tmu!uHx4fr5v{(#&E{4T?NGo(D;qov$yFr)u{FS1tbm&>A8dCUs9_^eKcU^S^ z(sj!y2nRlNFYcS?{2TLFSl<0%KbA4Y?K%M<3pT`I3@Nr3;q>7RBiv<VA4|02h^dCx z?uEvt3j0CK^aLH-nHVI-vl2*1)*Mv0D3?c%iG|fp<t`gB4?{_stt$?82n-xjN?coY zdugt+pV0aO^ySwj)7)|2?%}Gk>Je2HD7tF(llW{l8`=7-=JWnH^)YX2Co8)-f}7UY zUNnFeR=ccLfsMTw0koTbk%0`kH%`U2M{~dGH>9hr_Zrtn_*NCS+s}gYA1EpqKT%XL z{;8sZiT?NC{F|bJ@t-Lw{(U~ce+Tg22Iqfw*8gt+nAw?W+1Wn@_^mYYIRMLFAA#{R z@!Y?=s{S_sOsq__EUcfEHW)t_mHcm=Df-v1_gRA@6D!L<m<|44#|6izW%L+b;y8On zBAUcLJ0<WrC%%L#yR07M>xDSQ-d%TuhJa9Jz+;1}nHZN7Qy#CAPiCGsFJEub__r(L zh&3yk!|^9N>8I<3(+0HBi%;~l-VZ!({Vkp!UzV1ZdQV5bUf+($pz)}6&bPari0Gc4 zCtIa(m@WSl)Sw0~rdlL1V=O*N*1hDq4*K!<jj{3zrgFtHJhz2~%y2@B)v_l#PHS`r z{<pk9tRe05BS_(!t5H5dy3smKp!a;`jk!poEsP<!{`rll$72aaq|$Z=U}M4L5?lvE z^B?lETE(&&>QbD*&Jpnma2U(yJKK-}`l4C*JP-r0_{Z#{6nRB_?{HD!dU%9B=Fv1C z8)Bre=GVtGw7pbA3(UvNVfu6Dl~xaIO0^e7DMUjTCcOe|FB$|pb*kf|ZG(9S+hg2c zzVqwYS8{d8?XGWcY`u+s!HZ;6klQ&wjAdgmXG<9qeO)kk^@NapkJ3F6Nlo6DbJ9FL z>b(t`GhLk7xv_D5;g$wLPqCe@xu`|?nc>pjOC5-j@f9W0l;v<Phd7{5AEdo@xwl#` z^^%<zkf`)v{c(c?mE1v+E_l%aZxg2MqH_1);)@p*?RZx|ipHQCyV6?SaS<cpGCN+P zS-~bS0o1+vxdjbtoE)pZmV$#z;<JF_{>7|wse+zQgpQlr00!t0&N*JPjnvgTdy79x zZt#g$8qhM^{6*ml_S`QOUN5zW`DF^s9TXz>kJe5kZUA^MqNBs4$JaJdzg`kKf|5gY zVHmcOMF&ii%VhCglr-5!-(lL50_$3+`n6+}QEY#G;aTh8E>OpWdFR=%kO&j&DN>0@ zOc3f3IIq(Ra|2XG+f4Tbo{*4g7-(`JWuN7E5(kBAR(-_40JK3q+%PbXOSS6|9f0UF z5zobR5d`&!rX;d_f;NmAF+AhqAo7vy8Tc+&b5(WLu<XDWv)E(*#Cc^%h?2|~xJMF2 zgQ<;Swhk90P9#x|n+$B9$;2F>wo}e`2>B$*6Nr3>v2PgY3`xKxe6vXOvD77Awe^XY z!DCr&Q&nUFYqb>tD&Ji=K%>w2FB*JTr76I4L$DzY@yO+ad^k9%JkYU@)1X#-)V5vj zO{TWMqr#*HS*S_e3P6iuz6LU6MEHoKBtAYtxk(`_K}4pXl@vMIj?#%V4@zUKK)BgF zTfGC)Y{egh_H}D{w<P%=-S)gRb1rvy8}8fw>Y7+dPY9g0!f?pnu`a31dAm;FZ^KJK zv?-I&yHIURy@_TTN9j`qgu#=UBF?-obhi{SN)?4UKSzIV<?9oc8M0#{HBc7^aEiwv zXjblzHo=vPng;*>@b*vPnMUi<C>*n6+qP}ncE`4D+w52!+qToOZCjn>UvtlWvSw%Q z)$?2X-{-k1<9ZLCs&S91x*;HN@R|0zn8X08*VJ_|S&4Q_1YqwVu41FyWgEFYkj{DQ zcTaL-OnY;uj=XM>^jwXZRM&HRn<&<mV1P&?5l8hKIq|_3Kh2<t&=h0fXohRzvZzjV z&1iq|@B$qYlM=`E;jgM(It_2C%(cqg3>Ziu6{MGiSGha*pjfTqg~8zJN2vC88c&>P zomLx`jH5Bfng#-U|J)&Ce>tS#Sv{Z0?$&=<h(b)5HI&8C2VTIyAfJP8d4g8Ib&OKV zL1!X_*+EJ}O`_4z3Ilf%RXdVfO<ZR0>P+~&w2}eEL-_SToIxtYes^B^PUL4{aW0yM zL-ZzX*HBTKG~4d@^r!{~sl=IHJc<rXFk8kiPvGCf$sQH;+?mC4`I3qYMn|L`q5<XW zh${Vw9Z{4vDIA4W1;gB(cx4PX7xzuW&UY)a-VBsQ-CY6E;S?B8yJBX0H}zrAx5E<^ z@(U7Y`X94-|M!>tUr3zk@3MJclK7vV7N-9!oA=NE{>5<qzm-S-doTFkGT2wyIu6Fa z9?mDLOU2HK!*|_L<+pB&4-B}x6`@c8Y7)=j#)UPs1Ht09^Vk#{irIKF)_41yEle3f zgmn%qEL@y=_^3=}Zq%n<<vXB=7^D~9SS(fLw?L>Q5&xuCF{r4sYP949_jMjReISjg z-)@Py<3Db9E)TH40d+y0nuj!a1joPCM<-jZe${*y8kb{J;jv;~SY|)eR+D9u_E{;` zLOQkUR9GW_zW3=24~XrFvg3lW(4K2dnRZp#QlHxbI2(LDyX?0>IxxscxmM0o<j+Oe z=%GAuX?g?{Pxk8qt5&0A$4mg5H^5%BM_5l6Wh&UMFBsy&(d7l0Ra;VpJ$?hWP<lYY zv<%5vaVtkT!D*AB)zOB)itZ{%ei&n!@cn$Xtus2aCLakwPyrx|J(Cf<1fxR){UDYr zKnt^HRti<d^#WpTx6>IA2>Y(r6`6=KBBLy-5UPcUVxo~WN23uoO!O+VO$JobP162G zw<f-U&k?JC4puq1l~a^+geV@pM?c2+_{r7b!#^1bqOE!Xr^=;GlOtHS`@X6t!j?C? zy@*z$h6>1`^+s%$q31L(`<wHCzySug6;41Ki?b~OE-mK?kAA+NJ4d&D`yrJDGz;0` zd~+x&;}$-fHwtdz!9~7;;Z4C?mn&ba0$4jh_?v4%C;L%w^q~is;Z5Hs78OZtz<#)Z zO%52|x9}qIlN%2(B*bF5d|&h$91e!*0A0NF=MaoXb;6H2WxAUZifg!{o{7H4<GdA_ zjy`r4m^rnr31)wOy38vNP|MqL7d5XKujxWoMU+-Qc*GwJ-sChMG7?7Jw?lb?I}S{O zh`ch+aMF?}(hd2A*U_nn-}{bHKnaB6!PVPDa&LV0VfR)p&((c{>e)%{-b79IFf46& zFnc0)kVKY4ARmKV8NTO+xm#}lSPU5-I;QEBA|S+Vd&F5*^(1&Z!~J4KyWr6A*S)Of zuaj&B&?**v;Ot<6fxX*LD}SDi$IFD-G@9I$o+#coPM}tVkU!L;X}?%eh0+LS59swO z9DZ5(`H`^d*<-cGEL>r)cAV-kE*=^W3O|@Hsf>BwPaIU$=!nZvYT<u2C!Qw&@{WkO zdfwpsG&0~Wo<@dB<UZ*Q7wj^T2c4JM;)vBkO#ZeTWe11rY<yuWozI4}WgmKzk_i_u zJmdL{_6$IsZ<fiWtcO38E=v9jR&$f%_YW0w#9)OgbVc3|$fK<fK@KGT0bKkz{;lT> zu7zsq9bu?2wiC=b@?y>)rX&MxP^2HVfsW`?rG7b})pfl0A@OWjbrMx24na@F@%RDm z*vdxGim|#37G$qZ6+~6-5bwEAAp{iNOA8D?I3c+?(D|unbnn`B&f+8a<zO(EXKDan zK%l=NbKouY$>Uabr4fbHXl#F#@8EFruq}H^fPNDCYhPKh^kUxtujiWs7L&*{M%u_S zLcC~6a7r);N~JrS89vs-$&x2|)zwz7(<p7BfL+^&MgWU*%i@r1o&K_FI%`p_&oyQ< zWYj7J5H~GT^yTm0Zu|xiUCohG6=&n5HK_`<DXx&gx7Bg5G%5r$Cu>6M9V-CP@e_o8 zVt+?p0NzJc#*j5tRQiVQ=>m#$l(;||zC`BylsU4qtY$-%Wo@L*6lk+$5I^4?5Y>=E z<JOB5Bh?;}*$RlmO74!%sfs4Fny{IOj4m(}Tiu>iEN<sfP~%e186<NJE%mnel;pUc z#E;t{f!by`>DOGtw;xH%?*Tx?yvrGS?hoxo)9lbL@hmm<ek-Qzzg6(R<@UKXcrt5e zOGb5I-Fhv4V6QJHZL|d`_*~kOVH!PZzj4C=FrUL+s`=UK*ck{@G`P-ljU8(N@j#Ux zc=8W(#q|6b5fg%|kTnPyJYV+Z?{bkB4>^UhX^HGhqsYiH*kTNt6^|ca-m&~)GDirS z`4LpCd--Bg4H#%g&mM>NV?u42&(l38#LVP+7*TP&8ND4)a(`AB=4}^pe}gI14j3S| zH%LkWG|hA6a8>*W^?(>tPQ`W<4vM+*w_5;JfG@o(&6dK5r8lgq=Op&ro6m%$MGs{O zn6#kDZ+elXpM++R3QzYGP<pty#Sw$R96RwS8r=8Ogy!2vUaj?Bp((~=tGDwKmI1(S zzvTOcywho2cH>a}i9$O=)(cAaY(f`hJ91b2`M(_w_{8O*nZ0m6J@0>8lZP@&@o517 zo61K6L$km;_X(u&#(g01qLWPwkVLA0%((E|e*q~|QrJGNcqnCtUH8%tBAgzfuvkZj zNiNULe)H(n-C}_X;0*qe>QK-mizJ0zP?>zdVsIko*SXh?hV4s++sbDE)+4>30&Y%x zJ=iqb1Yeypo$U?M*M{+Wgw#!}2YR~^9)dv1Qzr4cJ83M5@!;6H1)C@@bjFfj937%Z zje%j92t8*>Xble0cOj7`e^I~3DOnn0P*>49-+B5BH`Y29zUvz#I+@Z3iP=UmYSzCD z4hXPO@N2GUKcg*v-DQp^-3fBqNEvs?xbWw!P|9~&3H8D}O2eKHbpDS0Ue<ir(6{N2 zWu7;<YUTOgU&)>SG57d?)BeB8oxjaJekFJQ7&$QgXO%|(x<BOK0noG3GSPogX~fL- zcPC(BVy0zc{bB*hfBpR*bC)j>nAzEA8R@?qIxzn+wfGW&iH)6>nV#jV+#~ZJu9Pnk z7+L6PSs3WQdKO{&PeX%$DHNH%aB(m)F#L5@YNPr_>>4Yg?~|SZwS2|53Y7R)*a+YZ zZBKDb=96qaSZllnRJNZL)Gxvo+3#0edP&B^B3SE>gBb*&`?kF7O!q%0cL(7(btzF& z%*#_Vx$p~W#1q}pizG@DskLlQ^#YdOEh+;xY*55{ms!@v2)1U-nl*>rF|jd?)_EMa zR#52Kzk?w*!g1d~>_Lh3h57K^)p&E#F7H(9yf?YO?SiXJ^@@x)F6NEZCCI<KsvPIy zsaa+p^fsNQ)ii_~nyimo!EHNFZQm3YqumGvrp0?G`-KzC^2#lyXNwf4Nwj+Q3!7f& z0yF)<JesiM`oJt({>BD@J6ldHozQ^a&`hKs;f%^n5Qi&^885ca@46JzYF{J_n&Q&G z%%fh6G01$Hu@SMaAKWkF;yIqloE^5oR_7F{=yp5-YZJ_SE-3i(mR@FDX~gzY^-Q>k zEG&Mw9<2Yq>58-7S>_4hh1ibAcNXXQ9kzl!?oDAeW5>P-8jPm~#4@-(gw+O%iGDgi z5Hv1D3_i$DPz?Y2fx-b6W^IcD#JdL%POU`b+A>KLsuSD)2TI*3n27_<JddQGo@b13 z5-Uzsr?v47jU*UPFp#)U{)i~ml-G2^{;v%4Ta*k;nIK?Sw*ZLUQ_mIL4zM*o55s2R z^jAgt3&?N;Cdq*gemMW&Syg*M0Y5#?O47_BhBxr8ib#X_2<0p}UwZ@T7R{sF`=?}A zcySq55H=2G>+z(tYako0OAHS_cD&KBjDQt>WFd%8du~}Y-WX@UT0MdRvVDIW>uF^D zEw)nl2y2CXTw|_v*PC~fJOGsjWvP~BgEFE<=|pDfd}2Kt*T_#ApBEa<#YnRk7ldGY zjlywYdWF(4MLO3=cIjkF?k(Dn`e*l5JD!V{9NQPDxpQ;UKtJe2^dVA?`RX!yQs)-q zV>gE5MUKTtML1cf!=9i*oTT34JulCGM`SF-ZgdYXHAa+T_nhq2WL8<I7G3Mf0h%hJ zIUek4`REv0{8V||6}76J8VX{fnldc#6MbxYUCE*VSDrU45M1??-8%8ul2sq<CP7<` z4%Ek~lFA)LW|r*WanMn45>D8xy8tk$U2^LB1ep$vWP1RA(FG_vV$~l|)s%?J9<MP{ z7%I)Z&^{s@lFGdY5Rl-ZkRq>?5<W>Z0Iv)<E<>8A$5+p9fT3IdHr4TTB^8WomHYZV z@pG6?G@c7!zXe|Hn!1g|IOWI$){ua5Z4SN@@F+U$fK(fDsFyg<Lv%dSZ(V~N#z0a| z=t*cZk%0lWqHdU&yUIdo4HIs;e75vC6^!c(p?oW%=+u^^fFUbSImIZdg~&_*QN8j` z*rS$kp-(c-hQQv-N~ru6NuW;@<J`)3w~z3Xnz{#9O5Dvrk$CVko4Xii>5hhuI99!X z(>y;`?9TWZh!DglPx&<p{yoMQih;JDI5^TCC_Vx@EfongcmyrYQ60VH6@%do=M&j6 zub**rAzg!nOo*Kna?_s0Sr8sK1&O&xMt|p&1P9IPoT9IEe$c(VvZXVuG2@lP*<sGG zvLrLcG3&8W?v4KTaRDY)pA6|HEr^p?5pRoG^JSZsyv05$5G!?hhG<Rk^FZ$6<;}dI zuBy%H4V#T7j?xJObRmZI9>S^2Yq(hIxCZl#JXNZ1Xy|9q=4(y_3lv^)%xM>%aUk54 z?iT$5J8v+hqFjwVx;}I;v?nReIY;OX0vCW)ta(AC#`W?6?0SZ>p$tDA3vt#hL4EIU z(@7n+45V`}{g^HADK=Aa<tg3lhy)@i?zZhAup{hl`CM^p<4xBnc56y=^Om`%vSdBP zW&gqb*p(1?haP)2ir6S`w=!1~E~`>Jn(d6oi<bT=taOX*^9a}$pxZ6=3)W1k98f$D z<q_7pk(Wxam`INc83txg1pltsvUXh0-F)^c3#urdLf(#-6FoMd!uDl^{`?rM7bw1& zho}t@NKtQWAoG{K9vo>I7>=2);bC-SjsRfc@lHtfbh+&|^>OMhYW>+AT)bg+eBKsZ zVZU!9B&F^H5e{BH$Tv5G_++~B_Vn$#7TOaQBR4naZrE84QDS(JfPNThOzXF14k)AP zDXYTz$jQIiV-K8f2M`yw;aI_l5x8_>oS_V{e82f~2h!Oxs*PHQsUV*hZ}J4-7Q1qD zc1p(e@^%G32Dcu@bbky6HDHS}TLuNB;LY*Jq^Lv?Bil#Slf#$1|HA9$RBzlHY$#D{ zF-*Zrr)!mqDsVT@5Hk1$dB4sH+c?&W5Ug}3B|{P?f^DqNo#e6BlB%xxiwG*{;>UYJ zDeT<B)N$RB{}rWuZ_F=Fk#Y9tWELsI`SaXbiwgfxFYD2=RORcMMNUYfbAXRF*iYt* zR@ix5pOhi%VR?%=Spq<-`oz$DmVgHr)-zfyU|XJ6M-%L7!lv%u!(&^;C+$8t7ZN8E zRN0`}X3*V;hXL?ww!d*BSzPj6F4xY6(<9Hy>fmdgO=T;MD3CqSK2UJ#t7mR99rbe9 zaF17G8ObD42d22JJu%xUTXMi@c(k%OX361Z!aI|FVZj`KO$!lS2W@CPpWjFgTEcmh z825RQDR``8OC-sBDv0dPelKQ##pRJ)O;~4_p55fV`FNNa_a!j{O-ewP({U1>Ci{d# z!-El8c>Qk8yzvML{IOzv_rU|;@tJ_b7(8H<v70ti^5%w!WO^7*7AzY8$Zd`JX^U>l z*yilpe0kzqX&Q5l_XIbUBleOmIe2rMQ^v%yrdKcp{ZR_>jwL}MSucNvjZ4o-eH-;N zMDhN!l{>=+Tp)e9{|lkZ{1?s{<}aKx%zx{g`9kP2|KXfr{?D8<^ncoRzef1S*6Dww ztG___BR=yb0y7&6E%QH?ynKQ1pL%Ehk6y=Ez6#TD{C)jrw7ORHe@RB4r)qj2<amE| zlrqmJbGf;E$cX$k++1j<JN&hVN^A`W3CgLH>aA9Vlxfc1F7<v42X^eKg91EUw5^ZQ zxgtgT>?4nt7I4P!pWITZA~}PcR1pVzm(#~=j=GgfI4~}as`0ir&3phqCkmKuLS#bm z936hb#a?y4D=auxjyhC2S48BKI>(9`PFgl=nuf<<{w_7+iaMI2=Q-EdkEKFseD4i5 z05+t%v**HoqUI)eZ}??wq$_>Qsc{ujyH#s92f@&W3Kvkwhne$K`>?spf(t^Urjcdr zE|Ow9^hr#~^2mi4KrAzc468O|4g(^qz+hHp!A<;H5wXd4of@^l@P0PEMWnEa4GhXQ z+ygl+4p)$T0+S6U!2y$yxqz91d1X*35R4keR$<5FkpnX9>C<{-8Q+^%H@ze7tc%)Q z!un$b|1Ij0FQETA%p9>Z&{Hy56pN|`0et(i*S%P|Z>w`~Qr0NlP<8EY42)002z-4z zfb=J|h4DKymp`yV*rr|8hSPL~zYG~gu+(0l{l_M#CNM5BAM*A@D_l%57t?3ZP?Xkh z9w^hAb4{0hCp~@WghR=39{2l^;40ZiOb^qh0$V;ASFKz_*`YzBBahn-FvmnnGRH=c zIUzgHO*b8Ws6N51tf|ZP1<p|F!k+-W2g}cPIuqtNzHr5CP6#=KKE<GPN7D5(b|R#K zPC`?x6RyR2v#oAB*9ZDLexNMqaLF;S$E`k4QuNccxx<w`RGmT^Qq8lq$3r!24zTO( z0i|Xh1R*|roJ3UQYkuRSShvhwXuwze{#9qk>*`xJ!>~`aEm8?$?Th}p9XxhOg92w- z4d`g{^Q4d*kTiwg!%PXEcA}thiq70XdPN_O(nI&sRnh5Ixz}}yQIw&|?OmxaR?G5> zP7j=o<>RtnEScXI*>eQe@YdklMmVp73DfOV01o287zx^<>caIz2d!jTG80YM#Xmxc zJZz+oFsE;&RgXC%6?4t23B&i&Vn3z~v1U+$j(Qq##W=vweS2Btq$LTw-XZCRM+mvI zOx^o$IHMTBfRCZg#b6@JtF1y{z>M)u+ODApOfGc*He03`ju@ijR#~UE{Utj_XtIIJ z;ZZzcWc%T5;lxH!veDw9+g;<{g=U7E9e#3pb&A(CJY?Om?<WHKbHG~NVp~asGdUnu zmeOr;KpcrhTpqhBV=6v6Y%>H~ggMgq(w}n3+^m~(S{mU)9iTPpjN9hrgP(HsbOi;3 zTEzA*k4j3yu&pzpCgToij21Z{p5FH~s+?9pp*+rWOBjha8#b|MmGjUHM`uHM#KC38 zW1`L^ZK+oXH99Lz16{IU*at1SRMI+UohT;WoU@ZF;%oiBZjq-a&?qmWtYe@4>5yJV zC`(0ty*9U7J@^AJ;lL)IdW#OR2fnAX2R~dz=j^~deyCMZ1>H4r3+*!lxr!|MtaS_= z#JTxe3PmL=Ny29%<9qwdH?jG3E;{9gIEyBqtT9x^LI%ld(9wAtt&>9-U)DVPX3rNz z7b236VwF74fWD+PzIJ!6BJzlqbVXATCzT`0&S(U-4uoqYAfX-t!-B*Ce|)fVnmm7k z`80wG3UZR1iXLJ<X|`w<@_`-Rb5?<B#Jtp6rb(Eg)w@V|nu6>ble4Q5Q!0hWdB*ZR zLKI}|R#V_+$nTcxj?=v+qmCC_^E#Jc2Wu&BJM)9ix?*cK_-7KMNOx9D{^G+~Lztxa z#je>aH~NA>%$)M3TNyl6SgkvNYj_m)aKpa(twoaUiz0-*qGP7LF2gij{FcvSJ<s>* zQIa81MQw|<ib#{NK>kChcQDY8NdtK@p(lVPJ7YF!ahmXn-H=9ptS6k@^glSVS_<4u zd<JfBf(aKhtNq)Rdp2y<(&AJ!_PKi-KJ?wzGcht6<VK`>nE<q|-TeS+CNLuRta^7- zN*FFPs!NVQC%r)TTLD2tU_Az*9|J401mMy#eKD>!9@T`w8#6RPb|J_Id6ZJa`^5Q? z4M1nq@l<7PA+tmY`|nZwcl*kI<_LS)5J#Pm?Ds8dBVTIE5nYe~v&Y?m%QDKp_X0Yf z<De%CRq2qbA+tfl0e9nq)*6AZkwa@t<?U<y3Ofwp+rW?2Sh1QW-ct*U(kz<A`w8W| z!PH$(Aa|nSH&`r+ZdLNAUZNdpLxm`fIZd5i<Ks8o(++ZPQ$`UWPWBt7ntd3_bR%xD z*~x#D`ox$z&kmgMwpc_Y-pzv7_nWx%jHer8$F7EHM97(v!{aLGOGON@cX6@2vNDbS zdSi(ydtk$l{O|Z8w`F($u59$x7u~vLdbvSqpU*wrN@MCjx%;P}d)O95ROx!9?6Zr1 zyGkNB?x{!~U9W<m|9)H3s~WFopNu&1P2{ANQVDUci7(b88Q)<@RK%w6650E~+-^Vq zIrHuP^Fi-hHrdZ=j3l9o?>7P_Zr@m}>E@mn{n+Cdgni&1>ez7LHdiqg18#T=%f0iq zf52Y0Im>asCU3TU#<)9uK3opfGdrEB0ZojpY#~Km4AA2HTAa)F{eYI}fy@ifdHE44 z7Y66zShIAGL_CmhNZpuFxzEb83ErC!jU6b}S$@k7Tmgp9E_;_j)v4&T69DlE&9c0? z{FQ9`i?kQZ7ill%zfF66A=_B~n5!}WXK62bmOngEUnBf`*~aomPr}y-^c=LTtY7U> zqW{x0{Urhm3o|YKm$hmvf2!9nBV$a=v<w_yY)EEi|GQs-k&&5}g^~FyfIrpmR{#tg z^t5cOY+tJ1uS0A9Yu`7^SH5q0c8<UIa!op{vBGzqQMeJ4kqE<sh@Z}nC0M$DU#LyG zkK6A_s2QXXDK9h{w%ytQCD(}ILMpip211Q|f5iKF<3P_17u-)oN{GTat`&OcN5Y60 zlYjtCRFq|Wv!XI_*NT-v=jBGe;Yf#4HPs}(*4TE}MN1cYL<oRDo%~BYQiC{u<fcE) zzDN=Akz~8p;P3>2$ut}y2?>75>*R$nYGY#0MrT{IRcat3<Du=wi=Fmfs>O$H9Ih7% z;YJNWPmd2gX5)-XidgvptaLAP1-gc<ruLrB{~PYu#h5x@j@&HT`gzW)S=7DzaeToe zw&}<(R2=agzWi4z=I#;AI2~@cQm>ys%>3``TBy$2l{_u$Iyl*E(g8w5YiMY1eN<Q* z6$&e0wg!J(`E}$F^aH6Ty3bn6R;jL7mrp<=J<aCoo>YxrdZ2I>C|0jNl$SZXhS>xv zFpI6J%$Yj|ELPNv#cf`&VoAOgHzw_J?6(PZ;6>kAR*bXm*YrAZZ1V%P!lqIvLBeH| zD@YG2vcGs-PjBBX^-zHMJ90pzi6fnG_mJvy%LtkBz)L&i+`n1WpnEMt-#;O~mk<sw zm*$)lgFwK88!6l8oqazc*}k$}Lz_fHkODro;WPLc#Jgg!4Po;(r?GbKdz^C;Z{IqM zygQk+Pm>ul$eFTMx!S8*k3SL<?2>3fb^qzi!_0m+bQqb3DZ=a0);QeGl5(Y&q{Yu& zOF4&KRE>Em$bwQ<MY(QOD=)Ve%j+(2%(`G>tu>3$m%iHPU}3M3z1mm*XfNaq?tzoX zi*F$@XnE$)M9&i%Q@c5=5{StIAUI#SNeD{1zk3eg&fxAV$}c=xUrq?KX5uQA(M9rs zk$bUWs8=888F%;gfk<hF&%G1lCqW2L`LgwHOgHOGc^mwJDCjHE$IQcDAOdeB|A>&( zc`;Z1zLs`xW9aF4vz3ROFba{mHoYW|*Ty-F81R}m!RyQ^R6&aARy3stc$0BCfB&!| zk7~w5KhwDvJ`bmaN-5E)HM9;}I5H*p8c_mlzGzSoS;Y0T-CC7E$k;@gzMl<_I_sm0 z>J8&keSF(ZH9L=)WF7IXF+zXy;TY%We!UNna!Vaouwo))Y=in~4r86{7WS1k>K9|e z<v~?FM3S6`WxiKjbWCq#V=<uA(>YZ(ipj!yK29k+J55BP#QeorTWZ^dcl86^yO)B? zn=m8v`Fpq}9m=)fgVDrOd~}z`C8e9^95d;_dVn}?s}JDWY;pf6cu9}vYs?5zl1!}S z{Ti%o)OFZz%^8K@g$K)+X3h{Alp<snul#ahu#Sglf&koJQ}tg67gsP|n`wF=>FMUv zh$gsQgO1Oa6%KU9788Ziv6aBSnqmi&9!jdOZ@y&kpFY2t&1;@0R~O_i+4~c@3<AP6 zC_zZv5(Y?j*uiyYpL%@(CB_+3z934Lzc3%Od|^Ij`CpiiS^jtgWBJd_#~gpWfqf0| zZ_UU5+G_r902mqBXjwT}zNE>&@&5il`KbO6S~OX|Dw|{a51z+VrDC&0;k%}*@l#pE zi$f1*`SXP%IyFX{>Ky7E!>#b>@6Y25^kF7q?yi(#Z9;CoOQ|M7D?6*HsV(jO^r+RS zv?V+cr?@4C%$`IY;Wv`N=AaB0L8m&fDtEQfaQ7iJeA<?HTEOwDvUT4fyXrq|L}KrX z62T_pkidhATeeJT0eXcR4U$Fkd^S6@#9ssCCBiksoNw%ke+lL(6X&nQD<&M9i@WcJ zOW4Mvn^?a*eo-i0SAq%km)uZ2i=a^ExOFLr?2WUd4mRX*^i<A&Q_Y;?iY}p~muusZ z2d0a~iA=@m+Rn3KuEx{d(Af%LP^>vf&AF$OiS0TZA<`}6>4@*R4VJ3^Tq&|zvJS0c zziD5Vu-j~D7WU2UN_mo6=gNAQ&;K0*y4|&4o0%L04ie)eSR@Qzy6m5Xs3`J_0`8~W zPggvk5>3#lGZg?<qi{zcQh3H`p`)4zVM1e*7Zc~^S3|{PIn4LgF|@SN)ah?3upV{S zUMw7SxaE%=-DkF5OS8p8VzD{0_x@g*%}*18ug6`uk9@Sl9HT*svuF|)MA0_>RQQ5C zV5ZBy1$G0N#3St&s8`*?>&Mpf)l+3ma4$(PwG3+`OEeq5y^9)GQ1<E_57A`q`V~1h z-87C}WDM&`K~T3^=A@S{=pTn2D!8V^)P-GnQ3?@vFPd}8G$l(qQ){j+S!`_?)NxWF zZ`&i=xqgG&%%Pyz#&SJ^Tz2gs4!cT=aJar*xp6xGG%NsD8Z+4U6Go=GMeg8@AQ)mK zaVMEciR)tUGD>T)_1tgxEctM%2*pf~w=+_A;35AeBrZ94x$cJ11>?Zg36L&tY%{Cc zp-_NF;$F?)(l6s+%tNpA@IVBZ5nO$AjtrbU{S5z|INf3%mFN@8`llDV2HxP5y1^dE zKFbh*tt3HFG;EDMLAF?wL!kq&H?}<XN@!mQyM3f*Orle7c6h{kYWprlL}8x1Mnx8R zv~Wi0eRo0F!tt~UZJu~JKVZ)!F<Tx4-=VPn%9YG)A)phHIPdD4xO=b<wrdy%eAFn} zLG6`uWT=?#aV61z@g}mBb%H8MTx4DcwIEV}f8@lSp)lnHDzQ~O!6ZzyW5Ee7>|A3@ z_~g9qlbb5Y!P;eQGePFWrG<OmTHSgz7$$*-Ir21Nryr&fb}yAFQhcdfNG~rLJ)@TO zT{c$K#ray!YwQV6Y+#T6089^b7LN~VaxtL`tyH$mbEMz+J&VU(45p4DH5X<x(w#{; zF>SiZ_JdyB3&shEJb$<sBok@j3#J1x7>6!mP2&|X#+H)MX)Q4zE!Xd+tsuCn`ph;m z@G(CJ>qz2M#%K}78bdfH@Y_T{B+Z=^Ayn+zjcrUa%7{#Tz!wk$aY&P<sC97c`ib<5 z3btGtR;>8qO+Vg}+CDwWB#o^R;5oKijV*rR-hS6Gk>(BuNXl2QLc_XK6U_*OS_ZY> zl8WlfmL^l%pu|{2LuMVsEJ@z)^t7GDxTr@V+YUfldl2j?*BW#1Y6W@uf*<^WzzLOd zh7yzYmEQy#AjB4nJWVlci{|B+!&Vw@HXI4(X9u$&Ixzb4QW3~ek=hLSE}!*QrH6%= zyllo`u_0>GK*g=o#SEm4>b+MNzJX0VdX!S}&<6q*{&evuTf+Lr=w?jjfhD+K?$NiM zz*xezhyUG3s(u(yvsy!2OGA_#-)``f?0BG9R6L1<Fobl!L~(@OREqd=xM|@XI<Q4T z`U`qw{fn+U)-Ss5SpT-`j+OZjdSw0M4#)bRb>01ILHNG`U}j{eW%@_N^<M#4{<T~C z-vBWEqc()~OL}Deo3gzBwO@qwOJgy|UlU@Hx=ieUU8g$V)X+PHZ45<-9}e綔 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⪙*Th(Sh9) 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 literal 0 HcmV?d00001 diff --git a/main/minimime/mytest_files/mytest.c b/main/minimime/mytest_files/mytest.c new file mode 100644 index 0000000000..ccbeddc853 --- /dev/null +++ b/main/minimime/mytest_files/mytest.c @@ -0,0 +1,71 @@ +#include <stdlib.h> +#include <stdio.h> + +#include "mm.h" + +int main(int argc, char *argv[]) +{ + const char *filename = "mytest_files/ast_postdata3"; + MM_CTX *ctx; + struct mm_mimepart *part; + struct mm_content *cont; + + int res = 0; + const char *disp; + int i; + + mm_library_init(); + mm_codec_registerdefaultcodecs(); + + printf("\nThe test should run 2 times with the same results.\n\n"); + + for (i = 0; i < 2; i++) { + printf("\nTest run #%d ...\n", i + 1); + + if (!(ctx = mm_context_new())) { + printf("Failed to create MiniMIME context!\n\n"); + break; + } + + res = mm_parse_file(ctx, filename, MM_PARSE_LOOSE, 0); + if (res == -1) { + printf("Error parsing file %s\n\n", filename); + mm_context_free(ctx); + break; + } + + res = mm_context_countparts(ctx); + if (res != 3) { + printf("This file should have 3 parts, but parser says %d\n\n", res); + res = -1; + mm_context_free(ctx); + break; + } + + /* Part 2 is the file */ + if (!(part = mm_context_getpart(ctx, 2))) { + printf("Failed to get a reference to part 2 of the MIME data\n\n"); + res = -1; + mm_context_free(ctx); + break; + } + + /* This is where the problems are demonstrated. */ + cont = mm_mimepart_getcontent(part); + + if ((disp = mm_content_getdispositiontype(cont))) + printf("SUCCESS: Got the Content-Disposition: %s\n", disp); + else + printf("FAILURE: Could not get the Content-Disposition value!\n"); + + res = mm_mimepart_getlength(part); + if (res == 1279) + printf("SUCCESS: Got the correct value for the body length: %d\n\n", res); + else + printf("FAILURE: The parser says this MIME part has %d length, but it should be 1279\n\n", res); + + mm_context_free(ctx); + } + + exit(res); +} diff --git a/main/minimime/strlcat.c b/main/minimime/strlcat.c new file mode 100644 index 0000000000..2d2da0413f --- /dev/null +++ b/main/minimime/strlcat.c @@ -0,0 +1,70 @@ +/* $OpenBSD: strlcat.c,v 1.9 2003/03/14 14:35:29 millert Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char *rcsid = "$OpenBSD: strlcat.c,v 1.9 2003/03/14 14:35:29 millert Exp $"; +#endif /* LIBC_SCCS and not lint */ + +#include <sys/types.h> +#include <string.h> + +/* + * Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * If retval >= siz, truncation occurred. + */ +size_t +strlcat(char *dst, const char *src, size_t siz) +{ + register char *d = dst; + register const char *s = src; + register size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return(dlen + strlen(s)); + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +} diff --git a/main/minimime/strlcpy.c b/main/minimime/strlcpy.c new file mode 100644 index 0000000000..94785a309d --- /dev/null +++ b/main/minimime/strlcpy.c @@ -0,0 +1,66 @@ +/* $OpenBSD: strlcpy.c,v 1.6 2003/03/14 14:35:29 millert Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char *rcsid = "$OpenBSD: strlcpy.c,v 1.6 2003/03/14 14:35:29 millert Exp $"; +#endif /* LIBC_SCCS and not lint */ + +#include <sys/types.h> +#include <string.h> + +/* + * Copy src to string dst of size siz. At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ +size_t +strlcpy(char *dst, const char *src, size_t siz) +{ + register char *d = dst; + register const char *s = src; + register size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +} diff --git a/main/minimime/sys/CVS/Entries b/main/minimime/sys/CVS/Entries new file mode 100644 index 0000000000..138d3a245e --- /dev/null +++ b/main/minimime/sys/CVS/Entries @@ -0,0 +1,2 @@ +/mm_queue.h/1.1.1.1/Mon May 3 22:06:00 2004// +D diff --git a/main/minimime/sys/CVS/Repository b/main/minimime/sys/CVS/Repository new file mode 100644 index 0000000000..b81e7fdb9d --- /dev/null +++ b/main/minimime/sys/CVS/Repository @@ -0,0 +1 @@ +minimime/src/sys diff --git a/main/minimime/sys/CVS/Root b/main/minimime/sys/CVS/Root new file mode 100644 index 0000000000..4c379009cb --- /dev/null +++ b/main/minimime/sys/CVS/Root @@ -0,0 +1 @@ +:pserver:anonymous@cvs.minimime.berlios.de:/cvsroot/minimime diff --git a/main/minimime/sys/mm_queue.h b/main/minimime/sys/mm_queue.h new file mode 100644 index 0000000000..c85bb240c5 --- /dev/null +++ b/main/minimime/sys/mm_queue.h @@ -0,0 +1,503 @@ +/* $OpenBSD: queue.h,v 1.22 2001/06/23 04:39:35 angelos Exp $ */ +/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ + +/* + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + */ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +/* + * This file defines five types of data structures: singly-linked lists, + * lists, simple queues, tail queues, and circular queues. + * + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A simple queue is headed by a pair of pointers, one the head of the + * list and the other to the tail of the list. The elements are singly + * linked to save space, so elements can only be removed from the + * head of the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the + * list. A simple queue may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * A circle queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the list. + * A circle queue may be traversed in either direction, but has a more + * complex end of list detection. + * + * For details on the use of these macros, see the queue(3) manual page. + */ + +/* + * Singly-linked List definitions. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List access methods. + */ +#define SLIST_FIRST(head) ((head)->slh_first) +#define SLIST_END(head) NULL +#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_FOREACH(var, head, field) \ + for((var) = SLIST_FIRST(head); \ + (var) != SLIST_END(head); \ + (var) = SLIST_NEXT(var, field)) + +/* + * Singly-linked List functions. + */ +#define SLIST_INIT(head) { \ + SLIST_FIRST(head) = SLIST_END(head); \ +} + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + (elm)->field.sle_next = (slistelm)->field.sle_next; \ + (slistelm)->field.sle_next = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.sle_next = (head)->slh_first; \ + (head)->slh_first = (elm); \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + (head)->slh_first = (head)->slh_first->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + if ((head)->slh_first == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = (head)->slh_first; \ + while( curelm->field.sle_next != (elm) ) \ + curelm = curelm->field.sle_next; \ + curelm->field.sle_next = \ + curelm->field.sle_next->field.sle_next; \ + } \ +} while (0) + +/* + * List definitions. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List access methods + */ +#define LIST_FIRST(head) ((head)->lh_first) +#define LIST_END(head) NULL +#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_FOREACH(var, head, field) \ + for((var) = LIST_FIRST(head); \ + (var)!= LIST_END(head); \ + (var) = LIST_NEXT(var, field)) + +/* + * List functions. + */ +#define LIST_INIT(head) do { \ + LIST_FIRST(head) = LIST_END(head); \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ + (listelm)->field.le_next->field.le_prev = \ + &(elm)->field.le_next; \ + (listelm)->field.le_next = (elm); \ + (elm)->field.le_prev = &(listelm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + (elm)->field.le_next = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &(elm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ + (head)->lh_first = (elm); \ + (elm)->field.le_prev = &(head)->lh_first; \ +} while (0) + +#define LIST_REMOVE(elm, field) do { \ + if ((elm)->field.le_next != NULL) \ + (elm)->field.le_next->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = (elm)->field.le_next; \ +} while (0) + +#define LIST_REPLACE(elm, elm2, field) do { \ + if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ + (elm2)->field.le_next->field.le_prev = \ + &(elm2)->field.le_next; \ + (elm2)->field.le_prev = (elm)->field.le_prev; \ + *(elm2)->field.le_prev = (elm2); \ +} while (0) + +/* + * Simple queue definitions. + */ +#define SIMPLEQ_HEAD(name, type) \ +struct name { \ + struct type *sqh_first; /* first element */ \ + struct type **sqh_last; /* addr of last next element */ \ +} + +#define SIMPLEQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).sqh_first } + +#define SIMPLEQ_ENTRY(type) \ +struct { \ + struct type *sqe_next; /* next element */ \ +} + +/* + * Simple queue access methods. + */ +#define SIMPLEQ_FIRST(head) ((head)->sqh_first) +#define SIMPLEQ_END(head) NULL +#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) +#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) + +#define SIMPLEQ_FOREACH(var, head, field) \ + for((var) = SIMPLEQ_FIRST(head); \ + (var) != SIMPLEQ_END(head); \ + (var) = SIMPLEQ_NEXT(var, field)) + +/* + * Simple queue functions. + */ +#define SIMPLEQ_INIT(head) do { \ + (head)->sqh_first = NULL; \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (head)->sqh_first = (elm); \ +} while (0) + +#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.sqe_next = NULL; \ + *(head)->sqh_last = (elm); \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (0) + +#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (listelm)->field.sqe_next = (elm); \ +} while (0) + +#define SIMPLEQ_REMOVE_HEAD(head, elm, field) do { \ + if (((head)->sqh_first = (elm)->field.sqe_next) == NULL) \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +/* + * Tail queue definitions. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} + +/* + * tail queue access methods + */ +#define TAILQ_FIRST(head) ((head)->tqh_first) +#define TAILQ_END(head) NULL +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) +/* XXX */ +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) +#define TAILQ_EMPTY(head) \ + (TAILQ_FIRST(head) == TAILQ_END(head)) + +#define TAILQ_FOREACH(var, head, field) \ + for((var) = TAILQ_FIRST(head); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_NEXT(var, field)) + +#define TAILQ_FOREACH_REVERSE(var, head, field, headname) \ + for((var) = TAILQ_LAST(head, headname); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_PREV(var, headname, field)) + +/* + * Tail queue functions. + */ +#define TAILQ_INIT(head) do { \ + (head)->tqh_first = NULL; \ + (head)->tqh_last = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ + (head)->tqh_first->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (head)->tqh_first = (elm); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ + (elm)->field.tqe_next->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (listelm)->field.tqe_next = (elm); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) \ + (elm)->field.tqe_next->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ + (elm2)->field.tqe_next->field.tqe_prev = \ + &(elm2)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm2)->field.tqe_next; \ + (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ + *(elm2)->field.tqe_prev = (elm2); \ +} while (0) + +/* + * Circular queue definitions. + */ +#define CIRCLEQ_HEAD(name, type) \ +struct name { \ + struct type *cqh_first; /* first element */ \ + struct type *cqh_last; /* last element */ \ +} + +#define CIRCLEQ_HEAD_INITIALIZER(head) \ + { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } + +#define CIRCLEQ_ENTRY(type) \ +struct { \ + struct type *cqe_next; /* next element */ \ + struct type *cqe_prev; /* previous element */ \ +} + +/* + * Circular queue access methods + */ +#define CIRCLEQ_FIRST(head) ((head)->cqh_first) +#define CIRCLEQ_LAST(head) ((head)->cqh_last) +#define CIRCLEQ_END(head) ((void *)(head)) +#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) +#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) +#define CIRCLEQ_EMPTY(head) \ + (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) + +#define CIRCLEQ_FOREACH(var, head, field) \ + for((var) = CIRCLEQ_FIRST(head); \ + (var) != CIRCLEQ_END(head); \ + (var) = CIRCLEQ_NEXT(var, field)) + +#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ + for((var) = CIRCLEQ_LAST(head); \ + (var) != CIRCLEQ_END(head); \ + (var) = CIRCLEQ_PREV(var, field)) + +/* + * Circular queue functions. + */ +#define CIRCLEQ_INIT(head) do { \ + (head)->cqh_first = CIRCLEQ_END(head); \ + (head)->cqh_last = CIRCLEQ_END(head); \ +} while (0) + +#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm)->field.cqe_next; \ + (elm)->field.cqe_prev = (listelm); \ + if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm); \ + else \ + (listelm)->field.cqe_next->field.cqe_prev = (elm); \ + (listelm)->field.cqe_next = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm); \ + (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ + if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm); \ + else \ + (listelm)->field.cqe_prev->field.cqe_next = (elm); \ + (listelm)->field.cqe_prev = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.cqe_next = (head)->cqh_first; \ + (elm)->field.cqe_prev = CIRCLEQ_END(head); \ + if ((head)->cqh_last == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm); \ + else \ + (head)->cqh_first->field.cqe_prev = (elm); \ + (head)->cqh_first = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.cqe_next = CIRCLEQ_END(head); \ + (elm)->field.cqe_prev = (head)->cqh_last; \ + if ((head)->cqh_first == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm); \ + else \ + (head)->cqh_last->field.cqe_next = (elm); \ + (head)->cqh_last = (elm); \ +} while (0) + +#define CIRCLEQ_REMOVE(head, elm, field) do { \ + if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm)->field.cqe_prev; \ + else \ + (elm)->field.cqe_next->field.cqe_prev = \ + (elm)->field.cqe_prev; \ + if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm)->field.cqe_next; \ + else \ + (elm)->field.cqe_prev->field.cqe_next = \ + (elm)->field.cqe_next; \ +} while (0) + +#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ + CIRCLEQ_END(head)) \ + (head).cqh_last = (elm2); \ + else \ + (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ + if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ + CIRCLEQ_END(head)) \ + (head).cqh_first = (elm2); \ + else \ + (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ +} while (0) + +#endif /* !_SYS_QUEUE_H_ */ diff --git a/main/minimime/test.sh b/main/minimime/test.sh new file mode 100755 index 0000000000..1beca0b749 --- /dev/null +++ b/main/minimime/test.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# MiniMIME test cases + +[ ! -x ./tests/parse -o ! -x ./tests/create ] && { + echo "You need to compile the test suite first to accomplish tests" + exit 1 +} + +LD_LIBRARY_PATH=${PWD} +export LD_LIBRARY_PATH + +DIRECTORY=${1:-tests/messages} +FILES=${2:-"*"} + +TESTS=0 +F_ERRORS=0 +F_INVALID="" +M_ERRORS=0 +M_INVALID="" +for f in ${DIRECTORY}/${FILES}; do + if [ -f "${f}" ]; then + TESTS=$((TESTS + 2)) + echo -n "Running PARSER test for $f (file)... " + output=`./tests/parse $f 2>&1` + [ $? != 0 ] && { + echo "FAILED ($output)" + F_ERRORS=$((F_ERRORS + 1)) + F_INVALID="${F_INVALID} ${f} " + } || { + echo "PASSED" + } + echo -n "Running PARSER test for $f (memory)... " + output=`./tests/parse -m $f 2>&1` + [ $? != 0 ] && { + echo "FAILED ($output)" + M_ERRORS=$((M_ERRORS + 1)) + M_INVALID="${M_INVALID} ${f} " + } || { + echo "PASSED" + } + fi +done + +echo "Ran a total of ${TESTS} tests" + +if [ ${F_ERRORS} -gt 0 ]; then + echo "!! ${F_ERRORS} messages had errors in file based parsing" + echo "-> ${F_INVALID}" +fi +if [ ${M_ERRORS} -gt 0 ]; then + echo "!! ${F_ERRORS} messages had errors in memory based parsing" +fi + +unset LD_LIBRARY_PATH diff --git a/main/minimime/test/CVS/Entries b/main/minimime/test/CVS/Entries new file mode 100644 index 0000000000..1784810501 --- /dev/null +++ b/main/minimime/test/CVS/Entries @@ -0,0 +1 @@ +D diff --git a/main/minimime/test/CVS/Repository b/main/minimime/test/CVS/Repository new file mode 100644 index 0000000000..c4c9417ccf --- /dev/null +++ b/main/minimime/test/CVS/Repository @@ -0,0 +1 @@ +minimime/src/test diff --git a/main/minimime/test/CVS/Root b/main/minimime/test/CVS/Root new file mode 100644 index 0000000000..4c379009cb --- /dev/null +++ b/main/minimime/test/CVS/Root @@ -0,0 +1 @@ +:pserver:anonymous@cvs.minimime.berlios.de:/cvsroot/minimime diff --git a/main/minimime/tests/CVS/Entries b/main/minimime/tests/CVS/Entries new file mode 100644 index 0000000000..667ffb1c1f --- /dev/null +++ b/main/minimime/tests/CVS/Entries @@ -0,0 +1,4 @@ +/Makefile/1.1/Wed Jun 9 09:44:47 2004// +/create.c/1.1/Wed Jun 9 09:44:47 2004// +/parse.c/1.2/Thu Jun 24 07:25:34 2004// +D diff --git a/main/minimime/tests/CVS/Entries.Log b/main/minimime/tests/CVS/Entries.Log new file mode 100644 index 0000000000..9e493f7214 --- /dev/null +++ b/main/minimime/tests/CVS/Entries.Log @@ -0,0 +1 @@ +A D/messages//// diff --git a/main/minimime/tests/CVS/Repository b/main/minimime/tests/CVS/Repository new file mode 100644 index 0000000000..7a7de87468 --- /dev/null +++ b/main/minimime/tests/CVS/Repository @@ -0,0 +1 @@ +minimime/src/tests diff --git a/main/minimime/tests/CVS/Root b/main/minimime/tests/CVS/Root new file mode 100644 index 0000000000..4c379009cb --- /dev/null +++ b/main/minimime/tests/CVS/Root @@ -0,0 +1 @@ +:pserver:anonymous@cvs.minimime.berlios.de:/cvsroot/minimime diff --git a/main/minimime/tests/Makefile b/main/minimime/tests/Makefile new file mode 100644 index 0000000000..ae460c6b25 --- /dev/null +++ b/main/minimime/tests/Makefile @@ -0,0 +1,18 @@ +BINARIES=parse create +CFLAGS=-Wall -ggdb -g3 -I.. +LDFLAGS=-L.. +LIBS=-lmmime +CC=gcc + +all: parse create + +parse: parse.o + $(CC) -o parse parse.o $(LDFLAGS) $(LIBS) + +create: create.o + $(CC) -o create create.o $(LDFLAGS) $(LIBS) + +clean: + rm -f $(BINARIES) + rm -f *.o + rm -f *.core diff --git a/main/minimime/tests/create.c b/main/minimime/tests/create.c new file mode 100644 index 0000000000..a8ca479f14 --- /dev/null +++ b/main/minimime/tests/create.c @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * MiniMIME test program - create.c + * + * Creates a MIME message of the given MIME parts + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <getopt.h> +#include <err.h> + +#include "mm.h" + +const char *progname; + +void +usage(void) +{ + fprintf(stderr, + "MiniMIME test suite\n" + "USAGE: %s <part> [<part_2>[<part_N>[...]]]\n", + progname + ); +} + +void +print_error(void) +{ + fprintf(stderr, "ERROR: %s\n", mm_error_string()); +} + +int +main(int argc, char **argv) +{ + MM_CTX *ctx; + struct mm_mimepart *part; + char *data; + size_t length; + int i; + + progname = argv[0]; + + if (argc < 2) { + usage(); + exit(1); + } + + mm_library_init(); + + ctx = mm_context_new(); + + part = mm_mimepart_new(); + mm_context_attachpart(ctx, part); + mm_envelope_setheader(ctx, "From", "foo@bar.com"); + + for (i=1; i < argc; i++) { + part = mm_mimepart_fromfile(argv[i]); + if (part == NULL) { + print_error(); + exit(1); + } + mm_context_attachpart(ctx, part); + } + + if (mm_context_flatten(ctx, &data, &length, 0) == -1) { + print_error(); + exit(1); + } + + printf("%s", data); + + exit(0); +} diff --git a/main/minimime/tests/messages/CVS/Entries b/main/minimime/tests/messages/CVS/Entries new file mode 100644 index 0000000000..481ac7fda6 --- /dev/null +++ b/main/minimime/tests/messages/CVS/Entries @@ -0,0 +1,8 @@ +/test1.txt/1.1/Wed Jun 9 09:44:47 2004// +/test2.txt/1.1/Wed Jun 9 09:44:47 2004// +/test3.txt/1.1/Wed Jun 9 09:44:47 2004// +/test4.txt/1.1/Wed Jun 9 09:44:47 2004// +/test5.txt/1.1/Wed Jun 9 09:44:47 2004// +/test6.txt/1.1/Wed Jun 9 09:44:47 2004// +/test7.txt/1.1/Wed Jun 9 09:44:47 2004// +D diff --git a/main/minimime/tests/messages/CVS/Repository b/main/minimime/tests/messages/CVS/Repository new file mode 100644 index 0000000000..b91caac65f --- /dev/null +++ b/main/minimime/tests/messages/CVS/Repository @@ -0,0 +1 @@ +minimime/src/tests/messages diff --git a/main/minimime/tests/messages/CVS/Root b/main/minimime/tests/messages/CVS/Root new file mode 100644 index 0000000000..4c379009cb --- /dev/null +++ b/main/minimime/tests/messages/CVS/Root @@ -0,0 +1 @@ +:pserver:anonymous@cvs.minimime.berlios.de:/cvsroot/minimime diff --git a/main/minimime/tests/messages/test1.txt b/main/minimime/tests/messages/test1.txt new file mode 100644 index 0000000000..2c24b1972a --- /dev/null +++ b/main/minimime/tests/messages/test1.txt @@ -0,0 +1,50 @@ +Return-Path: <rezine@hannover.ccc.de> +X-Original-To: test@mistrust.net +Delivered-To: rezine@hannover.ccc.de +Received: from thinktank.niedersachsen.de (thinktank.niedersachsen.de [195.37.192.218]) + (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) + (Client did not present a certificate) + by gost.hannover.ccc.de (Postfix) with ESMTP id 90EDEBBF2 + for <test@mistrust.net>; Sun, 24 Aug 2003 16:05:29 +0200 (CEST) +Date: Sun, 24 Aug 2003 15:49:15 +0200 +From: Jann Fischer <rezine@hannover.ccc.de> +To: test@mistrust.net +Subject: Test +Message-Id: <20030824154915.12cb3f85.rezine@hannover.ccc.de> +Organization: Chaos Computer Club Hannover +X-Mailer: Who-Cares 5.23 +Mime-Version: 1.0 +Content-Type: multipart/encrypted; protocol="application/pgp-encrypted"; + boundary="=.2S1ZDSX8ir3lbt" + +--=.2S1ZDSX8ir3lbt +Content-Type: application/pgp-encrypted + +Version: 1 + +--=.2S1ZDSX8ir3lbt +Content-Type: application/octet-stream + +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.2.2 (OpenBSD) + +hQEOA3TvLJ6KBZLBEAP/cl4DiRH5+8S7/kP2BIVdDavHJ9cwHh8awGoyddhMKPJ3 +2558r8MKT0Etjpo649O5WUvT5Z2Jcp12+dTPlAC1kvoIjNNk8+Oe3JCREz/pXYnm +5ANSCThVYSS34jppgT3NsqiV8sQK3e+Nq/NY7SoKVAV37L0fU4HHozcDZfXqOLsE +AJgfxjRjjEazPHmgTTu8Pnt5gmlxyP35Yy0pl+gJmboG3Cn5WBcD/rrQf8oiwrB6 +Vak2Hk9TNU7hDO2IRolz4wUfkId47SK31PdhDLBnNPWn6LNWHd+G4hI97e+xeqLW +dpG7Li5CdP0gfuHx2ux9Y5buWVVtqPhdDUlRaIBfM7Fu0sENAeREANAtdPHn0yTf +V4T5NvImY3gXgLST5wNm3Ft+4nIDZrcnSy04x4faTLFBOcY95W0O1omILHyN5Ste +Le5NhXhQRKyl6ebXtIvEOsJOK4NT6JaUF20l4yvgf0AnetG9Pbzc37mRqmE6Fb8O +h/De3iqw7dexaQc+LaD3XTmvPyyDK2aI4cXOdc9WOzrWR7+9iEiY32SFsQWMRMZJ +GdKkGk22K2p7MPFaU3MHQ3Af+WCN4mRW8SurFxH1379Y5e1IPfTeL6OBkj8hHilX +Y+Y7523ADiStJsONIZPBXJVhZ/VAJ+jL+T1/Xht10VsJcWAY8A9tP+jNgyg8dh+J +JgWVchQOZipdftYwR7w5GkhL2Nc5NYBJBg4DFd9g2nnwuzaAKYO5kMTzEmm9KOYq +0DC5ukok4SGDwWPUIogNHmaSnFr723hYuJC7DwSxHXVG3VxxF78u1gzEnImOWRsf +1RzGb7b8Lf7Rj98H5cNiZ55BXAmidjm7WghCLsT2GvxviqQoRIJ2h/WHM0Bl2v3F +Dpa3N01p2NIIgQLRoXXyBCZTwGOH4y9nBj5PU7vzzSrMweHHt1BwHXcqItCyWFXX +2tj4//Dyw3Lw/L5xGxYRP1Q= +=fSLd +-----END PGP MESSAGE----- + +--=.2S1ZDSX8ir3lbt-- diff --git a/main/minimime/tests/messages/test2.txt b/main/minimime/tests/messages/test2.txt new file mode 100644 index 0000000000..2c24b1972a --- /dev/null +++ b/main/minimime/tests/messages/test2.txt @@ -0,0 +1,50 @@ +Return-Path: <rezine@hannover.ccc.de> +X-Original-To: test@mistrust.net +Delivered-To: rezine@hannover.ccc.de +Received: from thinktank.niedersachsen.de (thinktank.niedersachsen.de [195.37.192.218]) + (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) + (Client did not present a certificate) + by gost.hannover.ccc.de (Postfix) with ESMTP id 90EDEBBF2 + for <test@mistrust.net>; Sun, 24 Aug 2003 16:05:29 +0200 (CEST) +Date: Sun, 24 Aug 2003 15:49:15 +0200 +From: Jann Fischer <rezine@hannover.ccc.de> +To: test@mistrust.net +Subject: Test +Message-Id: <20030824154915.12cb3f85.rezine@hannover.ccc.de> +Organization: Chaos Computer Club Hannover +X-Mailer: Who-Cares 5.23 +Mime-Version: 1.0 +Content-Type: multipart/encrypted; protocol="application/pgp-encrypted"; + boundary="=.2S1ZDSX8ir3lbt" + +--=.2S1ZDSX8ir3lbt +Content-Type: application/pgp-encrypted + +Version: 1 + +--=.2S1ZDSX8ir3lbt +Content-Type: application/octet-stream + +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.2.2 (OpenBSD) + +hQEOA3TvLJ6KBZLBEAP/cl4DiRH5+8S7/kP2BIVdDavHJ9cwHh8awGoyddhMKPJ3 +2558r8MKT0Etjpo649O5WUvT5Z2Jcp12+dTPlAC1kvoIjNNk8+Oe3JCREz/pXYnm +5ANSCThVYSS34jppgT3NsqiV8sQK3e+Nq/NY7SoKVAV37L0fU4HHozcDZfXqOLsE +AJgfxjRjjEazPHmgTTu8Pnt5gmlxyP35Yy0pl+gJmboG3Cn5WBcD/rrQf8oiwrB6 +Vak2Hk9TNU7hDO2IRolz4wUfkId47SK31PdhDLBnNPWn6LNWHd+G4hI97e+xeqLW +dpG7Li5CdP0gfuHx2ux9Y5buWVVtqPhdDUlRaIBfM7Fu0sENAeREANAtdPHn0yTf +V4T5NvImY3gXgLST5wNm3Ft+4nIDZrcnSy04x4faTLFBOcY95W0O1omILHyN5Ste +Le5NhXhQRKyl6ebXtIvEOsJOK4NT6JaUF20l4yvgf0AnetG9Pbzc37mRqmE6Fb8O +h/De3iqw7dexaQc+LaD3XTmvPyyDK2aI4cXOdc9WOzrWR7+9iEiY32SFsQWMRMZJ +GdKkGk22K2p7MPFaU3MHQ3Af+WCN4mRW8SurFxH1379Y5e1IPfTeL6OBkj8hHilX +Y+Y7523ADiStJsONIZPBXJVhZ/VAJ+jL+T1/Xht10VsJcWAY8A9tP+jNgyg8dh+J +JgWVchQOZipdftYwR7w5GkhL2Nc5NYBJBg4DFd9g2nnwuzaAKYO5kMTzEmm9KOYq +0DC5ukok4SGDwWPUIogNHmaSnFr723hYuJC7DwSxHXVG3VxxF78u1gzEnImOWRsf +1RzGb7b8Lf7Rj98H5cNiZ55BXAmidjm7WghCLsT2GvxviqQoRIJ2h/WHM0Bl2v3F +Dpa3N01p2NIIgQLRoXXyBCZTwGOH4y9nBj5PU7vzzSrMweHHt1BwHXcqItCyWFXX +2tj4//Dyw3Lw/L5xGxYRP1Q= +=fSLd +-----END PGP MESSAGE----- + +--=.2S1ZDSX8ir3lbt-- diff --git a/main/minimime/tests/messages/test3.txt b/main/minimime/tests/messages/test3.txt new file mode 100644 index 0000000000..082b6fb61a --- /dev/null +++ b/main/minimime/tests/messages/test3.txt @@ -0,0 +1,12 @@ +From: Jann Fischer <rezine@criminology.de> +To: cipherlist <cipherlist@mistrust.net> +Subject: Foobar +Date: blahblah +MIME-Version: 1.0 (MiniMIME) +Content-Type: multipart/mixed; boundary="abcd" + +--abcd +Content-Type: plain/text; + +This is a test :-> +--abcd-- diff --git a/main/minimime/tests/messages/test4.txt b/main/minimime/tests/messages/test4.txt new file mode 100644 index 0000000000..a08246939d --- /dev/null +++ b/main/minimime/tests/messages/test4.txt @@ -0,0 +1,168 @@ +X-Envelope-From: <511-bounces@hannover.ccc.de> +X-Envelope-To: <rezine@criminology.de> +X-Delivery-Time: 1070263752 +Received: from gost.hannover.ccc.de (hannover.ccc.de [62.48.71.164]) + by mailin.webmailer.de (8.12.10/8.12.10) with ESMTP id hB17TAUR020052 + for <rezine@criminology.de>; Mon, 1 Dec 2003 08:29:10 +0100 (MET) +Received: from localhost.hannover.ccc.de (unknown [127.0.0.1]) + by gost.hannover.ccc.de (Postfix) with ESMTP + id 092C8BC81; Mon, 1 Dec 2003 08:29:23 +0100 (CET) +X-Original-To: 511@hannover.ccc.de +Delivered-To: 511@hannover.ccc.de +Received: from sbapp3 (unknown [211.157.36.9]) + by gost.hannover.ccc.de (Postfix) with ESMTP id 3F93ABC7C + for <511@hannover.ccc.de>; Mon, 1 Dec 2003 08:29:12 +0100 (CET) +From: "Vanessa Lintner" <reply@seekercenter.net> +To: 511@hannover.ccc.de +Date: Mon, 1 Dec 2003 15:30:57 +0800 +X-Priority: 3 +X-Library: Indy 8.0.25 +Message-Id: <20031201072912.3F93ABC7C@gost.hannover.ccc.de> +Subject: [CCC511] http://lists.hannover.ccc.de +X-BeenThere: 511@hannover.ccc.de +X-Mailman-Version: 2.1.2 +Precedence: list +Reply-To: Vanessa Lintner <vanessa@seekercenter.net>, + Oeffentliche Mailingliste des C3H <511@hannover.ccc.de> +List-Id: Oeffentliche Mailingliste des C3H <511.hannover.ccc.de> +List-Unsubscribe: <http://hannover.ccc.de/mailman/listinfo/511>, + <mailto:511-request@hannover.ccc.de?subject=unsubscribe> +List-Post: <mailto:511@hannover.ccc.de> +List-Help: <mailto:511-request@hannover.ccc.de?subject=help> +List-Subscribe: <http://hannover.ccc.de/mailman/listinfo/511>, + <mailto:511-request@hannover.ccc.de?subject=subscribe> +Content-Type: multipart/mixed; boundary="===============14807035762661644==" +Sender: 511-bounces@hannover.ccc.de +Errors-To: 511-bounces@hannover.ccc.de + +--===============14807035762661644== +Content-Type: text/html; + +<html> +<head> +<title></title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<style type="text/css"> +.stbtm { + BACKGROUND-COLOR:#cecbde; BORDER-BOTTOM: #665b8e 1px solid; BORDER-LEFT: #ffffff 1px solid; BORDER-RIGHT: #665b8e 1px solid; BORDER-TOP: #ffffff 1px solid; COLOR: #000000; FONT-SIZE: 12pt; HEIGHT: 26px; WIDTH: 120px; clip: rect( )} +.stedit { + background-color:#484C68; white-space: nowrap; border: #000000; BORDER-BOTTOM: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid; BORDER-RIGHT: #ffffff 1px solid; BORDER-TOP: #ffffff 1px solid; FONT-SIZE: 10pt; color: #CCCCCC; font-weight: bold} + +</style> +</head> +<BODY leftMargin=0 onload="" topMargin=0 marginheight="0" marginwidth="0" bgcolor="#FFFFFF"> + <table border="0" cellspacing="0" cellpadding="0" width="580"> + <tr> + <td width="20" rowspan="2"> </td> + <td colspan="3"> + <table border="0" cellspacing="0" cellpadding="0" align="left" width="560"> + <tr> + <td width="330" height="307"> + <table width="330" border="0" cellspacing="0" cellpadding="0" background="http://www.imagespool.com/skbmp/letter_01.gif" height="307"> + <tr> + <td> + <p> <font face=Arial size=2> </font> <font face=Arial size=2><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000">Hello,<br> + <br> + I have visited <a href='http://lists.hannover.ccc.de'>lists.hannover.ccc.de</a> + and noticed that your website is not listed on some search + engines. I am sure that through our service the number of + people who visit your website will definitely increase. + <a target=_blank href="http://www.seekercenter.net/index.php">SeekerCenter</a> + is a unique technology that instantly submits your website + to over 500,000 search engines and directories -- a really + low-cost and effective way to advertise your site. For more + details please go to <a target=_blank href="http://www.seekercenter.net/index.php">SeekerCenter.net</a>.<br> + <br> + Give your website maximum exposure today!<br> + Looking forward to hearing from you.<br> + <br> + </font></font> + <table border=0 width=100%> + <tr> + <td width=50%> <font face="Arial" color="#000000" size="2">Best + Regards,<br> + Vanessa Lintner<br> + Sales & Marketing <br> + <a target=_blank href="http://www.seekercenter.net/index.php">www.SeekerCenter.net</a></font> + <TD><td width=50%> + <div align="center" valign=middle> + <form target=_blank action=http://www.seekercenter.net method=POST> + <input type="submit" name="Submit" value="Signup Now!!!" class="stbtm"> + </form> + </div> + </TD> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td width="250" height="64" valign="middle"> + <table width="230" border="0" cellspacing="0" cellpadding="0"> + <tr> + <td colspan="3" height="2"></td> + </tr> + <tr> + <td colspan="3"><img src="http://report.imagespool.com/report_email.php?s=1&e=511@hannover.ccc.de" border=0 width=0 height=0> + <p><img src="http://www.imagespool.com/skbmp/letter_04.gif" height="12"></p> + </td> + </tr> + <tr> + <td colspan="3"><img src="http://www.imagespool.com/skbmp/letter_05.gif" height="127"><img src="http://ww2.imagespool.com/1/9/b/0r066.jpg" width="177" height="127"><img src="http://www.imagespool.com/skbmp/letter_07.gif" width="33" height="127"></td> + </tr> + <tr> + <td colspan="3" height="92" background="http://www.imagespool.com/skbmp/letter_08.gif" valign="bottom"> + <table width="230" border="0" cellspacing="0" cellpadding="0" height="92"> + <tr> + <td width="36" height="43"> </td> + <td width="157" height="43"> </td> + <td width="134" height="43"> </td> + </tr> + <tr> + <td width="36" height="2"> </td> + <td width="157" height="2"> </td> + <td width="134" height="2"> </td> + </tr> + </table> + </td> + </tr> + <tr> </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td colspan="3"> + <table width="560" border="0" cellspacing="0" cellpadding="1" bordercolor="0"> + <tr> + <td> </td> + </tr> + <tr> + <td bgcolor="#EFEFEF"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">You + are receiving this email because you opted-in to receive special + offers through a partner website. If you feel that you received + this email in error or do not wish to receive additional special + offers, please enter your email address here and click the button + of "Remove Me": <a href="http://www.seekercenter.net/remove.php?email=511@hannover.ccc.de"> + <img src="http://www.imagespool.com/skbmp/removeme.gif" width="73" height="17" border="0"></a> + </font></td> + </tr> + </table> + </td> + </tr> + </table> +</body> +</html> + +--===============14807035762661644== +Content-Type: text/plain; charset="iso-8859-1" +MIME-Version: 1.0 +Content-Transfer-Encoding: quoted-printable +Content-Disposition: inline + +_______________________________________________ +511 mailing list +511@hannover.ccc.de +--===============14807035762661644==-- diff --git a/main/minimime/tests/messages/test5.txt b/main/minimime/tests/messages/test5.txt new file mode 100644 index 0000000000..5e4cdb17df --- /dev/null +++ b/main/minimime/tests/messages/test5.txt @@ -0,0 +1,44 @@ +Return-Path: <rezine@criminology.de> +X-Original-To: rezine@mistrust.net +Delivered-To: rezine@hannover.ccc.de +Received: from thinktank.niedersachsen.de (thinktank.niedersachsen.de [195.37.192.218]) + (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) + (Client did not present a certificate) + by gost.hannover.ccc.de (Postfix) with ESMTP id 79E9BBC7C + for <rezine@mistrust.net>; Wed, 24 Dec 2003 13:35:36 +0100 (CET) +Received: from thinktank.niedersachsen.de (localhost [127.0.0.1]) + by thinktank.niedersachsen.de (8.12.9/8.12.2) with SMTP id hBOCZBFU029588 + for <rezine@mistrust.net>; Wed, 24 Dec 2003 13:35:11 +0100 (CET) +Date: Wed, 24 Dec 2003 13:35:11 +0100 +From: Jann Fischer <rezine@criminology.de> +To: rezine@mistrust.net +Subject: Test +Message-Id: <20031224133511.5f4b6d9b.rezine@criminology.de> +X-Mailer: Who Cares 5.23 +Mime-Version: 1.0 +Content-Type: multipart/mixed; + boundary="Multipart_Wed__24_Dec_2003_13:35:11_+0100_00148800" + +This is a multi-part message in MIME format. + +--Multipart_Wed__24_Dec_2003_13:35:11_+0100_00148800 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Test + +-- +Be careful who you follow. +0x6D839821 | FA8C 3663 9906 D8C3 AC16 F7C4 66E0 F351 6D83 9821 + +--Multipart_Wed__24_Dec_2003_13:35:11_+0100_00148800 +Content-Type: application/octet-stream; + name="bar.c" +Content-Disposition: attachment; + filename="bar.c" +Content-Transfer-Encoding: base64 + +I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkCm1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CgkJ +cHJpbnRmKCIlc1xuIiwgYXJndlswXSk7Cn0K + +--Multipart_Wed__24_Dec_2003_13:35:11_+0100_00148800-- diff --git a/main/minimime/tests/messages/test6.txt b/main/minimime/tests/messages/test6.txt new file mode 100644 index 0000000000..fb4e7a14cd --- /dev/null +++ b/main/minimime/tests/messages/test6.txt @@ -0,0 +1,12 @@ +From: Me +Date: Foobar +To: There +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="abcde" + +--abcde +Content-Type: text/plain + +Blah blah +Blah +--abcde-- diff --git a/main/minimime/tests/messages/test7.txt b/main/minimime/tests/messages/test7.txt new file mode 100644 index 0000000000..1cda11e3f8 --- /dev/null +++ b/main/minimime/tests/messages/test7.txt @@ -0,0 +1,64 @@ +Return-Path: MAILER-DAEMON +Received: from chaos.verfassungsschutz.de (localhost [IPv6:::1]) + by chaos.verfassungsschutz.de (8.12.7/8.12.2) with ESMTP id h2EKV1oM031761 + for <jfi@chaos.verfassungsschutz.de>; Fri, 14 Mar 2003 21:31:18 +0100 (CET) +Received: from localhost (localhost) + by chaos.verfassungsschutz.de (8.12.7/8.12.2/Submit) id h2BNU1vr029177; + Wed, 12 Mar 2003 00:35:01 +0100 (CET) +Date: Wed, 12 Mar 2003 00:35:01 +0100 (CET) +From: Mail Delivery Subsystem <MAILER-DAEMON@chaos.verfassungsschutz.de> +Message-Id: <200303112335.h2BNU1vr029177@chaos.verfassungsschutz.de> +To: jfi@chaos.verfassungsschutz.de +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="h2BNU1vr029177.1047425701/chaos.verfassungsschutz.de" +Subject: Warning: could not send message for past 4 hours +Auto-Submitted: auto-generated (warning-timeout) + +This is a MIME-encapsulated message + +--h2BNU1vr029177.1047425701/chaos.verfassungsschutz.de + + ********************************************** + ** THIS IS A WARNING MESSAGE ONLY ** + ** YOU DO NOT NEED TO RESEND YOUR MESSAGE ** + ********************************************** + +The original message was received at Tue, 11 Mar 2003 20:18:36 +0100 (CET) +from jfi@localhost + + ----- Transcript of session follows ----- +451 4.4.1 reply: read error from localhost +rezine@kommunism.us... Deferred: Connection timed out with localhost +Warning: message still undelivered after 4 hours +Will keep trying until message is 5 days old + +--h2BNU1vr029177.1047425701/chaos.verfassungsschutz.de +Content-Type: message/delivery-status + +Reporting-MTA: dns; chaos.verfassungsschutz.de +Arrival-Date: Tue, 11 Mar 2003 20:18:36 +0100 (CET) + +Final-Recipient: RFC822; rezine@kommunism.us +Action: delayed +Status: 4.4.2 +Last-Attempt-Date: Wed, 12 Mar 2003 00:35:01 +0100 (CET) +Will-Retry-Until: Sun, 16 Mar 2003 20:18:36 +0100 (CET) + +--h2BNU1vr029177.1047425701/chaos.verfassungsschutz.de +Content-Type: message/rfc822 + +Return-Path: <jfi> +Received: (from jfi@localhost) + by chaos.verfassungsschutz.de (8.12.7/8.12.2/Submit) id h2BJIawm025679 + for rezine@kommunism.us; Tue, 11 Mar 2003 20:18:36 +0100 (CET) +Date: Tue, 11 Mar 2003 20:18:36 +0100 (CET) +From: Jann Fischer <jfi> +Message-Id: <200303111918.h2BJIawm025679@chaos.verfassungsschutz.de> +To: rezine@kommunism.us +Subject: Test + +Test + +--h2BNU1vr029177.1047425701/chaos.verfassungsschutz.de-- + diff --git a/main/minimime/tests/parse.c b/main/minimime/tests/parse.c new file mode 100644 index 0000000000..805bd2cb18 --- /dev/null +++ b/main/minimime/tests/parse.c @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2004 Jann Fischer. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * MiniMIME test program - parse.c + * + * Parses any given messages + */ +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <getopt.h> +#include <err.h> + +#include "mm.h" + +const char *progname; + +void +usage(void) +{ + fprintf(stderr, + "MiniMIME test suite\n" + "Usage: %s [-m] <filename>\n\n" + " -m : use memory based scanning\n\n", + progname + ); + exit(1); +} + +int +main(int argc, char **argv) +{ + MM_CTX *ctx; + struct mm_mimeheader *header, *lastheader = NULL; + struct mm_mimepart *part; + struct mm_content *ct; + int parts, i; + struct stat st; + int fd; + char *buf; + int scan_mode = 0; + + progname = strdup(argv[0]); + + while ((i = getopt(argc, argv, "m")) != -1) { + switch(i) { + case 'm': + scan_mode = 1; + break; + default: + usage(); + } + } + + argc -= optind; + argv += optind; + + if (argc < 1) { + usage(); + } + +#ifdef __HAVE_LEAK_DETECTION + /* Initialize memory leak detection if compiled in */ + MM_leakd_init(); +#endif + + /* Initialize MiniMIME library */ + mm_library_init(); + + /* Register all default codecs (base64/qp) */ + mm_codec_registerdefaultcodecs(); + + do { + /* Create a new context */ + ctx = mm_context_new(); + + /* Parse a file into our context */ + if (scan_mode == 0) { + i = mm_parse_file(ctx, argv[0], MM_PARSE_LOOSE, 0); + } else { + if (stat(argv[0], &st) == -1) { + err(1, "stat"); + } + + if ((fd = open(argv[0], O_RDONLY)) == -1) { + err(1, "open"); + } + + buf = (char *)malloc(st.st_size); + if (buf == NULL) { + err(1, "malloc"); + } + + if (read(fd, buf, st.st_size) != st.st_size) { + err(1, "read"); + } + + close(fd); + buf[st.st_size] = '\0'; + + i = mm_parse_mem(ctx, buf, MM_PARSE_LOOSE, 0); + } + + if (i == -1 || mm_errno != MM_ERROR_NONE) { + printf("ERROR: %s at line %d\n", mm_error_string(), mm_error_lineno()); + exit(1); + } + + /* Get the number of MIME parts */ + parts = mm_context_countparts(ctx); + if (parts == 0) { + printf("ERROR: got zero MIME parts, huh\n"); + exit(1); + } else { + if (mm_context_iscomposite(ctx)) { + printf("Got %d MIME parts\n", parts - 1); + } else { + printf("Flat message (not multipart)\n"); + } + } + + /* Get the main MIME part */ + part = mm_context_getpart(ctx, 0); + if (part == NULL) { + fprintf(stderr, "Could not get envelope part\n"); + exit(1); + } + + printf("Printing envelope headers:\n"); + /* Print all headers */ + lastheader = NULL; + while ((header = mm_mimepart_headers_next(part, &lastheader)) != NULL) + printf("%s: %s\n", header->name, header->value); + + printf("%s\n", mm_content_tostring(part->type)); + printf("\n"); + + ct = part->type; + assert(ct != NULL); + + if (mm_context_iscomposite(ctx) == 0) { + printf("Printing body part for FLAT message:\n"); + part = mm_context_getpart(ctx, 0); + printf("%s", part->body); + } + + /* Loop through all MIME parts beginning with 1 */ + for (i = 1; i < mm_context_countparts(ctx); i++) { + char *decoded; + + printf("Printing headers for MIME part %d\n", i); + + /* Get the current MIME entity */ + part = mm_context_getpart(ctx, i); + if (part == NULL) { + fprintf(stderr, "Should have %d parts but " + "couldn't retrieve part %d", + mm_context_countparts(ctx), i); + exit(1); + } + + /* Print all headers */ + lastheader = NULL; + while ((header = mm_mimepart_headers_next(part, &lastheader)) != NULL) + printf("%s: %s\n", header->name, header->value); + + printf("%s\n", mm_content_tostring(part->type)); + + /* Print MIME part body */ + printf("\nPRINTING MESSAGE BODY (%d):\n%s\n", i, part->opaque_body); + decoded = mm_mimepart_decode(part); + if (decoded != NULL) { + printf("DECODED:\n%s\n", decoded); + free(decoded); + } + } + + printf("RECONSTRUCTED MESSAGE:\n"); + + do { + char *env; + size_t env_len; + + mm_context_flatten(ctx, &env, &env_len, 0); + printf("%s", env); + free(env); + + } while (0); + + mm_context_free(ctx); + ctx = NULL; + +#ifdef __HAVE_LEAK_DETECTION + MM_leakd_printallocated(); +#endif + + } while (0); + + return 0; +} diff --git a/main/strcompat.c b/main/strcompat.c index f6e3bfa072..dbad22b757 100644 --- a/main/strcompat.c +++ b/main/strcompat.c @@ -341,3 +341,131 @@ int getloadavg(double *list, int nelem) } #endif /* linux */ #endif /* !HAVE_GETLOADAVG */ + + +/* + * For strlcat() + * + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * If retval >= siz, truncation occurred. + */ +#ifndef HAVE_STRLCAT +size_t strlcat(char *dst, const char *src, size_t siz) +{ + register char *d = dst; + register const char *s = src; + register size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return dlen + strlen(s); + + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return dlen + (s - src); /* count does not include NUL */ +} +#endif /* HAVE_STRLCAT */ + +/* + * For strlcpy() + * + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Copy src to string dst of size siz. At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ +#ifndef HAVE_STRLCPY +size_t strlcpy(char *dst, const char *src, size_t siz) +{ + register char *d = dst; + register const char *s = src; + register size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return s - src - 1; /* count does not include NUL */ +} +#endif /* HAVE_STRLCPY */ -- GitLab