From c7a28913ad7fbcd263888e0bbb24b380d3a81b9c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sat, 21 Jan 2006 23:53:37 +0000 Subject: [PATCH] more doxygen doku. --- webcit/Doxyfile | 4 +- webcit/debian/changelog | 6 + webcit/debian/citadel-webcit.substvars | 2 +- webcit/event.c | 5 +- webcit/floors.c | 15 +- webcit/fmt_date.c | 86 +++-- webcit/gettext.c | 102 ++++-- webcit/groupdav_delete.c | 30 +- webcit/groupdav_get.c | 23 +- webcit/groupdav_main.c | 53 +-- webcit/groupdav_propfind.c | 34 +- webcit/groupdav_put.c | 45 ++- webcit/html2html.c | 49 +-- webcit/http_datestring.c | 20 +- webcit/ical_dezonify.c | 47 ++- webcit/iconbar.c | 99 +++--- webcit/inetconf.c | 20 +- webcit/listsub.c | 22 +- webcit/locate_host.c | 15 +- webcit/mainmenu.c | 31 +- webcit/messages.c | 473 +++++++++++++++---------- webcit/mime_parser.c | 108 ++++-- 22 files changed, 803 insertions(+), 486 deletions(-) diff --git a/webcit/Doxyfile b/webcit/Doxyfile index 6248d9c53..7c1a3f92f 100644 --- a/webcit/Doxyfile +++ b/webcit/Doxyfile @@ -480,7 +480,7 @@ RECURSIVE = NO # 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 = webcit.h and messages.c and vcard.h and userlist.c +EXCLUDE = webcit.h and vcard.h and userlist.c #!!!!!!!! for now # The EXCLUDE_SYMLINKS tag can be used select whether or not files or @@ -1007,7 +1007,7 @@ INCLUDE_FILE_PATTERNS = # undefined via #undef or recursively expanded use the := operator # instead of the = operator. -PREDEFINED = WEBCIT_WITH_CALENDAR_SERVICE HAVE_OPENSSL +PREDEFINED = WEBCIT_WITH_CALENDAR_SERVICE HAVE_OPENSSL ENABLE_NLS HAVE_ICONV # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then diff --git a/webcit/debian/changelog b/webcit/debian/changelog index b396c11c6..81ab04942 100644 --- a/webcit/debian/changelog +++ b/webcit/debian/changelog @@ -1,3 +1,9 @@ +webcit (6.71-2) unstable; urgency=low + + * update to actual Webcit SVN. many new features. see Packages changelog. + + -- Wilfried Goesgens Sat, 21 Jan 2006 19:07:00 +0100 + webcit (6.31-2) unstable; urgency=low * update to actual Citadel SVN. many new features. see Packages changelog. diff --git a/webcit/debian/citadel-webcit.substvars b/webcit/debian/citadel-webcit.substvars index 552c6985f..d0621723f 100644 --- a/webcit/debian/citadel-webcit.substvars +++ b/webcit/debian/citadel-webcit.substvars @@ -1,2 +1,2 @@ misc:Depends=debconf (>= 0.5) | debconf-2.0 -shlibs:Depends=libc6 (>= 2.3.5-1), libssl0.9.8, zlib1g (>= 1:1.2.1) +shlibs:Depends=libc6 (>= 2.3.5-1), libssl0.9.8 (>= 0.9.8a-1), zlib1g (>= 1:1.2.1) diff --git a/webcit/event.c b/webcit/event.c index 4bfcb0a8a..8f7c83f6e 100644 --- a/webcit/event.c +++ b/webcit/event.c @@ -254,7 +254,8 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum) } wprintf(""); - /* For a new event, the user creating the event should be the + /** + * For a new event, the user creating the event should be the * organizer. Set this field accordingly. */ if (icalcomponent_get_first_property(vevent, ICAL_ORGANIZER_PROPERTY) @@ -667,7 +668,7 @@ STARTOVER: lprintf(9, "Remove unlisted attendees\n"); lprintf(9, "Encapsulating into full VCALENDAR component\n"); encaps = ical_encapsulate_subcomponent(icalcomponent_new_clone(vevent)); - /* If the user clicked 'Save' then save it to the server. */ + /** If the user clicked 'Save' then save it to the server. */ lprintf(9, "Serializing it for saving\n"); if ( (encaps != NULL) && (strlen(bstr("save_button")) > 0) ) { serv_puts("ENT0 1|||4|||1|"); diff --git a/webcit/floors.c b/webcit/floors.c index 3103a36f4..8f5b358ab 100644 --- a/webcit/floors.c +++ b/webcit/floors.c @@ -13,7 +13,7 @@ -/* +/** * \brief Display floor config * Display floor configuration. If prepend_html is not NULL, its contents * will be displayed at the top of the screen. @@ -114,7 +114,9 @@ void display_floorconfig(char *prepend_html) } - +/** + * \brief delete the actual floor + */ void delete_floor(void) { int floornum; char buf[SIZ]; @@ -135,7 +137,9 @@ void delete_floor(void) { display_floorconfig(message); } - +/** + * \brief tart creating a new floor + */ void create_floor(void) { char buf[SIZ]; char message[SIZ]; @@ -155,7 +159,9 @@ void create_floor(void) { display_floorconfig(message); } - +/** + * \brief rename this floor + */ void rename_floor(void) { int floornum; char buf[SIZ]; @@ -174,3 +180,4 @@ void rename_floor(void) { } +/*@}*/ diff --git a/webcit/fmt_date.c b/webcit/fmt_date.c index 640db83c2..d02a304ce 100644 --- a/webcit/fmt_date.c +++ b/webcit/fmt_date.c @@ -1,28 +1,35 @@ /* * $Id$ - * - * Miscellaneous routines */ - +/** + * \defgroup FormatDates Miscellaneous routines formating dates + */ +/*@{*/ #include "webcit.h" #include "webserver.h" -typedef unsigned char byte; +typedef unsigned char byte; /**< a byte. */ -#define FALSE 0 -#define TRUE 1 +#define FALSE 0 /**< no. */ +#define TRUE 1 /**< yes. */ +/** \todo translate */ +/** short months */ char *ascmonths[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; +/** Short weekdays */ char *ascdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; -/* - * Format a date/time stamp for output +/** + * \brief Format a date/time stamp for output + * \param buf the output buffer + * \param thetime time to convert to string + * \param brief do we want compact view????? */ void fmt_date(char *buf, time_t thetime, int brief) { @@ -48,7 +55,7 @@ void fmt_date(char *buf, time_t thetime, int brief) if (brief) { - /* If date == today, show only the time */ + /** If date == today, show only the time */ if ((tm.tm_year == today_tm.tm_year) &&(tm.tm_mon == today_tm.tm_mon) &&(tm.tm_mday == today_tm.tm_mday)) { @@ -65,7 +72,7 @@ void fmt_date(char *buf, time_t thetime, int brief) } } - /* Otherwise, for messages up to 6 months old, show the + /** Otherwise, for messages up to 6 months old, show the * month and day, and the time */ else if (today_timet - thetime < 15552000) { if (!strcasecmp(calhourformat, "24")) { @@ -85,7 +92,7 @@ void fmt_date(char *buf, time_t thetime, int brief) } } - /* older than 6 months, show only the date */ + /** older than 6 months, show only the date */ else { sprintf(buf, "%s %d %d", ascmonths[tm.tm_mon], @@ -116,8 +123,10 @@ void fmt_date(char *buf, time_t thetime, int brief) -/* - * Format TIME ONLY for output +/** + * \brief Format TIME ONLY for output + * \param buf the output buffer + * \param thetime time to format into buf */ void fmt_time(char *buf, time_t thetime) { @@ -150,8 +159,10 @@ void fmt_time(char *buf, time_t thetime) -/* - * Format a date/time stamp to the format used in HTTP headers +/** + * \brief Format a date/time stamp to the format used in HTTP headers + * \param buf give back result here. + * \param thetime time to translate */ void httpdate(char *buf, time_t thetime) { @@ -168,11 +179,13 @@ void httpdate(char *buf, time_t thetime) } -/* - * Break down the timestamp used in HTTP headers +/** + * \brief Break down the timestamp used in HTTP headers * Should read rfc1123 and rfc850 dates OK - * FIXME won't read asctime + * \todo FIXME won't read asctime * Doesn't understand timezone, but we only should be using GMT/UTC anyway + * \param buf time to parse + * \return the time found in buf */ time_t httpdate_to_timestamp(const char *buf) { @@ -181,7 +194,7 @@ time_t httpdate_to_timestamp(const char *buf) char *c; char tz[256]; - /* Skip day of week, to number */ + /** Skip day of week, to number */ for (c = buf; *c != ' '; c++) ; c++; @@ -191,62 +204,62 @@ time_t httpdate_to_timestamp(const char *buf) for (; *c != ' ' && *c != '-'; c++); c++; - /* Get month */ + /** Get month */ switch (*c) { - case 'A': /* April, August */ + case 'A': /** April, August */ tt.tm_mon = (c[1] == 'p') ? 3 : 7; break; - case 'D': /* December */ + case 'D': /** December */ tt.tm_mon = 11; break; - case 'F': /* February */ + case 'F': /** February */ tt.tm_mon = 1; break; - case 'M': /* March, May */ + case 'M': /** March, May */ tt.tm_mon = (c[2] == 'r') ? 2 : 4; break; - case 'J': /* January, June, July */ + case 'J': /** January, June, July */ tt.tm_mon = (c[2] == 'n') ? ((c[1] == 'a') ? 0 : 5) : 6; break; - case 'N': /* November */ + case 'N': /** November */ tt.tm_mon = 10; break; - case 'O': /* October */ + case 'O': /** October */ tt.tm_mon = 9; break; - case 'S': /* September */ + case 'S': /** September */ tt.tm_mon = 8; break; default: return 42; - break; /* NOTREACHED */ + break; /** NOTREACHED */ } c += 4; tt.tm_year = 0; - /* Get year */ + /** Get year */ tt.tm_year = atoi(c); for (; *c != ' '; c++); c++; if (tt.tm_year >= 1900) tt.tm_year -= 1900; - /* Get hour */ + /** Get hour */ tt.tm_hour = atoi(c); for (; *c != ':'; c++); c++; - /* Get minute */ + /** Get minute */ tt.tm_min = atoi(c); for (; *c != ':'; c++); c++; - /* Get second */ + /** Get second */ tt.tm_sec = atoi(c); for (; *c && *c != ' '; c++); - /* Got everything; let's go */ - /* First, change to UTC */ + /** Got everything; let's go */ + /** First, change to UTC */ if (getenv("TZ")) sprintf(tz, "TZ=%s", getenv("TZ")); else @@ -258,3 +271,6 @@ time_t httpdate_to_timestamp(const char *buf) tzset(); return t; } + + +/*@}*/ diff --git a/webcit/gettext.c b/webcit/gettext.c index 0243c7b70..1be5e11f0 100644 --- a/webcit/gettext.c +++ b/webcit/gettext.c @@ -1,12 +1,21 @@ +/* + * $Id + */ +/** + * \defgroup LocaleHeaderParser Parse the browser http locale headers and set the NLS stuff. + */ +/*@{*/ +/** we need _GNU_SOURCE for various functions arround the NLS-Stuff */ #define _GNU_SOURCE #include "webcit.h" #include "webserver.h" #ifdef ENABLE_NLS -#define NUM_LANGS 4 -#define SEARCH_LANG 20 +#define NUM_LANGS 4 /**< how many different locales do we know? */ +#define SEARCH_LANG 20 /**< how many langs should we parse? */ +/** actual supported locales */ char *AvailLang[NUM_LANGS] = { "C", "en_US", @@ -14,23 +23,27 @@ char *AvailLang[NUM_LANGS] = { "it_IT" }; -locale_t wc_locales[NUM_LANGS]; +locale_t wc_locales[NUM_LANGS]; /**< here we keep the parsed stuff */ +/** Keep information about one locale */ typedef struct _lang_pref{ - char lang[16]; - char region[16]; - long priority; - int availability; - int selectedlang; + char lang[16]; /**< the language locale string */ + char region[16]; /**< the region locale string */ + long priority; /**< which priority does it have */ + int availability; /**< do we know it? */ + int selectedlang; /**< is this the selected language? */ } LangStruct; -/* seems as most browsers just do a one after coma value even if more than 10 locales are available. */ -/* opera: */ -/* Accept-Language: sq;q=1.0,de;q=0.9,as;q=0.8,ar;q=0.7,bn;q=0.6,zh-cn;q=0.5,kn;q=0.4,ch;q=0.3,fo;q=0.2,gn;q=0.1,ce;q=0.1,ie;q=0.1 */ -/* Firefox */ -/* Accept-Language: 'de-de,en-us;q=0.7,en;q=0.3' */ -/* Accept-Language: de,en-ph;q=0.8,en-us;q=0.5,de-at;q=0.3 */ -/* Accept-Language: de,en-us;q=0.9,it;q=0.9,de-de;q=0.8,en-ph;q=0.7,de-at;q=0.7,zh-cn;q=0.6,cy;q=0.5,ar-om;q=0.5,en-tt;q=0.4,xh;q=0.3,nl-be;q=0.3,cs;q=0.2,sv;q=0.1,tk;q=0.1 */ +/* \brief parse browser locale header + * seems as most browsers just do a one after coma value even if more than 10 locales are available. Sample strings: + * opera: + * Accept-Language: sq;q=1.0,de;q=0.9,as;q=0.8,ar;q=0.7,bn;q=0.6,zh-cn;q=0.5,kn;q=0.4,ch;q=0.3,fo;q=0.2,gn;q=0.1,ce;q=0.1,ie;q=0.1 + * Firefox + * Accept-Language: 'de-de,en-us;q=0.7,en;q=0.3' + * Accept-Language: de,en-ph;q=0.8,en-us;q=0.5,de-at;q=0.3 + * Accept-Language: de,en-us;q=0.9,it;q=0.9,de-de;q=0.8,en-ph;q=0.7,de-at;q=0.7,zh-cn;q=0.6,cy;q=0.5,ar-om;q=0.5,en-tt;q=0.4,xh;q=0.3,nl-be;q=0.3,cs;q=0.2,sv;q=0.1,tk;q=0.1 + * \param LocaleString the string from the browser http headers + */ void httplang_to_locale(char *LocaleString) { @@ -61,7 +74,7 @@ void httplang_to_locale(char *LocaleString) ls=&wanted_locales[i]; extract_token(&buf[0],search, i,',',16); - /* we are searching, if this list item has something like ;q=n*/ + /** we are searching, if this list item has something like ;q=n*/ if (num_tokens(&buf[0],'=')>1) { int sbuflen, k; extract_token(&sbuf[0],&buf[0], 1,'=',16); @@ -72,39 +85,39 @@ void httplang_to_locale(char *LocaleString) else { ls->priority=1000; } - /* get the locale part */ + /** get the locale part */ extract_token(&sbuf[0],&buf[0],0,';',16); - /* get the lang part, which should be allways there */ + /** get the lang part, which should be allways there */ extract_token(&ls->lang[0],&sbuf[0],0,'-',16); - /* get the area code if any. */ + /** get the area code if any. */ if (num_tokens(&sbuf[0],'-')>1) { extract_token(&ls->region[0],&sbuf[0],1,'-',16); } - else { /* no ara code? use lang code */ + else { /** no ara code? use lang code */ blen=strlen(&ls->lang[0]); memcpy(&ls->region[0], ls->lang,blen); ls->region[blen]='\0'; - } /* area codes are uppercase */ + } /** area codes are uppercase */ blen=strlen(&ls->region[0]); for (j=0; jregion[j]); - ls->region[j]=(char)chars;/* \todo ?! */ + ls->region[j]=(char)chars;/** \todo ?! */ } sprintf(&lbuf[0],"%s_%s",&ls->lang[0],&ls->region[0]); - /* check if we have this lang */ + /** check if we have this lang */ ls->availability=1; ls->selectedlang=-1; for (j=0; jlang[0], AvailLang[j]); if ((result<0)&&(resultavailability)){ ls->availability=result; ls->selectedlang=j; } - /* match against lang and locale */ + /** match against lang and locale */ if (0==strcasecmp(&lbuf[0], AvailLang[j])){ ls->availability=0; ls->selectedlang=j; @@ -128,7 +141,7 @@ void httplang_to_locale(char *LocaleString) prio=ls->priority; } } - if (nBest==-1) /* fall back to C */ + if (nBest==-1) /** fall back to C */ nBest=0; WC->selected_language=nBest; lprintf(9, "language found: %s\n", AvailLang[WC->selected_language]); @@ -173,6 +186,11 @@ void httplang_to_locale(char *LocaleString) //} +/** + * \brief show the language chooser on the login dialog + * depending on the browser locale change the sequence of the + * language chooser. + */ void offer_languages(void) { int i; @@ -189,8 +207,9 @@ void offer_languages(void) { wprintf("\n"); } -/* - * Set the selected language for this session. +/** + * \brief Set the selected language for this session. + * \param lang the locale to set. */ void set_selected_language(char *lang) { int i; @@ -202,23 +221,26 @@ void set_selected_language(char *lang) { } } -/* - * Activate and deactivate the selected language for this session. +/** + * \brief Activate the selected language for this session. */ void go_selected_language(void) { if (WC->selected_language < 0) return; - uselocale(wc_locales[WC->selected_language]); /* switch locales */ - textdomain(textdomain(NULL)); /* clear the cache */ + uselocale(wc_locales[WC->selected_language]); /** switch locales */ + textdomain(textdomain(NULL)); /** clear the cache */ } +/** + * \brief Deactivate the selected language for this session. + */ void stop_selected_language(void) { - uselocale(LC_GLOBAL_LOCALE); /* switch locales */ - textdomain(textdomain(NULL)); /* clear the cache */ + uselocale(LC_GLOBAL_LOCALE); /** switch locales */ + textdomain(textdomain(NULL)); /** clear the cache */ } -/* - * Create a locale_t for each available language +/** + * \brief Create a locale_t for each available language */ void initialize_locales(void) { int i; @@ -239,18 +261,24 @@ void initialize_locales(void) { #else /* ENABLE_NLS */ - +/** \brief dummy for non NLS enabled systems */ void offer_languages(void) { wprintf("English (US)"); } +/** \brief dummy for non NLS enabled systems */ void set_selected_language(char *lang) { } +/** \brief dummy for non NLS enabled systems */ void go_selected_language(void) { } +/** \brief dummy for non NLS enabled systems */ void stop_selected_language(void) { } #endif /* ENABLE_NLS */ + + +/*@}*/ diff --git a/webcit/groupdav_delete.c b/webcit/groupdav_delete.c index 2d44b8fc1..56ce1bd7b 100644 --- a/webcit/groupdav_delete.c +++ b/webcit/groupdav_delete.c @@ -1,17 +1,20 @@ /* * $Id$ - * - * Handles GroupDAV DELETE requests. + */ +/** + * \defgroup GroupdavDel Handle GroupDAV DELETE requests. * */ - +/*@{*/ #include "webcit.h" #include "webserver.h" #include "groupdav.h" -/* - * The pathname is always going to be /groupdav/room_name/euid +/** + * \brief The pathname is always going to be /groupdav/room_name/euid + * \param dav_pathname the groupdav pathname + * \param dav_ifmatch item to delete ???? */ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) { char dav_roomname[SIZ]; @@ -20,22 +23,22 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) { char buf[SIZ]; int n = 0; - /* First, break off the "/groupdav/" prefix */ + /** First, break off the "/groupdav/" prefix */ remove_token(dav_pathname, 0, '/'); remove_token(dav_pathname, 0, '/'); - /* Now extract the message euid */ + /** Now extract the message euid */ n = num_tokens(dav_pathname, '/'); extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid); remove_token(dav_pathname, n-1, '/'); - /* What's left is the room name. Remove trailing slashes. */ + /** What's left is the room name. Remove trailing slashes. */ if (dav_pathname[strlen(dav_pathname)-1] == '/') { dav_pathname[strlen(dav_pathname)-1] = 0; } strcpy(dav_roomname, dav_pathname); - /* Go to the correct room. */ + /** Go to the correct room. */ if (strcasecmp(WC->wc_roomname, dav_roomname)) { gotoroom(dav_roomname); } @@ -48,7 +51,7 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) { dav_msgnum = locate_message_by_uid(dav_uid); - /* + /** * If no item exists with the requested uid ... simple error. */ if (dav_msgnum < 0L) { @@ -58,7 +61,7 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) { return; } - /* + /** * It's there ... check the ETag and make sure it matches * the message number. */ @@ -71,7 +74,7 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) { } } - /* + /** * Ok, attempt to delete the item. */ serv_printf("DELE %ld", dav_msgnum); @@ -88,3 +91,6 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) { } return; } + + +/*@}*/ diff --git a/webcit/groupdav_get.c b/webcit/groupdav_get.c index 70f75bbd5..03367f536 100644 --- a/webcit/groupdav_get.c +++ b/webcit/groupdav_get.c @@ -1,17 +1,19 @@ /* * $Id$ - * - * Handles GroupDAV GET requests. + */ +/** + * \defgraup GroupdavGet Handle GroupDAV GET requests. * */ - +/*@{*/ #include "webcit.h" #include "webserver.h" #include "groupdav.h" -/* - * The pathname is always going to be /groupdav/room_name/euid +/** + * \briefThe pathname is always going to be /groupdav/room_name/euid + * \param dav_pathname the pathname to print */ void groupdav_get(char *dav_pathname) { char dav_roomname[SIZ]; @@ -22,22 +24,22 @@ void groupdav_get(char *dav_pathname) { int in_body = 0; int found_content_type = 0; - /* First, break off the "/groupdav/" prefix */ + /** First, break off the "/groupdav/" prefix */ remove_token(dav_pathname, 0, '/'); remove_token(dav_pathname, 0, '/'); - /* Now extract the message euid */ + /** Now extract the message euid */ n = num_tokens(dav_pathname, '/'); extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid); remove_token(dav_pathname, n-1, '/'); - /* What's left is the room name. Remove trailing slashes. */ + /** What's left is the room name. Remove trailing slashes. */ if (dav_pathname[strlen(dav_pathname)-1] == '/') { dav_pathname[strlen(dav_pathname)-1] = 0; } strcpy(dav_roomname, dav_pathname); - /* Go to the correct room. */ + /** Go to the correct room. */ if (strcasecmp(WC->wc_roomname, dav_roomname)) { gotoroom(dav_roomname); } @@ -91,3 +93,6 @@ void groupdav_get(char *dav_pathname) { } } } + + +/*@}*/ diff --git a/webcit/groupdav_main.c b/webcit/groupdav_main.c index ba5817d0f..793f96510 100644 --- a/webcit/groupdav_main.c +++ b/webcit/groupdav_main.c @@ -1,17 +1,18 @@ /* * $Id$ - * - * Entry point for GroupDAV functions + */ +/** + * \defgroup GroupdavMain Entry point for GroupDAV functions * */ - +/*@{*/ #include "webcit.h" #include "webserver.h" #include "groupdav.h" -/* - * Output HTTP headers which are common to all requests. +/** + * \brief Output HTTP headers which are common to all requests. * * Please observe that we don't use the usual output_headers() * and wDumpContent() functions in the GroupDAV subsystem, so we @@ -28,8 +29,10 @@ void groupdav_common_headers(void) { -/* - * string conversion function +/** + * \brief string conversion function + * \param target output string + * \param source string to process */ void euid_escapize(char *target, char *source) { int i; @@ -56,8 +59,10 @@ void euid_escapize(char *target, char *source) { } } -/* - * string conversion function +/** + * \brief string conversion function + * \param target output string + * \param source string to process */ void euid_unescapize(char *target, char *source) { int a, b; @@ -95,8 +100,12 @@ void euid_unescapize(char *target, char *source) { -/* - * Main entry point for GroupDAV requests +/** + * \brief Main entry point for GroupDAV requests + * \param req Request header + * \param dav_content_type the kind of dav elemet to represent?? + * \param dav_content_length the length of our response + * \param dav_content the actual content to give back */ void groupdav_main(struct httprequest *req, char *dav_content_type, @@ -140,7 +149,8 @@ void groupdav_main(struct httprequest *req, extract_token(dav_pathname, req->line, 1, ' ', sizeof dav_pathname); unescape_input(dav_pathname); - /* If the request does not begin with "/groupdav", prepend it. If + /** + * If the request does not begin with "/groupdav", prepend it. If * we happen to introduce a double-slash, that's ok; we'll strip it * in the next step. */ @@ -149,12 +159,12 @@ void groupdav_main(struct httprequest *req, safestrncpy(dav_pathname, buf, sizeof dav_pathname); } - /* Remove any stray double-slashes in pathname */ + /** Remove any stray double-slashes in pathname */ while (ds=strstr(dav_pathname, "//"), ds != NULL) { strcpy(ds, ds+1); } - /* + /** * If there's an If-Match: header, strip out the quotes if present, and * then if all that's left is an asterisk, make it go away entirely. */ @@ -173,7 +183,7 @@ void groupdav_main(struct httprequest *req, } } - /* + /** * The OPTIONS method is not required by GroupDAV. This is an * experiment to determine what might be involved in supporting * other variants of DAV in the future. @@ -183,7 +193,7 @@ void groupdav_main(struct httprequest *req, return; } - /* + /** * The PROPFIND method is basically used to list all objects in a * room, or to list all relevant rooms on the server. */ @@ -192,7 +202,7 @@ void groupdav_main(struct httprequest *req, return; } - /* + /** * The GET method is used for fetching individual items. */ if (!strcasecmp(dav_method, "GET")) { @@ -200,7 +210,7 @@ void groupdav_main(struct httprequest *req, return; } - /* + /** * The PUT method is used to add or modify items. */ if (!strcasecmp(dav_method, "PUT")) { @@ -209,7 +219,7 @@ void groupdav_main(struct httprequest *req, return; } - /* + /** * The DELETE method kills, maims, and destroys. */ if (!strcasecmp(dav_method, "DELETE")) { @@ -217,7 +227,7 @@ void groupdav_main(struct httprequest *req, return; } - /* + /** * Couldn't find what we were looking for. Die in a car fire. */ wprintf("HTTP/1.1 501 Method not implemented\r\n"); @@ -228,3 +238,6 @@ void groupdav_main(struct httprequest *req, dav_method ); } + + +/*@}*/ diff --git a/webcit/groupdav_propfind.c b/webcit/groupdav_propfind.c index 2385d9900..266bd1430 100644 --- a/webcit/groupdav_propfind.c +++ b/webcit/groupdav_propfind.c @@ -1,7 +1,8 @@ /* * $Id$ - * - * Handles GroupDAV PROPFIND requests. + */ +/** + * \defgroup GroupdavPropfind Handles GroupDAV PROPFIND requests. * * A few notes about our XML output: * @@ -20,13 +21,15 @@ #include "groupdav.h" -/* +/** + * \brief get all messages of this user * Given an encoded UID, translate that to an unencoded Citadel EUID and * then search for it in the current room. Return a message number or -1 * if not found. * * NOTE: this function relies on the Citadel server's brute-force search. * There's got to be a way to optimize this better. + * \param uid the user to get the data for... */ long locate_message_by_uid(char *uid) { char buf[SIZ]; @@ -45,8 +48,8 @@ long locate_message_by_uid(char *uid) { } -/* - * List folders containing interesting groupware objects +/** + * \brief List folders containing interesting groupware objects */ void groupdav_folder_list(void) { char buf[SIZ]; @@ -58,7 +61,7 @@ void groupdav_folder_list(void) { now = time(NULL); http_datestring(datestring, sizeof datestring, now); - /* + /** * Be rude. Completely ignore the XML request and simply send them * everything we know about. Let the client sort it out. */ @@ -81,7 +84,7 @@ void groupdav_folder_list(void) { extract_token(roomname, buf, 0, '|', sizeof roomname); view = extract_int(buf, 6); - /* + /** * For now, only list rooms that we know a GroupDAV client * might be interested in. In the future we may add * the rest. @@ -135,8 +138,9 @@ void groupdav_folder_list(void) { -/* - * The pathname is always going to be /groupdav/room_name/msg_num +/** + * \brief Search though a davname + * \param dav_pathname The pathname is always going to be /groupdav/room_name/msg_num */ void groupdav_propfind(char *dav_pathname) { char dav_roomname[256]; @@ -164,7 +168,7 @@ void groupdav_propfind(char *dav_pathname) { lprintf(9, " dav_uid: %s\n", dav_uid); */ - /* + /** * If the room name is blank, the client is requesting a * folder list. */ @@ -190,7 +194,8 @@ void groupdav_propfind(char *dav_pathname) { return; } - /* If dav_uid is non-empty, client is requesting a PROPFIND on + /** + * If dav_uid is non-empty, client is requesting a PROPFIND on * a specific item in the room. This is not valid GroupDAV, but * we try to honor it anyway because some clients are expecting * it to work... @@ -211,7 +216,8 @@ void groupdav_propfind(char *dav_pathname) { return; } - /* Be rude. Completely ignore the XML request and simply send them + /** + * Be rude. Completely ignore the XML request and simply send them * everything we know about (which is going to simply be the ETag and * nothing else). Let the client-side parser sort it out. */ @@ -252,7 +258,7 @@ void groupdav_propfind(char *dav_pathname) { } - /* + /** * We got to this point, which means that the client is requesting * a 'collection' (i.e. a list of all items in the room). * @@ -318,3 +324,5 @@ void groupdav_propfind(char *dav_pathname) { free(msgs); } } + +/*@}*/ diff --git a/webcit/groupdav_put.c b/webcit/groupdav_put.c index 79a0da129..e2c91fe72 100644 --- a/webcit/groupdav_put.c +++ b/webcit/groupdav_put.c @@ -1,17 +1,22 @@ /* * $Id$ - * - * Handles GroupDAV PUT requests. + */ +/** + * \defgroup GroupdavPut Handles GroupDAV PUT requests. * */ - +/*@{*/ #include "webcit.h" #include "webserver.h" #include "groupdav.h" -/* - * The pathname is always going to be /groupdav/room_name/euid +/** + * \brief put an item to the server + * \param dav_pathname The pathname is always going to be /groupdav/room_name/euid + * \param dav_ifmatch should we match? + * \param dav_content_type the mime type + * \param dav_content the actual data */ void groupdav_put(char *dav_pathname, char *dav_ifmatch, char *dav_content_type, char *dav_content @@ -23,22 +28,22 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, char buf[SIZ]; int n = 0; - /* First, break off the "/groupdav/" prefix */ + /** First, break off the "/groupdav/" prefix */ remove_token(dav_pathname, 0, '/'); remove_token(dav_pathname, 0, '/'); - /* Now extract the message euid */ + /** Now extract the message euid */ n = num_tokens(dav_pathname, '/'); extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid); remove_token(dav_pathname, n-1, '/'); - /* What's left is the room name. Remove trailing slashes. */ + /** What's left is the room name. Remove trailing slashes. */ if (dav_pathname[strlen(dav_pathname)-1] == '/') { dav_pathname[strlen(dav_pathname)-1] = 0; } strcpy(dav_roomname, dav_pathname); - /* Go to the correct room. */ + /** Go to the correct room. */ if (strcasecmp(WC->wc_roomname, dav_roomname)) { gotoroom(dav_roomname); } @@ -54,7 +59,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, return; } - /* + /** * If an HTTP If-Match: header is present, the client is attempting * to replace an existing item. We have to check to see if the * message number associated with the supplied uid matches what the @@ -73,7 +78,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, } } - /* + /** * We are cleared for upload! We use the new calling syntax for ENT0 * which allows a confirmation to be sent back to us. That's how we * extract the message ID. @@ -90,12 +95,12 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, return; } - /* Send the content to the Citadel server */ + /** Send the content to the Citadel server */ serv_printf("Content-type: %s\n\n", dav_content_type); serv_puts(dav_content); serv_puts("\n000"); - /* Fetch the reply from the Citadel server */ + /** Fetch the reply from the Citadel server */ n = 0; strcpy(dav_uid, ""); while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { @@ -111,9 +116,9 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, } } - /* Tell the client what happened. */ + /** Tell the client what happened. */ - /* Citadel failed in some way? */ + /** Citadel failed in some way? */ if (new_msgnum < 0L) { wprintf("HTTP/1.1 502 Bad Gateway\r\n"); groupdav_common_headers(); @@ -125,7 +130,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, return; } - /* We created this item for the first time. */ + /** We created this item for the first time. */ if (old_msgnum < 0L) { wprintf("HTTP/1.1 201 Created\r\n"); lprintf(9, "HTTP/1.1 201 Created\r\n"); @@ -145,14 +150,15 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, return; } - /* We modified an existing item. */ + /** We modified an existing item. */ wprintf("HTTP/1.1 204 No Content\r\n"); lprintf(9, "HTTP/1.1 204 No Content\r\n"); groupdav_common_headers(); wprintf("etag: \"%ld\"\r\n", new_msgnum); wprintf("Content-Length: 0\r\n\r\n"); - /* The item we replaced has probably already been deleted by + /** + * The item we replaced has probably already been deleted by * the Citadel server, but we'll do this anyway, just in case. */ serv_printf("DELE %ld", old_msgnum); @@ -160,3 +166,6 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch, return; } + + +/*@}*/ diff --git a/webcit/html2html.c b/webcit/html2html.c index c682cdc37..794f69165 100644 --- a/webcit/html2html.c +++ b/webcit/html2html.c @@ -1,19 +1,21 @@ /* * $Id$ - * - * Output an HTML message, modifying it slightly to make sure it plays nice + */ +/** + * \defgroup HTML2HTML Output an HTML message, modifying it slightly to make sure it plays nice * with the rest of our web framework. * */ - +/*@{*/ #include "webcit.h" #include "vcard.h" #include "webserver.h" -/* - * Sanitize and enhance an HTML message for display. +/** + * \brief Sanitize and enhance an HTML message for display. * Also convert weird character sets to UTF-8 if necessary. + * \param charset the input charset */ void output_html(char *charset) { char buf[SIZ]; @@ -33,11 +35,11 @@ void output_html(char *charset) { int linklen; #ifdef HAVE_ICONV iconv_t ic = (iconv_t)(-1) ; - char *ibuf; /* Buffer of characters to be converted */ - char *obuf; /* Buffer for converted characters */ - size_t ibuflen; /* Length of input buffer */ - size_t obuflen; /* Length of output buffer */ - char *osav; /* Saved pointer to output buffer */ + char *ibuf; /**< Buffer of characters to be converted */ + char *obuf; /**< Buffer for converted characters */ + size_t ibuflen; /**< Length of input buffer */ + size_t obuflen; /**< Length of output buffer */ + char *osav; /**< Saved pointer to output buffer */ #endif msg = strdup(""); @@ -93,13 +95,14 @@ void output_html(char *charset) { while (ptr < msgend) { - /* Advance to next tag */ + /** Advance to next tag */ ptr = strchr(ptr, '<'); if ((ptr == NULL) || (ptr >= msgend)) break; ++ptr; if ((ptr == NULL) || (ptr >= msgend)) break; - /* Any of these tags cause everything up to and including + /** + * Any of these tags cause everything up to and including * the tag to be removed. */ if ( (!strncasecmp(ptr, "HTML", 4)) @@ -113,7 +116,8 @@ void output_html(char *charset) { msgstart = ptr; } - /* Any of these tags cause everything including and following + /** + * Any of these tags cause everything including and following * the tag to be removed. */ if ( (!strncasecmp(ptr, "/HTML", 5)) @@ -131,7 +135,8 @@ void output_html(char *charset) { strcpy(converted_msg, ""); ptr = msgstart; while (ptr < msgend) { - /* Change mailto: links to WebCit mail, by replacing the + /** + * Change mailto: links to WebCit mail, by replacing the * link with one that points back to our mail room. Due to * the way we parse URL's, it'll even handle mailto: links * that have "?subject=" in them. @@ -146,7 +151,7 @@ void output_html(char *charset) { ptr = &ptr[16]; ++alevel; } - /* Make links open in a separate window */ + /** Make links open in a separate window */ else if (!strncasecmp(ptr, "
\n"); - /* Now give back the memory */ + /** Now give back the memory */ free(converted_msg); free(msg); } +/*@}*/ diff --git a/webcit/http_datestring.c b/webcit/http_datestring.c index aa0aa6ebf..449b52c96 100644 --- a/webcit/http_datestring.c +++ b/webcit/http_datestring.c @@ -1,25 +1,31 @@ /* * $Id$ - * - * Function to generate HTTP-compliant textual time/date stamp + */ +/** + * \defgroup HTTPDateTime Function to generate HTTP-compliant textual time/date stamp * (This module was lifted directly from the Citadel server source) * */ - +/*@{*/ #include "webcit.h" +/** HTTP Months */ static char *httpdate_months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; +/** HTTP Weekdays */ static char *httpdate_weekdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; -/* - * Supplied with a unix timestamp, generate a textual time/date stamp +/** + * \brief Supplied with a unix timestamp, generate a textual time/date stamp + * \param buf the return buffer + * \param n the size of the buffer + * \param xtime the time to format as string */ void http_datestring(char *buf, size_t n, time_t xtime) { struct tm t; @@ -29,7 +35,7 @@ void http_datestring(char *buf, size_t n, time_t xtime) { localtime_r(&xtime, &t); - /* Convert "seconds west of GMT" to "hours/minutes offset" */ + /** Convert "seconds west of GMT" to "hours/minutes offset" */ #ifdef HAVE_STRUCT_TM_TM_GMTOFF offset = t.tm_gmtoff; #else @@ -56,3 +62,5 @@ void http_datestring(char *buf, size_t n, time_t xtime) { ); } + +/*@}*/ diff --git a/webcit/ical_dezonify.c b/webcit/ical_dezonify.c index 54e927436..958f25490 100644 --- a/webcit/ical_dezonify.c +++ b/webcit/ical_dezonify.c @@ -1,6 +1,8 @@ /* * $Id$ - * + */ +/** + * \defgroup IcalDezonify normalize ical dates to UTC * Function to go through an ical component set and convert all non-UTC * date/time properties to UTC. It also strips out any VTIMEZONE * subcomponents afterwards, because they're irrelevant. @@ -9,7 +11,7 @@ * or any type of subcomponent. * */ - +/*@{*/ #include "webcit.h" #include "webserver.h" @@ -18,12 +20,15 @@ #ifdef WEBCIT_WITH_CALENDAR_SERVICE -/* - * Back end function for ical_dezonify() +/** + * \brief Back end function for ical_dezonify() * * We supply this with the master component, the relevant component, * and the property (which will be a DTSTART, DTEND, etc.) * which we want to convert to UTC. + * \param cal dunno ??? + * \param rcal dunno ??? + * \param prop dunno ??? */ void ical_dezonify_backend(icalcomponent *cal, icalcomponent *rcal, @@ -34,24 +39,24 @@ void ical_dezonify_backend(icalcomponent *cal, const char *tzid; struct icaltimetype TheTime; - /* Give me nothing and I will give you nothing in return. */ + /** Give me nothing and I will give you nothing in return. */ if (cal == NULL) return; - /* Hunt for a TZID parameter in this property. */ + /** Hunt for a TZID parameter in this property. */ param = icalproperty_get_first_parameter(prop, ICAL_TZID_PARAMETER); - /* Get the stringish name of this TZID. */ + /** Get the stringish name of this TZID. */ if (param != NULL) { tzid = icalparameter_get_tzid(param); - /* Convert it to an icaltimezone type. */ + /** Convert it to an icaltimezone type. */ if (tzid != NULL) { t = icalcomponent_get_timezone(cal, tzid); } } - /* Now we know the timezone. Convert to UTC. */ + /** Now we know the timezone. Convert to UTC. */ if (icalproperty_isa(prop) == ICAL_DTSTART_PROPERTY) { TheTime = icalproperty_get_dtstart(prop); @@ -69,7 +74,7 @@ void ical_dezonify_backend(icalcomponent *cal, return; } - /* Do the conversion. */ + /** Do the conversion. */ if (t != NULL) { icaltimezone_convert_time(&TheTime, t, @@ -79,7 +84,7 @@ void ical_dezonify_backend(icalcomponent *cal, TheTime.is_utc = 1; icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER); - /* Now add the converted property back in. */ + /** Now add the converted property back in. */ if (icalproperty_isa(prop) == ICAL_DTSTART_PROPERTY) { icalproperty_set_dtstart(prop, TheTime); } @@ -95,14 +100,16 @@ void ical_dezonify_backend(icalcomponent *cal, } -/* - * Recursive portion of ical_dezonify() +/** + * \brief Recursive portion of ical_dezonify() + * \param cal dunno ??? + * \param rcal dunno ??? */ void ical_dezonify_recur(icalcomponent *cal, icalcomponent *rcal) { icalcomponent *c; icalproperty *p; - /* + /** * Recurse through all subcomponents *except* VTIMEZONE ones. */ for (c=icalcomponent_get_first_component( @@ -116,7 +123,7 @@ void ical_dezonify_recur(icalcomponent *cal, icalcomponent *rcal) { } } - /* + /** * Now look for DTSTART and DTEND properties */ for (p=icalcomponent_get_first_property( @@ -137,18 +144,19 @@ void ical_dezonify_recur(icalcomponent *cal, icalcomponent *rcal) { } -/* - * Convert all DTSTART and DTEND properties in all subcomponents to UTC. +/** + * \brief Convert all DTSTART and DTEND properties in all subcomponents to UTC. * This function will search any VTIMEZONE subcomponents to learn the * relevant timezone information. + * \param cal item to process */ void ical_dezonify(icalcomponent *cal) { icalcomponent *vt = NULL; - /* Convert all times to UTC */ + /** Convert all times to UTC */ ical_dezonify_recur(cal, cal); - /* Strip out VTIMEZONE subcomponents -- we don't need them anymore */ + /** Strip out VTIMEZONE subcomponents -- we don't need them anymore */ while (vt = icalcomponent_get_first_component( cal, ICAL_VTIMEZONE_COMPONENT), vt != NULL) { icalcomponent_remove_component(cal, vt); @@ -159,3 +167,4 @@ void ical_dezonify(icalcomponent *cal) { #endif /* WEBCIT_WITH_CALENDAR_SERVICE */ +/*@}*/ diff --git a/webcit/iconbar.c b/webcit/iconbar.c index dc18455d6..242dd648f 100644 --- a/webcit/iconbar.c +++ b/webcit/iconbar.c @@ -1,18 +1,22 @@ /* * $Id$ - * - * Displays and customizes the iconbar. */ - +/** + * \defgroup IconBar Displays and customizes the iconbar. + */ +/*@{*/ #include "webcit.h" -/* Values for ib_displayas */ -#define IB_PICTEXT 0 -#define IB_PICONLY 1 -#define IB_TEXTONLY 2 +/** Values for ib_displayas */ +#define IB_PICTEXT 0 /**< picture and text */ +#define IB_PICONLY 1 /**< just a picture */ +#define IB_TEXTONLY 2 /**< just text */ +/** + * \brief draw the icon bar????? + */ void do_selected_iconbar(void) { if (WC->current_iconbar == current_iconbar_roomlist) { do_iconbar_roomlist(); @@ -22,7 +26,9 @@ void do_selected_iconbar(void) { } } - +/** + * \brief draw the icon bar??? + */ void do_iconbar(void) { char iconbar[SIZ]; char buf[SIZ]; @@ -31,24 +37,25 @@ void do_iconbar(void) { WC->current_iconbar = current_iconbar_menu; - /* The initialized values of these variables also happen to + /** + * The initialized values of these variables also happen to * specify the default values for users who haven't customized * their iconbars. These should probably be set in a master * configuration somewhere. */ - int ib_displayas = 0; /* pictures and text, pictures, text */ - int ib_logo = 0; /* Site logo */ - int ib_summary = 1; /* Summary page icon */ - int ib_inbox = 1; /* Inbox icon */ - int ib_calendar = 1; /* Calendar icon */ - int ib_contacts = 1; /* Contacts icon */ - int ib_notes = 1; /* Notes icon */ - int ib_tasks = 1; /* Tasks icon */ - int ib_rooms = 1; /* Rooms icon */ - int ib_users = 1; /* Users icon */ - int ib_chat = 1; /* Chat icon */ - int ib_advanced = 1; /* Advanced Options icon */ - int ib_citadel = 1; /* 'Powered by Citadel' logo */ + int ib_displayas = 0; /**< pictures and text, pictures, text */ + int ib_logo = 0; /**< Site logo */ + int ib_summary = 1; /**< Summary page icon */ + int ib_inbox = 1; /**< Inbox icon */ + int ib_calendar = 1; /**< Calendar icon */ + int ib_contacts = 1; /**< Contacts icon */ + int ib_notes = 1; /**< Notes icon */ + int ib_tasks = 1; /**< Tasks icon */ + int ib_rooms = 1; /**< Rooms icon */ + int ib_users = 1; /**< Users icon */ + int ib_chat = 1; /**< Chat icon */ + int ib_advanced = 1; /**< Advanced Options icon */ + int ib_citadel = 1; /**< 'Powered by Citadel' logo */ /* */ @@ -323,7 +330,8 @@ void do_iconbar(void) { } -/* +/** + * \brief roomtree view of the iconbar * If the user has toggled the icon bar over to a room list, here's where * we generate its innerHTML... */ @@ -335,7 +343,8 @@ void do_iconbar_roomlist(void) { WC->current_iconbar = current_iconbar_roomlist; - /* The initialized values of these variables also happen to + /** + * The initialized values of these variables also happen to * specify the default values for users who haven't customized * their iconbars. These should probably be set in a master * configuration somewhere. @@ -404,14 +413,16 @@ void do_iconbar_roomlist(void) { wprintf("\n"); - /* embed the room list */ + /** embed the room list */ list_all_rooms_by_floor("iconbar"); wprintf("\n"); } - +/** + * \brief display a customized version of the iconbar + */ void display_customize_iconbar(void) { char iconbar[SIZ]; char buf[SIZ]; @@ -419,24 +430,25 @@ void display_customize_iconbar(void) { int i; int bar = 0; - /* The initialized values of these variables also happen to + /** + * The initialized values of these variables also happen to * specify the default values for users who haven't customized * their iconbars. These should probably be set in a master * configuration somewhere. */ - int ib_displayas = IB_PICTEXT; /* pictures and text, pictures, text */ - int ib_logo = 0; /* Site logo */ - int ib_summary = 1; /* Summary page icon */ - int ib_inbox = 1; /* Inbox icon */ - int ib_calendar = 1; /* Calendar icon */ - int ib_contacts = 1; /* Contacts icon */ - int ib_notes = 1; /* Notes icon */ - int ib_tasks = 1; /* Tasks icon */ - int ib_rooms = 1; /* Rooms icon */ - int ib_users = 1; /* Users icon */ - int ib_chat = 1; /* Chat icon */ - int ib_advanced = 1; /* Advanced Options icon */ - int ib_citadel = 1; /* 'Powered by Citadel' logo */ + int ib_displayas = IB_PICTEXT; /**< pictures and text, pictures, text */ + int ib_logo = 0; /**< Site logo */ + int ib_summary = 1; /**< Summary page icon */ + int ib_inbox = 1; /**< Inbox icon */ + int ib_calendar = 1; /**< Calendar icon */ + int ib_contacts = 1; /**< Contacts icon */ + int ib_notes = 1; /**< Notes icon */ + int ib_tasks = 1; /**< Tasks icon */ + int ib_rooms = 1; /**< Rooms icon */ + int ib_users = 1; /**< Users icon */ + int ib_chat = 1; /**< Chat icon */ + int ib_advanced = 1; /**< Advanced Options icon */ + int ib_citadel = 1; /**< 'Powered by Citadel' logo */ /* */ @@ -703,7 +715,9 @@ void display_customize_iconbar(void) { wDumpContent(2); } - +/** + * \brief commit the changes of an edited iconbar ???? + */ void commit_iconbar(void) { char iconbar[SIZ]; int i; @@ -754,3 +768,6 @@ void commit_iconbar(void) { wDumpContent(2); } + + +/*@}*/ diff --git a/webcit/inetconf.c b/webcit/inetconf.c index eaee1b717..7d657ff09 100644 --- a/webcit/inetconf.c +++ b/webcit/inetconf.c @@ -1,14 +1,17 @@ /* * $Id$ - * - * Functions which handle Internet domain configuration etc. + */ +/** + * \defgroup InetCfg Functions which handle Internet domain configuration etc. * */ - +/*@{*/ #include "webcit.h" - +/** + * \brief display the inet config dialog + */ void display_inetconf(void) { char buf[SIZ]; @@ -140,6 +143,9 @@ void display_inetconf(void) } +/** + * \brief save changes to the inet config + */ void save_inetconf(void) { char *buf; char *ename; @@ -158,7 +164,7 @@ void save_inetconf(void) { extract_token(ename, buf, 0, '|', SIZ); extract_token(etype, buf, 1, '|', SIZ); if (strlen(buf) == 0) { - /* skip blank lines */ + /** skip blank lines */ } else if ((!strcasecmp(ename, bstr("ename"))) && (!strcasecmp(etype, bstr("etype"))) @@ -190,3 +196,7 @@ void save_inetconf(void) { free(etype); free(newconfig); } + + + +/*@}*/ diff --git a/webcit/listsub.c b/webcit/listsub.c index 80d65f7a4..bd2dcc1e9 100644 --- a/webcit/listsub.c +++ b/webcit/listsub.c @@ -1,16 +1,18 @@ /* * $Id$ - * - * Web forms for handling mailing list subscribe/unsubscribe requests. + */ +/** + * \defgroup ListSubForms Web forms for handling mailing list subscribe/unsubscribe requests. * */ +/*@{*/ #include "webcit.h" -/* - * List subscription handling +/** + * \brief List subscription handling */ void do_listsub(void) { @@ -54,7 +56,7 @@ void do_listsub(void) wprintf(_("List subscribe/unsubscribe")); wprintf("
\n"); - /* + /** * Subscribe command */ if (!strcasecmp(cmd, "subscribe")) { @@ -96,7 +98,7 @@ void do_listsub(void) } } - /* + /** * Unsubscribe command */ else if (!strcasecmp(cmd, "unsubscribe")) { @@ -134,7 +136,7 @@ void do_listsub(void) } } - /* + /** * Confirm command */ else if (!strcasecmp(cmd, "confirm")) { @@ -162,7 +164,7 @@ void do_listsub(void) wprintf("%s
\n", &buf[4]); } - /* + /** * Any other (invalid) command causes the form to be displayed */ else { @@ -226,3 +228,7 @@ FORM: wprintf("
\n" wDumpContent(0); end_webcit_session(); } + + + +/*@}*/ diff --git a/webcit/locate_host.c b/webcit/locate_host.c index 034fd05e9..bf018214c 100644 --- a/webcit/locate_host.c +++ b/webcit/locate_host.c @@ -1,12 +1,19 @@ /* * $Id$ - * - * Examine a socket and determine the name/address of the originating host. */ - +/** + * \defgroup Hostlookup Examine a socket and determine the name/address of the originating host. + */ +/*@{*/ #include "webcit.h" +/** + * \brief get a hostname + * \todo buffersize? + * \param tbuf the returnbuffer + * \param client_socket the sock fd where the client is connected + */ void locate_host(char *tbuf, int client_socket) { struct sockaddr_in cs; @@ -32,3 +39,5 @@ void locate_host(char *tbuf, int client_socket) } safestrncpy(tbuf, ch->h_name, 64); } + +/*@}*/ diff --git a/webcit/mainmenu.c b/webcit/mainmenu.c index 15fb8a026..92b11d4ef 100644 --- a/webcit/mainmenu.c +++ b/webcit/mainmenu.c @@ -1,14 +1,15 @@ /* * $Id$ - * - * Displays the "advanced" (main) menu. + */ +/** + * \defgroup DispAdvancedMenu Displays the "advanced" (main) menu. * */ - +/*@{*/ #include "webcit.h" -/* - * The Main Menu +/** + * \brief The Main Menu */ void display_main_menu(void) { @@ -24,7 +25,7 @@ void display_main_menu(void) wprintf("\n" "" "" - "
"); /* start of first column */ + ""); /**< start of first column */ wprintf(""); wprintf(_("List known rooms")); @@ -186,8 +187,8 @@ void display_main_menu(void) } -/* - * System administration menu +/** + * \brief System administration menu */ void display_aide_menu(void) { @@ -259,8 +260,8 @@ void display_aide_menu(void) -/* - * Display the screen to enter a generic server command +/** + * \brief Display the screen to enter a generic server command */ void display_generic(void) { @@ -302,6 +303,9 @@ void display_generic(void) wDumpContent(1); } +/** + * \brief what??? + */ void do_generic(void) { char buf[SIZ]; @@ -363,9 +367,9 @@ void do_generic(void) } -/* - * Display the menubar. Set as_single_page to - * display HTML headers and footers -- otherwise it's assumed +/** + * \brief Display the menubar. + * \param as_single_page Set to display HTML headers and footers -- otherwise it's assumed * that the menubar is being embedded in another page. */ void display_menubar(int as_single_page) { @@ -392,3 +396,4 @@ void display_menubar(int as_single_page) { } +/*@}*/ diff --git a/webcit/messages.c b/webcit/messages.c index b80520fd7..98837f177 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -1,32 +1,37 @@ /* * $Id$ - * - * Functions which deal with the fetching and displaying of messages. + */ +/** + * \defgroup MsgDisp Functions which deal with the fetching and displaying of messages. * */ - +/*@{*/ #include "webcit.h" #include "vcard.h" #include "webserver.h" #include "groupdav.h" -#define SUBJ_COL_WIDTH_PCT 50 -#define SENDER_COL_WIDTH_PCT 30 -#define DATE_PLUS_BUTTONS_WIDTH_PCT 20 +#define SUBJ_COL_WIDTH_PCT 50 /**< ??? */ +#define SENDER_COL_WIDTH_PCT 30 /**< ??? */ +#define DATE_PLUS_BUTTONS_WIDTH_PCT 20 /**< ??? */ -/* Address book entry (keep it short and sweet, it's just a quickie lookup +/** + * Address book entry (keep it short and sweet, it's just a quickie lookup * which we can use to get to the real meat and bones later) */ struct addrbookent { - char ab_name[64]; - long ab_msgnum; + char ab_name[64]; /**< name string */ + long ab_msgnum; /**< number in the citadel???? */ }; #ifdef HAVE_ICONV -/* Handle subjects with RFC2047 encoding, such as: +/** + * \brief Handle subjects with RFC2047 encoding + * such as: * =?koi8-r?B?78bP0s3Mxc7JxSDXz9rE1dvO2c3JINvB0sHNySDP?= + * \param buf the stringbuffer to process */ void utf8ify_rfc822_string(char *buf) { char *start, *end; @@ -35,12 +40,12 @@ void utf8ify_rfc822_string(char *buf) { char encoding[16]; char istr[1024]; iconv_t ic = (iconv_t)(-1) ; - char *ibuf; /* Buffer of characters to be converted */ - char *obuf; /* Buffer for converted characters */ - size_t ibuflen; /* Length of input buffer */ - size_t obuflen; /* Length of output buffer */ - char *isav; /* Saved pointer to input buffer */ - char *osav; /* Saved pointer to output buffer */ + char *ibuf; /**< Buffer of characters to be converted */ + char *obuf; /**< Buffer for converted characters */ + size_t ibuflen; /**< Length of input buffer */ + size_t obuflen; /**< Length of output buffer */ + char *isav; /**< Saved pointer to input buffer */ + char *osav; /**< Saved pointer to output buffer */ int passes = 0; while (start=strstr(buf, "=?"), end=strstr(buf, "?="), @@ -56,14 +61,14 @@ void utf8ify_rfc822_string(char *buf) { ibuf = malloc(1024); isav = ibuf; - if (!strcasecmp(encoding, "B")) { /* base64 */ + if (!strcasecmp(encoding, "B")) { /**< base64 */ ibuflen = CtdlDecodeBase64(ibuf, istr, strlen(istr)); } - else if (!strcasecmp(encoding, "Q")) { /* quoted-printable */ + else if (!strcasecmp(encoding, "Q")) { /**< quoted-printable */ ibuflen = CtdlDecodeQuotedPrintable(ibuf, istr, strlen(istr)); } else { - strcpy(ibuf, istr); /* huh? */ + strcpy(ibuf, istr); /**< huh? */ ibuflen = strlen(istr); } @@ -106,7 +111,8 @@ void utf8ify_rfc822_string(char *buf) { free(isav); - /* Since spammers will go to all sorts of absurd lengths to get their + /** + * Since spammers will go to all sorts of absurd lengths to get their * messages through, there are LOTS of corrupt headers out there. * So, prevent a really badly formed RFC2047 header from throwing * this function into an infinite loop. @@ -119,9 +125,10 @@ void utf8ify_rfc822_string(char *buf) { #endif -/* - * Look for URL's embedded in a buffer and make them linkable. We use a +/** + * \brief Look for URL's embedded in a buffer and make them linkable. We use a * target window in order to keep the BBS session in its own window. + * \param buf the message buffer */ void url(buf) char buf[]; @@ -173,8 +180,9 @@ char buf[]; } -/* - * Turn a vCard "n" (name) field into something displayable. +/** + * \brief Turn a vCard "n" (name) field into something displayable. + * \param name the name field to convert */ void vcard_n_prettyize(char *name) { @@ -208,10 +216,14 @@ void vcard_n_prettyize(char *name) -/* display_vcard() calls this after parsing the textual vCard into +/** + * \brief preparse a vcard name + * display_vcard() calls this after parsing the textual vCard into * our 'struct vCard' data object. * This gets called instead of display_parsed_vcard() if we are only looking * to extract the person's name instead of displaying the card. + * \param v the vcard to retrieve the name from + * \param storename where to put the name at */ void fetchname_parsed_vcard(struct vCard *v, char *storename) { char *name; @@ -228,7 +240,9 @@ void fetchname_parsed_vcard(struct vCard *v, char *storename) { -/* display_vcard() calls this after parsing the textual vCard into +/** + * \brief html print a vcard + * display_vcard() calls this after parsing the textual vCard into * our 'struct vCard' data object. * * Set 'full' to nonzero to display the full card, otherwise it will only @@ -239,6 +253,8 @@ void fetchname_parsed_vcard(struct vCard *v, char *storename) { * fields we understand, and then render them in a pretty fashion at the * end. Then we make a second pass, outputting all the fields we don't * understand in a simple two-column name/value format. + * \param v the vCard to display + * \param full display all items of the vcard? */ void display_parsed_vcard(struct vCard *v, int full) { int i, j; @@ -317,9 +333,9 @@ void display_parsed_vcard(struct vCard *v, int full) { thisvalue = strdup(v->prop[i].value); } - /*** Various fields we may encounter ***/ + /** Various fields we may encounter ***/ - /* N is name, but only if there's no FN already there */ + /** N is name, but only if there's no FN already there */ if (!strcasecmp(firsttoken, "n")) { if (strlen(fullname) == 0) { strcpy(fullname, thisvalue); @@ -327,17 +343,17 @@ void display_parsed_vcard(struct vCard *v, int full) { } } - /* FN (full name) is a true 'display name' field */ + /** FN (full name) is a true 'display name' field */ else if (!strcasecmp(firsttoken, "fn")) { strcpy(fullname, thisvalue); } - /* title */ + /** title */ else if (!strcasecmp(firsttoken, "title")) { strcpy(title, thisvalue); } - /* organization */ + /** organization */ else if (!strcasecmp(firsttoken, "org")) { strcpy(org, thisvalue); } @@ -457,12 +473,16 @@ void display_parsed_vcard(struct vCard *v, int full) { -/* - * Display a textual vCard +/** + * \brief Display a textual vCard * (Converts to a vCard object and then calls the actual display function) * Set 'full' to nonzero to display the whole card instead of a one-liner. * Or, if "storename" is non-NULL, just store the person's name in that * buffer instead of displaying the card at all. + * \param vcard_source the buffer containing the vcard text + * \param alpha what??? + * \param full should we usse all lines? + * \param storename where to store??? */ void display_vcard(char *vcard_source, char alpha, int full, char *storename) { struct vCard *v; @@ -493,8 +513,11 @@ void display_vcard(char *vcard_source, char alpha, int full, char *storename) { } -/* - * I wanna SEE that message! (Optional 'section' for encapsulated message/rfc822 submessage) +/** + * \brief I wanna SEE that message! + * \param msgnum the citadel number of the message to display + * \param printable_view are we doing a print view? + * \param section Optional for encapsulated message/rfc822 submessage) */ void read_message(long msgnum, int printable_view, char *section) { char buf[SIZ]; @@ -523,11 +546,11 @@ void read_message(long msgnum, int printable_view, char *section) { char *part_source = NULL; #ifdef HAVE_ICONV iconv_t ic = (iconv_t)(-1) ; - char *ibuf; /* Buffer of characters to be converted */ - char *obuf; /* Buffer for converted characters */ - size_t ibuflen; /* Length of input buffer */ - size_t obuflen; /* Length of output buffer */ - char *osav; /* Saved pointer to output buffer */ + char *ibuf; /**< Buffer of characters to be converted */ + char *obuf; /**< Buffer for converted characters */ + size_t ibuflen; /**< Length of input buffer */ + size_t obuflen; /**< Length of output buffer */ + char *osav; /**< Saved pointer to output buffer */ #endif strcpy(from, ""); @@ -551,14 +574,14 @@ void read_message(long msgnum, int printable_view, char *section) { return; } - /* begin everythingamundo table */ + /** begin everythingamundo table */ if (!printable_view) { wprintf("
\n"); wprintf("
\n"); } - /* begin message header table */ + /** begin message header table */ wprintf("\n"); - /* start msg buttons */ + /** start msg buttons */ if (!printable_view) { wprintf("
\n"); @@ -681,7 +704,7 @@ void read_message(long msgnum, int printable_view, char *section) { ); } - /*** begin handler prep ***/ + /** begin handler prep ***/ if (!strcasecmp(mime_content_type, "text/x-vcard")) { strcpy(vcard_partnum, mime_partnum); } @@ -690,13 +713,13 @@ void read_message(long msgnum, int printable_view, char *section) { strcpy(cal_partnum, mime_partnum); } - /*** end handler prep ***/ + /** end handler prep ***/ } } - /* Generate a reply-to address */ + /** Generate a reply-to address */ if (strlen(rfca) > 0) { strcpy(reply_to, rfca); } @@ -739,11 +762,11 @@ void read_message(long msgnum, int printable_view, char *section) { } wprintf("\n"); - /* Reply */ + /** Reply */ if ( (WC->wc_view == VIEW_MAILBOX) || (WC->wc_view == VIEW_BBS) ) { wprintf("is_mailbox) { @@ -759,7 +782,7 @@ void read_message(long msgnum, int printable_view, char *section) { wprintf("\">[%s] ", _("Reply")); } - /* ReplyQuoted */ + /** ReplyQuoted */ if ( (WC->wc_view == VIEW_MAILBOX) || (WC->wc_view == VIEW_BBS) ) { if (!WC->is_mailbox) { wprintf("wc_view == VIEW_MAILBOX) { wprintf("[%s] ", _("ReplyAll")); } - /* Forward */ + /** Forward */ if (WC->wc_view == VIEW_MAILBOX) { wprintf("[%s] ", _("Forward")); } - /* If this is one of my own rooms, or if I'm an Aide or Room Aide, I can move/delete */ + /** If this is one of my own rooms, or if I'm an Aide or Room Aide, I can move/delete */ if ( (WC->is_room_aide) || (WC->is_mailbox) ) { - /* Move */ + /** Move */ wprintf("[%s] ", msgnum, _("Move")); - /* Delete */ + /** Delete */ wprintf("" "[%s] ", msgnum, _("Delete this message?"), _("Delete") ); } - /* Headers */ + /** Headers */ wprintf("" "[%s]", msgnum, msgnum, _("Headers")); - /* Print */ + /** Print */ wprintf("" "[%s]", msgnum, msgnum, _("Print")); @@ -826,11 +849,11 @@ void read_message(long msgnum, int printable_view, char *section) { wprintf("
\n"); - /* Begin body */ + /** Begin body */ wprintf("
"); - /* + /** * Learn the content type */ strcpy(mime_content_type, "text/plain"); @@ -858,7 +881,7 @@ void read_message(long msgnum, int printable_view, char *section) { } } - /* Set up a character set conversion if we need to (and if we can) */ + /** Set up a character set conversion if we need to (and if we can) */ #ifdef HAVE_ICONV if (strchr(mime_charset, ';')) strcpy(strchr(mime_charset, ';'), ""); if ( (strcasecmp(mime_charset, "us-ascii")) @@ -873,12 +896,12 @@ void read_message(long msgnum, int printable_view, char *section) { } #endif - /* Messages in legacy Citadel variformat get handled thusly... */ + /** Messages in legacy Citadel variformat get handled thusly... */ if (!strcasecmp(mime_content_type, "text/x-citadel-variformat")) { fmout("JUSTIFY"); } - /* Boring old 80-column fixed format text gets handled this way... */ + /** Boring old 80-column fixed format text gets handled this way... */ else if ( (!strcasecmp(mime_content_type, "text/plain")) || (!strcasecmp(mime_content_type, "text")) ) { while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { @@ -918,23 +941,23 @@ void read_message(long msgnum, int printable_view, char *section) { wprintf("
"); } - else /* HTML is fun, but we've got to strip it first */ + else /** HTML is fun, but we've got to strip it first */ if (!strcasecmp(mime_content_type, "text/html")) { output_html(mime_charset); } - /* Unknown weirdness */ + /** Unknown weirdness */ else { wprintf(_("I don't know how to display %s"), mime_content_type); wprintf("
\n", mime_content_type); while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { } } - /* If there are attached submessages, display them now... */ + /** If there are attached submessages, display them now... */ if ( (strlen(mime_submessages) > 0) && (!section[0]) ) { for (i=0; i"); read_message(msgnum, 1, buf); wprintf(""); @@ -942,17 +965,17 @@ void read_message(long msgnum, int printable_view, char *section) { } - /* Afterwards, offer links to download attachments 'n' such */ + /** Afterwards, offer links to download attachments 'n' such */ if ( (strlen(mime_http) > 0) && (!section[0]) ) { wprintf("%s", mime_http); } - /* Handler for vCard parts */ + /** Handler for vCard parts */ if (strlen(vcard_partnum) > 0) { part_source = load_mimepart(msgnum, vcard_partnum); if (part_source != NULL) { - /* If it's my vCard I can edit it */ + /** If it's my vCard I can edit it */ if ( (!strcasecmp(WC->wc_roomname, USERCONFIGROOM)) || (!strcasecmp(&WC->wc_roomname[11], USERCONFIGROOM)) || (WC->wc_view == VIEW_ADDRESSBOOK) @@ -963,12 +986,12 @@ void read_message(long msgnum, int printable_view, char *section) { wprintf("[%s]", _("edit")); } - /* In all cases, display the full card */ + /** In all cases, display the full card */ display_vcard(part_source, 0, 1, NULL); } } - /* Handler for calendar parts */ + /** Handler for calendar parts */ if (strlen(cal_partnum) > 0) { part_source = load_mimepart(msgnum, cal_partnum); if (part_source != NULL) { @@ -985,7 +1008,7 @@ void read_message(long msgnum, int printable_view, char *section) { ENDBODY: wprintf("
\n"); - /* end everythingamundo table */ + /** end everythingamundo table */ if (!printable_view) { wprintf("
\n"); wprintf("

\n"); @@ -1000,9 +1023,10 @@ ENDBODY: -/* - * Unadorned HTML output of an individual message, suitable +/** + * \brief Unadorned HTML output of an individual message, suitable * for placing in a hidden iframe, for printing, or whatever + * \param msgnum_as_string the message to embed??? */ void embed_message(char *msgnum_as_string) { long msgnum = 0L; @@ -1014,8 +1038,9 @@ void embed_message(char *msgnum_as_string) { } -/* - * Printable view of a message +/** + * \brief Printable view of a message + * \param msgnum_as_string the message to print??? */ void print_message(char *msgnum_as_string) { long msgnum = 0L; @@ -1042,8 +1067,9 @@ void print_message(char *msgnum_as_string) { -/* - * Display a message's headers +/** + * \brief Display a message's headers + * \param msgnum_as_string the message headers to print??? */ void display_headers(char *msgnum_as_string) { long msgnum = 0L; @@ -1071,13 +1097,15 @@ void display_headers(char *msgnum_as_string) { -/* - * Read message in simple, JavaScript-embeddable form for 'forward' +/** + * \brief Read message in simple, JavaScript-embeddable form for 'forward' * or 'reply quoted' operations. * * NOTE: it is VITALLY IMPORTANT that we output no single-quotes or linebreaks * in this function. Doing so would throw a JavaScript error in the * 'supplied text' argument to the editor. + * \param msgnum the citadel message number + * \param forward_attachments atachment to forward??? */ void pullquote_message(long msgnum, int forward_attachments) { char buf[SIZ]; @@ -1103,11 +1131,11 @@ void pullquote_message(long msgnum, int forward_attachments) { int i = 0; #ifdef HAVE_ICONV iconv_t ic = (iconv_t)(-1) ; - char *ibuf; /* Buffer of characters to be converted */ - char *obuf; /* Buffer for converted characters */ - size_t ibuflen; /* Length of input buffer */ - size_t obuflen; /* Length of output buffer */ - char *osav; /* Saved pointer to output buffer */ + char *ibuf; /**< Buffer of characters to be converted */ + char *obuf; /**< Buffer for converted characters */ + size_t ibuflen; /**< Length of input buffer */ + size_t obuflen; /**< Length of output buffer */ + char *osav; /**< Saved pointer to output buffer */ #endif strcpy(from, ""); @@ -1186,7 +1214,7 @@ void pullquote_message(long msgnum, int forward_attachments) { wprintf("%s ", now); } - /* + /** * Save attachment info for later. We can't start downloading them * yet because we're in the middle of a server transaction. */ @@ -1211,12 +1239,12 @@ void pullquote_message(long msgnum, int forward_attachments) { wprintf("
"); } - /* + /** * Begin body */ wprintf("
"); - /* + /** * Learn the content type */ strcpy(mime_content_type, "text/plain"); @@ -1242,7 +1270,7 @@ void pullquote_message(long msgnum, int forward_attachments) { } } - /* Set up a character set conversion if we need to (and if we can) */ + /** Set up a character set conversion if we need to (and if we can) */ #ifdef HAVE_ICONV if ( (strcasecmp(mime_charset, "us-ascii")) && (strcasecmp(mime_charset, "UTF-8")) @@ -1256,7 +1284,7 @@ void pullquote_message(long msgnum, int forward_attachments) { } #endif - /* Messages in legacy Citadel variformat get handled thusly... */ + /** Messages in legacy Citadel variformat get handled thusly... */ if (!strcasecmp(mime_content_type, "text/x-citadel-variformat")) { pullquote_fmout(); } @@ -1300,20 +1328,20 @@ void pullquote_message(long msgnum, int forward_attachments) { wprintf("
"); } - /* HTML just gets escaped and stuffed back into the editor */ + /** HTML just gets escaped and stuffed back into the editor */ else if (!strcasecmp(mime_content_type, "text/html")) { while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { msgescputs(buf); } } - /* Unknown weirdness ... don't know how to handle this content type */ + /** Unknown weirdness ... don't know how to handle this content type */ else { while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { } } ENDBODY: - /* end of body handler */ + /** end of body handler */ /* * If there were attachments, we have to download them and insert them @@ -1372,7 +1400,10 @@ ENDBODY: #endif } - +/** + * \brief display sumarized item??? + * \param num hom many? which??? + */ void display_summarized(int num) { char datebuf[64]; @@ -1401,8 +1432,11 @@ void display_summarized(int num) { - - +/** + * \brief display the adressbook overview + * \param msgnum the citadel message number + * \param alpha what???? + */ void display_addressbook(long msgnum, char alpha) { char buf[SIZ]; char mime_partnum[SIZ]; @@ -1441,10 +1475,10 @@ void display_addressbook(long msgnum, char alpha) { vcard_source = load_mimepart(msgnum, vcard_partnum); if (vcard_source != NULL) { - /* Display the summary line */ + /** Display the summary line */ display_vcard(vcard_source, alpha, 0, NULL); - /* If it's my vCard I can edit it */ + /** If it's my vCard I can edit it */ if ( (!strcasecmp(WC->wc_roomname, USERCONFIGROOM)) || (!strcasecmp(&WC->wc_roomname[11], USERCONFIGROOM)) || (WC->wc_view == VIEW_ADDRESSBOOK) @@ -1463,8 +1497,9 @@ void display_addressbook(long msgnum, char alpha) { -/* If it's an old "Firstname Lastname" style record, try to - * convert it. +/** + * \brief If it's an old "Firstname Lastname" style record, try to convert it. + * \param namebuf name to analyze, reverse if nescessary */ void lastfirst_firstlast(char *namebuf) { char firstname[SIZ]; @@ -1483,7 +1518,11 @@ void lastfirst_firstlast(char *namebuf) { sprintf(namebuf, "%s; %s", lastname, firstname); } - +/** + * \brief fetch what??? name + * \param msgnum the citadel message number + * \param namebuf where to put the name in??? + */ void fetch_ab_name(long msgnum, char *namebuf) { char buf[SIZ]; char mime_partnum[SIZ]; @@ -1502,7 +1541,7 @@ void fetch_ab_name(long msgnum, char *namebuf) { memset(&summ, 0, sizeof(summ)); safestrncpy(summ.subj, "(no subject)", sizeof summ.subj); - sprintf(buf, "MSG0 %ld|1", msgnum); /* ask for headers only */ + sprintf(buf, "MSG0 %ld|1", msgnum); /** ask for headers only */ serv_puts(buf); serv_getln(buf, sizeof buf); if (buf[0] != '1') return; @@ -1543,8 +1582,10 @@ void fetch_ab_name(long msgnum, char *namebuf) { -/* - * Record compare function for sorting address book indices +/** + * \brief Record compare function for sorting address book indices + * \param ab1 adressbook one + * \param ab2 adressbook two */ int abcmp(const void *ab1, const void *ab2) { return(strcasecmp( @@ -1554,9 +1595,11 @@ int abcmp(const void *ab1, const void *ab2) { } -/* - * Helper function for do_addrbook_view() +/** + * \brief Helper function for do_addrbook_view() * Converts a name into a three-letter tab label + * \param tabbuf the tabbuffer to add name to + * \param name the name to add to the tabbuffer */ void nametab(char *tabbuf, char *name) { stresc(tabbuf, name, 0, 0); @@ -1567,8 +1610,10 @@ void nametab(char *tabbuf, char *name) { } -/* - * Render the address book using info we gathered during the scan +/** + * \brief Render the address book using info we gathered during the scan + * \param addrbook the addressbook to render + * \param num_ab the number of the addressbook */ void do_addrbook_view(struct addrbookent *addrbook, int num_ab) { int i = 0; @@ -1657,8 +1702,10 @@ void do_addrbook_view(struct addrbookent *addrbook, int num_ab) { -/* - * load message pointers from the server +/** + * \brief load message pointers from the server + * \param servcmd the citadel command to send to the citserver + * \param with_headers what headers??? */ int load_msg_ptrs(char *servcmd, int with_headers) { @@ -1721,7 +1768,7 @@ int load_msg_ptrs(char *servcmd, int with_headers) sizeof WC->summ[nummsgs-1].subj); } #ifdef HAVE_ICONV - /* Handle subjects with RFC2047 encoding */ + /** Handle subjects with RFC2047 encoding */ utf8ify_rfc822_string(WC->summ[nummsgs-1].subj); #endif if (strlen(WC->summ[nummsgs-1].subj) > 75) { @@ -1741,7 +1788,7 @@ int load_msg_ptrs(char *servcmd, int with_headers) WC->summ[nummsgs-1].date = datestamp; #ifdef HAVE_ICONV - /* Handle senders with RFC2047 encoding */ + /** Handle senders with RFC2047 encoding */ utf8ify_rfc822_string(WC->summ[nummsgs-1].from); #endif if (strlen(WC->summ[nummsgs-1].from) > 25) { @@ -1753,6 +1800,11 @@ int load_msg_ptrs(char *servcmd, int with_headers) return (nummsgs); } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int longcmp_r(const void *s1, const void *s2) { long l1; long l2; @@ -1766,6 +1818,11 @@ int longcmp_r(const void *s1, const void *s2) { } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int summcmp_subj(const void *s1, const void *s2) { struct message_summary *summ1; struct message_summary *summ2; @@ -1775,6 +1832,11 @@ int summcmp_subj(const void *s1, const void *s2) { return strcasecmp(summ1->subj, summ2->subj); } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int summcmp_rsubj(const void *s1, const void *s2) { struct message_summary *summ1; struct message_summary *summ2; @@ -1784,6 +1846,11 @@ int summcmp_rsubj(const void *s1, const void *s2) { return strcasecmp(summ2->subj, summ1->subj); } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int summcmp_sender(const void *s1, const void *s2) { struct message_summary *summ1; struct message_summary *summ2; @@ -1793,6 +1860,11 @@ int summcmp_sender(const void *s1, const void *s2) { return strcasecmp(summ1->from, summ2->from); } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int summcmp_rsender(const void *s1, const void *s2) { struct message_summary *summ1; struct message_summary *summ2; @@ -1802,6 +1874,11 @@ int summcmp_rsender(const void *s1, const void *s2) { return strcasecmp(summ2->from, summ1->from); } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int summcmp_date(const void *s1, const void *s2) { struct message_summary *summ1; struct message_summary *summ2; @@ -1814,6 +1891,11 @@ int summcmp_date(const void *s1, const void *s2) { else return 0; } +/** + * \brief compare what???? + * \param s1 first thing to compare + * \param s2 second thing to compare + */ int summcmp_rdate(const void *s1, const void *s2) { struct message_summary *summ1; struct message_summary *summ2; @@ -1826,8 +1908,9 @@ int summcmp_rdate(const void *s1, const void *s2) { else return 0; } -/* - * command loop for reading messages +/** + * \brief command loop for reading messages + * \param oper what??? */ void readloop(char *oper) { @@ -1880,10 +1963,10 @@ void readloop(char *oper) } if (strlen(sortby) == 0) sortby = sortpref_value; - /* mailbox sort */ + /** mailbox sort */ if (strlen(sortby) == 0) sortby = "rdate"; - /* message board sort */ + /** message board sort */ if (!strcasecmp(sortby, "reverse")) { bbs_reverse = 1; } @@ -1893,7 +1976,8 @@ void readloop(char *oper) output_headers(1, 1, 1, 0, 0, 0); - /* When in summary mode, always show ALL messages instead of just + /** + * When in summary mode, always show ALL messages instead of just * new or old. Otherwise, show what the user asked for. */ if (!strcmp(oper, "readnew")) { @@ -1918,12 +2002,13 @@ void readloop(char *oper) } if (is_summary) { - strcpy(cmd, "MSGS ALL|||1"); /* fetch header summary */ + strcpy(cmd, "MSGS ALL|||1"); /**< fetch header summary */ startmsg = 1; maxmsgs = 9999999; } - /* Are we doing a summary view? If so, we need to know old messages + /** + * Are we doing a summary view? If so, we need to know old messages * and new messages, so we can do that pretty boldface thing for the * new messages. */ @@ -1938,17 +2023,17 @@ void readloop(char *oper) is_singlecard = atoi(bstr("is_singlecard")); - if (WC->wc_view == VIEW_CALENDAR) { /* calendar */ + if (WC->wc_view == VIEW_CALENDAR) { /**< calendar */ is_calendar = 1; strcpy(cmd, "MSGS ALL"); maxmsgs = 32767; } - if (WC->wc_view == VIEW_TASKS) { /* tasks */ + if (WC->wc_view == VIEW_TASKS) { /**< tasks */ is_tasks = 1; strcpy(cmd, "MSGS ALL"); maxmsgs = 32767; } - if (WC->wc_view == VIEW_NOTES) { /* notes */ + if (WC->wc_view == VIEW_NOTES) { /**< notes */ is_notes = 1; strcpy(cmd, "MSGS ALL"); maxmsgs = 32767; @@ -1974,7 +2059,7 @@ void readloop(char *oper) if (is_summary) { for (a = 0; a < nummsgs; ++a) { - /* Are you a new message, or an old message? */ + /** Are you a new message, or an old message? */ if (is_summary) { if (is_msg_in_mset(old_msgs, WC->msgarr[a])) { WC->summ[a].is_new = 0; @@ -2053,7 +2138,7 @@ void readloop(char *oper) } if (is_summary) { - wprintf("\n"); /* end of 'content' div */ + wprintf("\n"); /** end of 'content' div */ wprintf("\n" ); - /* note that Date and Delete are now in the same column */ + /** note that Date and Delete are now in the same column */ wprintf("
" "
" "" @@ -2101,7 +2186,7 @@ void readloop(char *oper) for (a = 0; a < nummsgs; ++a) { if ((WC->msgarr[a] >= startmsg) && (num_displayed < maxmsgs)) { - /* Display the message */ + /** Display the message */ if (is_summary) { display_summarized(a); } @@ -2138,7 +2223,8 @@ void readloop(char *oper) } } - /* Set the "is_bbview" variable if it appears that we are looking at + /** + * Set the "is_bbview" variable if it appears that we are looking at * a classic bulletin board view. */ if ((!is_tasks) && (!is_calendar) && (!is_addressbook) @@ -2146,19 +2232,19 @@ void readloop(char *oper) is_bbview = 1; } - /* Output loop */ + /** Output loop */ if (displayed_msgs != NULL) { if (bbs_reverse) { qsort(displayed_msgs, num_displayed, sizeof(long), longcmp_r); } - /* if we do a split bbview in the future, begin messages div here */ + /** if we do a split bbview in the future, begin messages div here */ for (a=0; a" - "\n"); /* end of 'fix_scrollbar_bug' div */ - wprintf(""); /* end of 'message_list' div */ + "\n"); /**< end of 'fix_scrollbar_bug' div */ + wprintf(""); /**< end of 'message_list' div */ - /* Here's the grab-it-to-resize-the-message-list widget */ + /** Here's the grab-it-to-resize-the-message-list widget */ wprintf("
" "
" @@ -2179,21 +2265,22 @@ void readloop(char *oper) "
\n" ); - wprintf("
"); /* The preview pane will initially be empty */ + wprintf("
"); /**< The preview pane will initially be empty */ } - /* Bump these because although we're thinking in zero base, the user + /** + * Bump these because although we're thinking in zero base, the user * is a drooling idiot and is thinking in one base. */ ++lowest_displayed; ++highest_displayed; - /* + /** * If we're not currently looking at ALL requested * messages, then display the selector bar */ if (is_bbview) { - /* begin bbview scroller */ + /** begin bbview scroller */ wprintf(""); wprintf(_("Reading #"), lowest_displayed, highest_displayed); @@ -2250,7 +2337,7 @@ void readloop(char *oper) wprintf(" "); wprintf(_("of %d messages."), nummsgs); - /* forward/reverse */ + /** forward/reverse */ wprintf(" \n"); - /* end bbview scroller */ + /** end bbview scroller */ } DONE: if (is_tasks) { - do_tasks_view(); /* Render the task list */ + do_tasks_view(); /** Render the task list */ } if (is_calendar) { - do_calendar_view(); /* Render the calendar */ + do_calendar_view(); /** Render the calendar */ } if (is_addressbook) { - do_addrbook_view(addrbook, num_ab); /* Render the address book */ + do_addrbook_view(addrbook, num_ab); /** Render the address book */ } - /* Note: wDumpContent() will output one additional
tag. */ + /** Note: wDumpContent() will output one additional
tag. */ wDumpContent(1); if (addrbook != NULL) free(addrbook); - /* free the summary */ + /** free the summary */ if (WC->summ != NULL) { free(WC->summ); WC->num_summ = 0; @@ -2296,9 +2383,9 @@ DONE: } -/* - * Back end for post_message() ... this is where the actual message - * gets transmitted to the server. +/** + * \brief Back end for post_message() + * ... this is where the actual message gets transmitted to the server. */ void post_mime_to_server(void) { char boundary[SIZ]; @@ -2308,10 +2395,10 @@ void post_mime_to_server(void) { char *encoded; size_t encoded_length; - /* RFC2045 requires this, and some clients look for it... */ + /** RFC2045 requires this, and some clients look for it... */ serv_puts("MIME-Version: 1.0"); - /* If there are attachments, we have to do multipart/mixed */ + /** If there are attachments, we have to do multipart/mixed */ if (WC->first_attachment != NULL) { is_multipart = 1; } @@ -2323,7 +2410,7 @@ void post_mime_to_server(void) { ++seq ); - /* Remember, serv_printf() appends an extra newline */ + /** Remember, serv_printf() appends an extra newline */ serv_printf("Content-type: multipart/mixed; " "boundary=\"%s\"\n", boundary); serv_printf("This is a multipart message in MIME format.\n"); @@ -2332,14 +2419,14 @@ void post_mime_to_server(void) { serv_puts("Content-type: text/html; charset=utf-8"); serv_puts(""); - serv_puts("\n"); /* Future templates go here */ + serv_puts("\n"); /** Future templates go here */ text_to_server(bstr("msgtext"), 0); serv_puts("\n"); if (is_multipart) { - /* Add in the attachments */ + /** Add in the attachments */ for (att = WC->first_attachment; att!=NULL; att=att->next) { encoded_length = ((att->length * 150) / 100); @@ -2365,8 +2452,8 @@ void post_mime_to_server(void) { } -/* - * Post message (or don't post message) +/** + * \brief Post message (or don't post message) * * Note regarding the "dont_post" variable: * A random value (actually, it's just a timestamp) is inserted as a hidden @@ -2389,7 +2476,7 @@ void post_message(void) if (WC->upload_length > 0) { - /* There's an attachment. Save it to this struct... */ + /** There's an attachment. Save it to this struct... */ att = malloc(sizeof(struct wc_attachment)); memset(att, 0, sizeof(struct wc_attachment)); att->length = WC->upload_length; @@ -2397,7 +2484,7 @@ void post_message(void) strcpy(att->filename, WC->upload_filename); att->next = NULL; - /* And add it to the list. */ + /** And add it to the list. */ if (WC->first_attachment == NULL) { WC->first_attachment = att; } @@ -2407,7 +2494,8 @@ void post_message(void) aptr->next = att; } - /* Mozilla sends a simple filename, which is what we want, + /** + * Mozilla sends a simple filename, which is what we want, * but Satan's Browser sends an entire pathname. Reduce * the path to just a filename if we need to. */ @@ -2418,7 +2506,8 @@ void post_message(void) remove_token(att->filename, 0, '\\'); } - /* Transfer control of this memory from the upload struct + /** + * Transfer control of this memory from the upload struct * to the attachment struct. */ att->data = WC->upload; @@ -2474,8 +2563,8 @@ void post_message(void) -/* - * display the message entry screen +/** + * \brief display the message entry screen */ void display_enter(void) { @@ -2496,7 +2585,8 @@ void display_enter(void) is_anonymous = 1; } - /* Are we perhaps in an address book view? If so, then an "enter + /** + * Are we perhaps in an address book view? If so, then an "enter * message" command really means "add new entry." */ if (WC->wc_view == VIEW_ADDRESSBOOK) { @@ -2505,7 +2595,8 @@ void display_enter(void) } #ifdef WEBCIT_WITH_CALENDAR_SERVICE - /* Are we perhaps in a calendar view? If so, then an "enter + /** + * Are we perhaps in a calendar view? If so, then an "enter * message" command really means "add new calendar item." */ if (WC->wc_view == VIEW_CALENDAR) { @@ -2513,7 +2604,8 @@ void display_enter(void) return; } - /* Are we perhaps in a tasks view? If so, then an "enter + /** + * Are we perhaps in a tasks view? If so, then an "enter * message" command really means "add new task." */ if (WC->wc_view == VIEW_TASKS) { @@ -2522,7 +2614,7 @@ void display_enter(void) } #endif - /* + /** * Otherwise proceed normally. * Do a custom room banner with no navbar... */ @@ -2534,35 +2626,35 @@ void display_enter(void) "
" "
"); - /* First test to see whether this is a room that requires recipients to be entered */ + /** First test to see whether this is a room that requires recipients to be entered */ serv_puts("ENT0 0"); serv_getln(buf, sizeof buf); - if (!strncmp(buf, "570", 3)) { /* 570 means that we need a recipient here */ + if (!strncmp(buf, "570", 3)) { /** 570 means that we need a recipient here */ recipient_required = 1; } - else if (buf[0] != '2') { /* Any other error means that we cannot continue */ + else if (buf[0] != '2') { /** Any other error means that we cannot continue */ wprintf("%s
\n", &buf[4]); goto DONE; } - /* Now check our actual recipients if there are any */ + /** Now check our actual recipients if there are any */ if (recipient_required) { sprintf(buf, "ENT0 0|%s|%d|0||||%s|%s", bstr("recp"), is_anonymous, bstr("cc"), bstr("bcc")); serv_puts(buf); serv_getln(buf, sizeof buf); - if (!strncmp(buf, "570", 3)) { /* 570 means we have an invalid recipient listed */ + if (!strncmp(buf, "570", 3)) { /** 570 means we have an invalid recipient listed */ if (strlen(bstr("recp")) + strlen(bstr("cc")) + strlen(bstr("bcc")) > 0) { recipient_bad = 1; } } - else if (buf[0] != '2') { /* Any other error means that we cannot continue */ + else if (buf[0] != '2') { /** Any other error means that we cannot continue */ wprintf("%s
\n", &buf[4]); goto DONE; } } - /* If we got this far, we can display the message entry screen. */ + /** If we got this far, we can display the message entry screen. */ now = time(NULL); fmt_date(buf, now, 0); @@ -2579,7 +2671,7 @@ void display_enter(void) strcat(&buf[strlen(buf)], _(" in ")); stresc(&buf[strlen(buf)], WC->wc_roomname, 1, 1); - /* begin message entry screen */ + /** begin message entry screen */ wprintf("
\n", now); wprintf("\""); - wprintf("%s\n", buf); /* header bar */ + wprintf("%s\n", buf); /** header bar */ if (WC->room_flags & QR_ANONOPT) { wprintf(" " "", @@ -2595,7 +2687,7 @@ void display_enter(void) ); wprintf("Anonymous"); } - wprintf("
\n"); /* header bar */ + wprintf("
\n"); /** header bar */ wprintf("\n"); if (recipient_required) { @@ -2633,7 +2725,7 @@ void display_enter(void) wprintf("
"); wprintf("\n"); - /* Initialize the autocomplete ajax helpers (found in wclib.js) */ + /** Initialize the autocomplete ajax helpers (found in wclib.js) */ wprintf(" \n" @@ -2663,7 +2755,7 @@ void display_enter(void) wprintf(""); wprintf("
\n"); - /* + /** * The following script embeds the TinyMCE richedit control, and automatically * transforms the textarea into a richedit textarea. */ @@ -2736,7 +2828,7 @@ void display_enter(void) ); - /* Enumerate any attachments which are already in place... */ + /** Enumerate any attachments which are already in place... */ wprintf(" "); wprintf(_("Attachments:")); @@ -2752,14 +2844,14 @@ void display_enter(void) } wprintf(""); - /* Now offer the ability to attach additional files... */ + /** Now offer the ability to attach additional files... */ wprintf("   "); wprintf(_("Attach file:")); wprintf(" \n  " "\n", _("Add")); - /* Seth asked for these to be at the top *and* bottom... */ + /** Seth asked for these to be at the top *and* bottom... */ wprintf(" " "\n", _("Cancel")); - /* Make sure we only insert our signature once */ + /** Make sure we only insert our signature once */ if (strcmp(bstr("sig_inserted"), "yes")) { wprintf("\n"); } @@ -2782,7 +2874,9 @@ DONE: wDumpContent(1); - +/** + * \brief delete a message + */ void delete_msg(void) { long msgid; @@ -2792,10 +2886,10 @@ void delete_msg(void) output_headers(1, 1, 1, 0, 0, 0); - if (WC->wc_is_trash) { /* Delete from Trash is a real delete */ + if (WC->wc_is_trash) { /** Delete from Trash is a real delete */ serv_printf("DELE %ld", msgid); } - else { /* Otherwise move it to Trash */ + else { /** Otherwise move it to Trash */ serv_printf("MOVE %ld|_TRASH_|0", msgid); } @@ -2808,8 +2902,8 @@ void delete_msg(void) -/* - * Confirm move of a message +/** + * \brief Confirm move of a message */ void confirm_move_msg(void) { @@ -2861,7 +2955,9 @@ void confirm_move_msg(void) } - +/** + * \brief move a message to another folder + */ void move_msg(void) { long msgid; @@ -2881,3 +2977,6 @@ void move_msg(void) readloop("readnew"); } + + +/*@}*/ diff --git a/webcit/mime_parser.c b/webcit/mime_parser.c index f3fb942bd..dcc0cb552 100644 --- a/webcit/mime_parser.c +++ b/webcit/mime_parser.c @@ -1,18 +1,24 @@ /* * $Id$ - * - * This is the MIME parser for Citadel. + */ +/** + * \defgroup MIME This is the MIME parser for Citadel. * * Copyright (c) 1998-2005 by Art Cancro * This code is distributed under the terms of the GNU General Public License. * */ - +/*@{*/ #include "webcit.h" #include "webserver.h" #include "mime_parser.h" - +/** + * \brief get mime key + * \param target where to put the mime buffer at??? + * \param source where to extract the mimetype from + * \param key what??? + */ void extract_key(char *target, char *source, char *key) { int a, b; @@ -34,9 +40,11 @@ void extract_key(char *target, char *source, char *key) } -/* - * For non-multipart messages, we need to generate a quickie partnum of "1" +/** + * \brief For non-multipart messages, we need to generate a quickie partnum of "1" * to return to callback functions. Some callbacks demand it. + * \param supplied_partnum partnum to convert + * \return the converted num */ char *fixed_partnum(char *supplied_partnum) { if (supplied_partnum == NULL) return "1"; @@ -46,8 +54,11 @@ char *fixed_partnum(char *supplied_partnum) { -/* - * Convert "quoted-printable" to binary. Returns number of bytes decoded. +/** + * \brief Convert "quoted-printable" to binary. Returns number of bytes decoded. + * \param decoded the buffer with the decoded output + * \param encoded the encoded string to decode + * \param sourcelen length of the decoded buffer */ int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen) { char buf[SIZ]; @@ -110,9 +121,24 @@ int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen) { return(decoded_length); } -/* +/** + * \brief fully decode a message * Given a message or message-part body and a length, handle any necessary * decoding and pass the request up the stack. + * \param partnum todo ????? + * \param part_start todo + * \param length todo + * \param content_type todo + * \param charset todo + * \param encoding todo + * \param disposition todo + * \param name todo + * \param filename todo + * \param CallBack todo + * \param PreMultiPartCallBack todo + * \param PostMultiPartCallBack todo + * \param userdata todo + * \param dont_decode todo */ void mime_decode(char *partnum, char *part_start, size_t length, @@ -182,7 +208,7 @@ void mime_decode(char *partnum, && (strcasecmp(encoding, "quoted-printable"))) { return; } - /* + /** * Allocate a buffer for the decoded data. The output buffer is the * same size as the input buffer; this assumes that the decoded data * will never be larger than the encoded data. This is a safe @@ -210,11 +236,19 @@ void mime_decode(char *partnum, free(decoded); } -/* - * Break out the components of a multipart message +/** + * \brief Break out the components of a multipart message * (This function expects to be fed HEADERS + CONTENT) * Note: NULL can be supplied as content_end; in this case, the message is * considered to have ended when the parser encounters a 0x00 byte. + * \param partnum todo + * \param content_start todo ????? + * \param content_end todo + * \param CallBack todo + * \param PreMultiPartCallBack + * \param PostMultiPartCallBack + * \param userdata todo + * \param dont_decode todo */ void the_mime_parser(char *partnum, char *content_start, char *content_end, @@ -317,12 +351,12 @@ void the_mime_parser(char *partnum, disposition = malloc(SIZ); memset(disposition, 0, SIZ); - /* If the caller didn't supply an endpointer, generate one by measure */ + /** If the caller didn't supply an endpointer, generate one by measure */ if (content_end == NULL) { content_end = &content_start[strlen(content_start)]; } - /* Learn interesting things from the headers */ + /** Learn interesting things from the headers */ strcpy(header, ""); do { ptr = memreadline(ptr, buf, SIZ); @@ -341,7 +375,7 @@ void the_mime_parser(char *partnum, strcpy(content_type, &header[14]); extract_key(content_type_name, content_type, "name"); extract_key(charset, content_type, "charset"); - /* Deal with weird headers */ + /** Deal with weird headers */ if (strchr(content_type, ' ')) *(strchr(content_type, ' ')) = '\0'; if (strchr(content_type, ';')) @@ -379,18 +413,18 @@ void the_mime_parser(char *partnum, is_multipart = 0; } - /* If this is a multipart message, then recursively process it */ + /** If this is a multipart message, then recursively process it */ part_start = NULL; if (is_multipart) { - /* Tell the client about this message's multipartedness */ + /** Tell the client about this message's multipartedness */ if (PreMultiPartCallBack != NULL) { PreMultiPartCallBack("", "", partnum, "", NULL, content_type, charset, 0, encoding, userdata); } - /* Figure out where the boundaries are */ + /** Figure out where the boundaries are */ snprintf(startary, SIZ, "--%s", boundary); snprintf(endary, SIZ, "--%s--", boundary); startary_len = strlen(startary); @@ -430,20 +464,21 @@ void the_mime_parser(char *partnum, } if (next_boundary != NULL) { - /* If we pass out of scope, don't attempt to + /** + * If we pass out of scope, don't attempt to * read past the end boundary. */ if (!strcmp(next_boundary, endary)) { ptr = content_end; } else { - /* Set up for the next part. */ + /** Set up for the next part. */ part_start = strstr(next_boundary, "\n"); ++part_start; ptr = part_start; } } else { - /* Invalid end of multipart. Bail out! */ + /** Invalid end of multipart. Bail out! */ ptr = content_end; } } while ( (ptr < content_end) && (next_boundary != NULL) ); @@ -455,7 +490,7 @@ void the_mime_parser(char *partnum, goto end_parser; } - /* If it's not a multipart message, then do something with it */ + /** If it's not a multipart message, then do something with it */ if (!is_multipart) { part_start = ptr; length = 0; @@ -464,16 +499,17 @@ void the_mime_parser(char *partnum, ++length; } part_end = content_end; - /* fix an off-by-one error */ + /** fix an off-by-one error */ --part_end; --length; - /* Truncate if the header told us to */ + /** Truncate if the header told us to */ if ( (content_length > 0) && (length > content_length) ) { length = content_length; } - /* Sometimes the "name" field is tacked on to Content-type, + /** + * Sometimes the "name" field is tacked on to Content-type, * and sometimes it's tacked on to Content-disposition. Use * whichever one we have. */ @@ -489,7 +525,8 @@ void the_mime_parser(char *partnum, partnum, length, content_type, charset, encoding); */ - /* Ok, we've got a non-multipart part here, so do something with it. + /** + * Ok, we've got a non-multipart part here, so do something with it. */ mime_decode(partnum, part_start, length, @@ -499,7 +536,7 @@ void the_mime_parser(char *partnum, userdata, dont_decode ); - /* + /** * Now if it's an encapsulated message/rfc822 then we have to recurse into it */ if (!strcasecmp(content_type, "message/rfc822")) { @@ -540,7 +577,7 @@ void the_mime_parser(char *partnum, } -end_parser: /* free the buffers! end the oppression!! */ +end_parser: /** free the buffers! end the oppression!! */ free(boundary); free(startary); free(endary); @@ -556,11 +593,18 @@ end_parser: /* free the buffers! end the oppression!! */ -/* - * Entry point for the MIME parser. +/** + * \brief Entry point for the MIME parser. * (This function expects to be fed HEADERS + CONTENT) * Note: NULL can be supplied as content_end; in this case, the message is * considered to have ended when the parser encounters a 0x00 byte. + * \param content_start todo ????????? + * \param content_end todo + * \param CallBack todo + * \param PreMultiPartCallBack todo + * \param PostMultiPartCallBack todo + * \param userdata todo + * \param dont_decode todo */ void mime_parser(char *content_start, char *content_end, @@ -612,3 +656,7 @@ void mime_parser(char *content_start, PostMultiPartCallBack, userdata, dont_decode); } + + + +/*@}*/ -- 2.30.2