/* * libEtPan! -- a mail stuff library * * Copyright (C) 2001, 2005 - DINH Viet Hoa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the libEtPan! project nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Id$ */ #ifdef DEBUG #include "mailimap_print.h" #include static void mailimap_body_fields_print(struct mailimap_body_fields * body_fields); static void mailimap_envelope_print(struct mailimap_envelope * env); static void mailimap_body_print(struct mailimap_body * body); static void mailimap_body_fld_enc_print(struct mailimap_body_fld_enc * fld_enc); static int indent_size = 0; static void indent() { indent_size ++; } static void unindent() { indent_size --; } static void print_indent() { int i; for (i = 0 ; i < indent_size ; i++) printf(" "); } static void mailimap_body_fld_lang_print(struct mailimap_body_fld_lang * fld_lang) { clistiter * cur; print_indent(); printf("body-fld-lang { "); switch (fld_lang->lg_type) { case MAILIMAP_BODY_FLD_LANG_SINGLE: printf("%s ", fld_lang->lg_data.lg_single); break; case MAILIMAP_BODY_FLD_LANG_LIST: for(cur = clist_begin(fld_lang->lg_data.lg_list) ; cur != NULL ; cur = clist_next(cur)) { char * lang; lang = clist_content(cur); printf("%s ", lang); } break; } print_indent(); printf("}\n"); } static void mailimap_single_body_fld_param_print(struct mailimap_single_body_fld_param * single) { printf("(%s = %s)", single->pa_name, single->pa_value); } static void mailimap_body_fld_param_print(struct mailimap_body_fld_param * fld_param) { clistiter * cur; print_indent(); printf("body-fld-param { "); for(cur = clist_begin(fld_param->pa_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_single_body_fld_param * single; single = clist_content(cur); mailimap_single_body_fld_param_print(single); printf(" "); } printf("\n"); } static void mailimap_body_fld_dsp_print(struct mailimap_body_fld_dsp * fld_dsp) { print_indent(); printf("body-fld-dsp {\n"); indent(); print_indent(); printf("name { %s }\n", fld_dsp->dsp_type); mailimap_body_fld_param_print(fld_dsp->dsp_attributes); unindent(); print_indent(); printf("}\n"); } static void mailimap_body_extension_list_print(clist * ext_list); static void mailimap_body_extension_print(struct mailimap_body_extension * ext) { print_indent(); printf("body-extention {\n"); indent(); switch (ext->ext_type) { case MAILIMAP_BODY_EXTENSION_NSTRING: print_indent(); printf("%s\n", ext->ext_data.ext_nstring); break; case MAILIMAP_BODY_EXTENSION_NUMBER: print_indent(); printf("%i\n", ext->ext_data.ext_number); break; case MAILIMAP_BODY_EXTENSION_LIST: mailimap_body_extension_list_print(ext->ext_data.ext_body_extension_list); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_body_extension_list_print(clist * ext_list) { clistiter * cur; print_indent(); printf("body-extention-list {\n"); indent(); for (cur = clist_begin(ext_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_body_extension * ext; ext = clist_content(cur); mailimap_body_extension_print(ext); } unindent(); print_indent(); printf("}"); } static void mailimap_body_ext_1part_print(struct mailimap_body_ext_1part * body_ext_1part) { print_indent(); printf("body-type-1part {\n"); indent(); print_indent(); printf("md5 { %s }\n", body_ext_1part->bd_md5); if (body_ext_1part->bd_disposition) { mailimap_body_fld_dsp_print(body_ext_1part->bd_disposition); if (body_ext_1part->bd_language) { mailimap_body_fld_lang_print(body_ext_1part->bd_language); if (body_ext_1part->bd_extension_list) mailimap_body_extension_list_print(body_ext_1part->bd_extension_list); } } unindent(); print_indent(); printf("}\n"); } static void mailimap_body_type_text_print(struct mailimap_body_type_text * body_type_text) { print_indent(); printf("body-type-text {\n"); indent(); print_indent(); printf("media-text { %s }\n", body_type_text->bd_media_text); mailimap_body_fields_print(body_type_text->bd_fields); print_indent(); printf("lines { %i }\n", body_type_text->bd_lines); unindent(); print_indent(); printf("}\n"); } static void mailimap_body_type_msg_print(struct mailimap_body_type_msg * body_type_msg) { print_indent(); printf("body-type-msg {\n"); indent(); mailimap_body_fields_print(body_type_msg->bd_fields); mailimap_envelope_print(body_type_msg->bd_envelope); mailimap_body_print(body_type_msg->bd_body); print_indent(); printf("lines { %i }\n", body_type_msg->bd_lines); unindent(); print_indent(); printf("}\n"); } static void mailimap_body_fld_enc_print(struct mailimap_body_fld_enc * fld_enc) { print_indent(); printf("body-fld-enc { "); switch (fld_enc->enc_type) { case MAILIMAP_BODY_FLD_ENC_7BIT: print_indent(); printf("7bit"); break; case MAILIMAP_BODY_FLD_ENC_8BIT: printf("8bit"); break; case MAILIMAP_BODY_FLD_ENC_BINARY: printf("binary"); break; case MAILIMAP_BODY_FLD_ENC_BASE64: printf("base64"); break; case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: printf("quoted-printable"); break; case MAILIMAP_BODY_FLD_ENC_OTHER: printf("%s", fld_enc->enc_value); break; } printf("}\n"); } static void mailimap_body_fields_print(struct mailimap_body_fields * body_fields) { print_indent(); printf("body-fields {\n"); indent(); mailimap_body_fld_param_print(body_fields->bd_parameter); print_indent(); printf("body-fld-id { %s }\n", body_fields->bd_id); printf("body-fld-desc { %s }\n", body_fields->bd_description); mailimap_body_fld_enc_print(body_fields->bd_encoding); printf("body-fld-octets { %i }\n", body_fields->bd_size); unindent(); print_indent(); printf("}\n"); } static void mailimap_media_basic_print(struct mailimap_media_basic * media_basic) { print_indent(); printf("media-basic {"); switch (media_basic->med_type) { case MAILIMAP_MEDIA_BASIC_APPLICATION: printf("application"); break; case MAILIMAP_MEDIA_BASIC_AUDIO: printf("audio"); break; case MAILIMAP_MEDIA_BASIC_IMAGE: printf("image"); break; case MAILIMAP_MEDIA_BASIC_MESSAGE: printf("message"); break; case MAILIMAP_MEDIA_BASIC_VIDEO: printf("video"); break; case MAILIMAP_MEDIA_BASIC_OTHER: printf("%s", media_basic->med_basic_type); break; } printf(" / %s }\n", media_basic->med_subtype); } static void mailimap_body_type_basic_print(struct mailimap_body_type_basic * body_type_basic) { print_indent(); printf("body-type-basic {\n"); indent(); mailimap_media_basic_print(body_type_basic->bd_media_basic); mailimap_body_fields_print(body_type_basic->bd_fields); unindent(); print_indent(); printf("}\n"); } static void mailimap_body_type_1part_print(struct mailimap_body_type_1part * body_type_1part) { print_indent(); printf("body-type-1part {\n"); indent(); switch (body_type_1part->bd_type) { case MAILIMAP_BODY_TYPE_1PART_BASIC: mailimap_body_type_basic_print(body_type_1part->bd_data.bd_type_basic); break; case MAILIMAP_BODY_TYPE_1PART_MSG: mailimap_body_type_msg_print(body_type_1part->bd_data.bd_type_msg); break; case MAILIMAP_BODY_TYPE_1PART_TEXT: mailimap_body_type_text_print(body_type_1part->bd_data.bd_type_text); break; } if (body_type_1part->bd_ext_1part != NULL) mailimap_body_ext_1part_print(body_type_1part->bd_ext_1part); unindent(); print_indent(); printf("\n"); } static void mailimap_body_ext_mpart(struct mailimap_body_ext_mpart * ext_mpart) { print_indent(); printf("body-ext-mpart {\n"); indent(); mailimap_body_fld_param_print(ext_mpart->bd_parameter); if (ext_mpart->bd_disposition) { mailimap_body_fld_dsp_print(ext_mpart->bd_disposition); if (ext_mpart->bd_language) { mailimap_body_fld_lang_print(ext_mpart->bd_language); if (ext_mpart->bd_extension_list) mailimap_body_extension_list_print(ext_mpart->bd_extension_list); } } unindent(); print_indent(); printf("\n"); } static void mailimap_body_type_mpart_print(struct mailimap_body_type_mpart * mpart) { clistiter * cur; print_indent(); printf("body-type-mpart {\n"); indent(); for(cur = clist_begin(mpart->bd_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_body * body; body = clist_content(cur); mailimap_body_print(body); } printf("media-subtype { %s }\n", mpart->bd_media_subtype); if (mpart->bd_ext_mpart) mailimap_body_ext_mpart(mpart->bd_ext_mpart); unindent(); print_indent(); printf("}\n"); } static void mailimap_body_print(struct mailimap_body * body) { print_indent(); printf("body {\n"); indent(); switch (body->bd_type) { case MAILIMAP_BODY_1PART: mailimap_body_type_1part_print(body->bd_data.bd_body_1part); break; case MAILIMAP_BODY_MPART: mailimap_body_type_mpart_print(body->bd_data.bd_body_mpart); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_date_time_print(struct mailimap_date_time * date_time) { print_indent(); printf("date-time { %i/%i/%i - %i:%i:%i %i }\n", date_time->dt_day, date_time->dt_month, date_time->dt_year, date_time->dt_hour, date_time->dt_min, date_time->dt_month, date_time->dt_zone); } static void mailimap_address_print(struct mailimap_address * address) { print_indent(); printf("address { name: %s, addr: %s, mailbox: %s, host: %s) }\n", address->ad_personal_name, address->ad_source_route, address->ad_mailbox_name, address->ad_host_name); } static void mailimap_envelope_address_list_print(clist * address) { clistiter * cur; print_indent(); printf("envelope-address-list {\n"); indent(); for(cur = clist_begin(address) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_address * addr; addr = clist_content(cur); mailimap_address_print(addr); } unindent(); print_indent(); printf("}\n"); } static void mailimap_envelope_print(struct mailimap_envelope * env) { print_indent(); printf("envelope {\n"); indent(); print_indent(); printf("date { %s }\n", env->env_date); print_indent(); printf("subject { %s }\n", env->env_subject); print_indent(); printf("from {\n"); indent(); mailimap_envelope_address_list_print(env->env_from->frm_list); unindent(); print_indent(); printf("}\n"); print_indent(); printf("sender {\n"); indent(); mailimap_envelope_address_list_print(env->env_sender->snd_list); unindent(); print_indent(); printf("}\n"); print_indent(); printf("reply-to {\n"); indent(); mailimap_envelope_address_list_print(env->env_reply_to->rt_list); unindent(); print_indent(); printf("}\n"); print_indent(); printf("to {\n"); indent(); mailimap_envelope_address_list_print(env->env_to->to_list); unindent(); print_indent(); printf("}\n"); print_indent(); printf("cc {\n"); indent(); mailimap_envelope_address_list_print(env->env_cc->cc_list); unindent(); print_indent(); printf("}\n"); print_indent(); printf("bcc {\n"); indent(); mailimap_envelope_address_list_print(env->env_bcc->bcc_list); unindent(); print_indent(); printf("}\n"); printf("in-reply-to { %s }\n", env->env_in_reply_to); printf("message-id { %s }\n", env->env_message_id); unindent(); print_indent(); printf("}\n"); } static void mailimap_header_list_print(struct mailimap_header_list * header_list) { clistiter * cur; print_indent(); printf("header-list { "); for(cur = clist_begin(header_list->hdr_list) ; cur != NULL ; cur = clist_next(cur)) printf("%s ", (char *) clist_content(cur)); printf("}\n"); } static void mailimap_section_msgtext_print(struct mailimap_section_msgtext * section_msgtext) { print_indent(); printf("section-msgtext {\n"); indent(); switch(section_msgtext->sec_type) { case MAILIMAP_SECTION_MSGTEXT_HEADER: print_indent(); printf("header\n"); break; case MAILIMAP_SECTION_MSGTEXT_HEADER_FIELDS: print_indent(); printf("header fields {"); indent(); mailimap_header_list_print(section_msgtext->sec_header_list); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_SECTION_MSGTEXT_HEADER_FIELDS_NOT: print_indent(); printf("header fields not {"); indent(); mailimap_header_list_print(section_msgtext->sec_header_list); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_SECTION_MSGTEXT_TEXT: print_indent(); printf("text\n"); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_section_part_print(struct mailimap_section_part * section_part) { clistiter * cur; print_indent(); printf("section-part { "); for(cur = clist_begin(section_part->sec_id) ; cur != NULL ; cur = clist_next(cur)) { printf("%i", * ((uint32_t *) clist_content(cur))); if (clist_next(cur) != NULL) printf("."); } printf(" }\n"); } static void mailimap_section_text_print(struct mailimap_section_text * section_text) { print_indent(); printf("section-text {\n"); indent(); switch (section_text->sec_type) { case MAILIMAP_SECTION_TEXT_MIME: print_indent(); printf("MIME"); break; case MAILIMAP_SECTION_TEXT_SECTION_MSGTEXT: mailimap_section_msgtext_print(section_text->sec_msgtext); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_section_spec_print(struct mailimap_section_spec * section_spec) { print_indent(); printf("section-spec {"); indent(); switch(section_spec->sec_type) { case MAILIMAP_SECTION_SPEC_SECTION_MSGTEXT: mailimap_section_msgtext_print(section_spec->sec_data.sec_msgtext); break; case MAILIMAP_SECTION_SPEC_SECTION_PART: mailimap_section_part_print(section_spec->sec_data.sec_part); if (section_spec->sec_text != NULL) mailimap_section_text_print(section_spec->sec_text); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_section_print(struct mailimap_section * section) { print_indent(); printf("section {\n"); indent(); if (section != NULL) if (section->sec_spec != NULL) mailimap_section_spec_print(section->sec_spec); unindent(); print_indent(); printf("}\n"); } static void mailimap_msg_att_body_section_print(struct mailimap_msg_att_body_section * msg_att_body_section) { print_indent(); printf("msg-att-body-section {\n"); indent(); mailimap_section_print(msg_att_body_section->sec_section); printf("origin-octet: %i\n", msg_att_body_section->sec_origin_octet); printf("body-part: %s\n", msg_att_body_section->sec_body_part); unindent(); print_indent(); printf("}\n"); } static void mailimap_msg_att_static_print(struct mailimap_msg_att_static * msg_att_static) { print_indent(); printf("msg-att-static {\n"); indent(); switch (msg_att_static->att_type) { case MAILIMAP_MSG_ATT_ENVELOPE: print_indent(); printf("envelope {\n"); indent(); print_indent(); mailimap_envelope_print(msg_att_static->att_data.att_env); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_INTERNALDATE: print_indent(); printf("internaldate {\n"); indent(); print_indent(); mailimap_date_time_print(msg_att_static->att_data.att_internal_date); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_RFC822: print_indent(); printf("rfc822 {\n"); printf("%s\n", msg_att_static->att_data.att_rfc822.att_content); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_RFC822_HEADER: print_indent(); printf("rfc822-header {\n"); printf("%s\n", msg_att_static->att_data.att_rfc822_header.att_content); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_RFC822_TEXT: print_indent(); printf("rfc822-text {\n"); printf("%s\n", msg_att_static->att_data.att_rfc822_text.att_content); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_RFC822_SIZE: print_indent(); printf("rfc822-size { %i }\n", msg_att_static->att_data.att_rfc822_size); break; case MAILIMAP_MSG_ATT_BODY: print_indent(); printf("body {\n"); indent(); print_indent(); mailimap_body_print(msg_att_static->att_data.att_body); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_BODYSTRUCTURE: print_indent(); printf("bodystructure {\n"); indent(); print_indent(); mailimap_body_print(msg_att_static->att_data.att_bodystructure); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_BODY_SECTION: print_indent(); printf("body-section {\n"); indent(); print_indent(); mailimap_msg_att_body_section_print(msg_att_static->att_data.att_body_section); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MSG_ATT_UID: printf("uid { %i }\n", msg_att_static->att_data.att_uid); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_flag_print(struct mailimap_flag * flag); static void mailimap_flag_fetch_print(struct mailimap_flag_fetch * flag) { print_indent(); printf("flag fetch {\n"); indent(); switch (flag->fl_type) { case MAILIMAP_FLAG_FETCH_RECENT: printf("recent\n"); break; case MAILIMAP_FLAG_FETCH_OTHER: print_indent(); printf("flag {\n"); indent(); mailimap_flag_print(flag->fl_flag); unindent(); print_indent(); printf("}\n"); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_msg_att_dynamic_print(struct mailimap_msg_att_dynamic * dynamic) { clistiter * cur; print_indent(); printf("msg-att-dynamic {\n"); indent(); for(cur = clist_begin(dynamic->att_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_flag_fetch * flag; flag = (struct mailimap_flag_fetch *) clist_content(cur); mailimap_flag_fetch_print(flag); } unindent(); print_indent(); printf("}\n"); } static void mailimap_msg_att_item_print(struct mailimap_msg_att_item * item) { print_indent(); printf("msg-att-item {\n"); indent(); switch (item->att_type) { case MAILIMAP_MSG_ATT_ITEM_DYNAMIC: mailimap_msg_att_dynamic_print(item->att_data.att_dyn); break; case MAILIMAP_MSG_ATT_ITEM_STATIC: mailimap_msg_att_static_print(item->att_data.att_static); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_msg_att_print(struct mailimap_msg_att * msg_att) { clistiter * cur; print_indent(); printf("msg-att {\n"); indent(); for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_msg_att_item * item; item = clist_content(cur); mailimap_msg_att_item_print(item); } unindent(); print_indent(); printf("}\n"); } static void mailimap_message_data_print(struct mailimap_message_data * msg_data) { print_indent(); printf("message-data {\n"); indent(); switch (msg_data->mdt_type) { case MAILIMAP_MESSAGE_DATA_EXPUNGE: print_indent(); printf("expunged { %i }\n", msg_data->mdt_number); break; case MAILIMAP_MESSAGE_DATA_FETCH: print_indent(); printf("message-number { %i }\n", msg_data->mdt_number); mailimap_msg_att_print(msg_data->mdt_msg_att); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_status_att_print(int status_att) { print_indent(); printf("status-att { "); switch(status_att) { case MAILIMAP_STATUS_ATT_MESSAGES: printf("messages"); break; case MAILIMAP_STATUS_ATT_RECENT: printf("recent"); break; case MAILIMAP_STATUS_ATT_UIDNEXT: printf("uidnext"); break; case MAILIMAP_STATUS_ATT_UIDVALIDITY: printf("status att uidvalidity"); break; case MAILIMAP_STATUS_ATT_UNSEEN: printf("status att unseen"); break; } printf(" \n"); } static void mailimap_status_info_print(struct mailimap_status_info * info) { print_indent(); printf("status-info {\n"); indent(); mailimap_status_att_print(info->st_att); print_indent(); printf("value { %i }\n", info->st_value); unindent(); print_indent(); printf("}\n"); } static void mailimap_mailbox_data_status_print(struct mailimap_mailbox_data_status * mb_data_status) { clistiter * cur; print_indent(); printf("mailbox-data-status {\n"); indent(); print_indent(); printf("mailbox { %s }\n", mb_data_status->st_mailbox); for(cur = clist_begin(mb_data_status->st_info_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_status_info * info; info = clist_content(cur); mailimap_status_info_print(info); } unindent(); print_indent(); printf("}\n"); } static void mailimap_mbx_list_oflag_print(struct mailimap_mbx_list_oflag * oflag) { print_indent(); printf("mbx-list-oflag { "); switch (oflag->of_type) { case MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS: printf("noinferiors"); break; case MAILIMAP_MBX_LIST_OFLAG_FLAG_EXT: printf("%s", oflag->of_flag_ext); break; } printf(" }\n"); } static void mailimap_mbx_list_sflag_print(int sflag) { print_indent(); printf("mbx-list-sflag { "); switch (sflag) { case MAILIMAP_MBX_LIST_SFLAG_MARKED: printf("marked"); break; case MAILIMAP_MBX_LIST_SFLAG_NOSELECT: printf("noselected"); break; case MAILIMAP_MBX_LIST_SFLAG_UNMARKED: printf("unmarked"); break; } printf(" }\n"); } static void mailimap_mbx_list_flags_print(struct mailimap_mbx_list_flags * mbx_list_flags) { clistiter * cur; print_indent(); printf("mbx-list-flags {"); indent(); if (mbx_list_flags->mbf_type == MAILIMAP_MBX_LIST_FLAGS_SFLAG) mailimap_mbx_list_sflag_print(mbx_list_flags->mbf_sflag); for(cur = clist_begin(mbx_list_flags->mbf_oflags) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_mbx_list_oflag * oflag; oflag = clist_content(cur); mailimap_mbx_list_oflag_print(oflag); } unindent(); print_indent(); printf("}\n"); } static void mailimap_mailbox_list_print(struct mailimap_mailbox_list * mb_list) { print_indent(); printf("mailbox-list {\n"); indent(); mailimap_mbx_list_flags_print(mb_list->mb_flag); printf("dir-separator { %c }\n", mb_list->mb_delimiter); printf("mailbox { %s }\n", mb_list->mb_name); unindent(); print_indent(); printf("}\n"); } static void mailimap_flag_list_print(struct mailimap_flag_list * flag_list) { clistiter * cur; print_indent(); printf("flag-list {\n"); indent(); for(cur = clist_begin(flag_list->fl_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_flag * flag; flag = clist_content(cur); print_indent(); mailimap_flag_print(flag); printf("\n"); } unindent(); print_indent(); printf("}\n"); } static void mailimap_mailbox_data_print(struct mailimap_mailbox_data * mb_data) { clistiter * cur; print_indent(); printf("mailbox-data {\n"); indent(); switch (mb_data->mbd_type) { case MAILIMAP_MAILBOX_DATA_FLAGS: print_indent(); printf("flags {\n"); indent(); mailimap_flag_list_print(mb_data->mbd_data.mbd_flags); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MAILBOX_DATA_LIST: print_indent(); printf("list {\n"); indent(); mailimap_mailbox_list_print(mb_data->mbd_data.mbd_list); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MAILBOX_DATA_LSUB: print_indent(); printf("lsub {\n"); indent(); mailimap_mailbox_list_print(mb_data->mbd_data.mbd_lsub); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MAILBOX_DATA_SEARCH: print_indent(); printf("search { "); for(cur = clist_begin(mb_data->mbd_data.mbd_search) ; cur != NULL ; cur = clist_next(cur)) { uint32_t * id; id = clist_content(cur); printf("%i ", * id); } printf(" }\n"); break; case MAILIMAP_MAILBOX_DATA_STATUS: print_indent(); printf("status {\n"); indent(); mailimap_mailbox_data_status_print(mb_data->mbd_data.mbd_status); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_MAILBOX_DATA_EXISTS: print_indent(); printf("exists { %i }\n", mb_data->mbd_data.mbd_exists); break; case MAILIMAP_MAILBOX_DATA_RECENT: print_indent(); printf("recent { %i }\n", mb_data->mbd_data.mbd_recent); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_resp_text_code_print(struct mailimap_resp_text_code * text_code); static void mailimap_resp_text_print(struct mailimap_resp_text * resp_text); static void mailimap_resp_cond_bye_print(struct mailimap_resp_cond_bye * resp_cond_bye) { print_indent(); printf("resp-cond-bye {\n"); indent(); mailimap_resp_text_print(resp_cond_bye->rsp_text); unindent(); print_indent(); printf("}\n"); } static void mailimap_resp_cond_state_print(struct mailimap_resp_cond_state * resp_cond_state) { print_indent(); printf("resp-cond-state {\n"); indent(); switch(resp_cond_state->rsp_type) { case MAILIMAP_RESP_COND_STATE_OK: print_indent(); printf("OK\n"); break; case MAILIMAP_RESP_COND_STATE_NO: print_indent(); printf("NO\n"); break; case MAILIMAP_RESP_COND_STATE_BAD: print_indent(); printf("BAD\n"); break; } mailimap_resp_text_print(resp_cond_state->rsp_text); unindent(); print_indent(); printf("}\n"); } static void mailimap_capability_data_print(struct mailimap_capability_data * cap_data); static void mailimap_response_data_print(struct mailimap_response_data * resp_data) { print_indent(); printf("response-data {\n"); indent(); switch (resp_data->rsp_type) { case MAILIMAP_RESP_DATA_TYPE_COND_STATE: mailimap_resp_cond_state_print(resp_data->rsp_data.rsp_cond_state); break; case MAILIMAP_RESP_DATA_TYPE_COND_BYE: mailimap_resp_cond_bye_print(resp_data->rsp_data.rsp_bye); break; case MAILIMAP_RESP_DATA_TYPE_MAILBOX_DATA: mailimap_mailbox_data_print(resp_data->rsp_data.rsp_mailbox_data); break; case MAILIMAP_RESP_DATA_TYPE_MESSAGE_DATA: mailimap_message_data_print(resp_data->rsp_data.rsp_message_data); break; case MAILIMAP_RESP_DATA_TYPE_CAPABILITY_DATA: mailimap_capability_data_print(resp_data->rsp_data.rsp_capability_data); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_flag_print(struct mailimap_flag * flag) { printf("flag { "); switch (flag->fl_type) { case MAILIMAP_FLAG_ANSWERED: printf("answered"); break; case MAILIMAP_FLAG_FLAGGED: printf("flagged"); break; case MAILIMAP_FLAG_DELETED: printf("deleted"); break; case MAILIMAP_FLAG_SEEN: printf("seen"); break; case MAILIMAP_FLAG_DRAFT: printf("flag draft"); break; case MAILIMAP_FLAG_KEYWORD: printf("keyword { %s }", flag->fl_data.fl_keyword); break; case MAILIMAP_FLAG_EXTENSION: printf("extention { %s }", flag->fl_data.fl_extension); break; } printf(" }"); } static void mailimap_flag_perm_print(struct mailimap_flag_perm * flag_perm) { print_indent(); printf("flag-perm { "); switch (flag_perm->fl_type) { case MAILIMAP_FLAG_PERM_FLAG: mailimap_flag_print(flag_perm->fl_flag); break; case MAILIMAP_FLAG_PERM_ALL: printf("all"); break; } printf(" }\n"); } static void mailimap_capability_print(struct mailimap_capability * cap) { print_indent(); printf("capability { "); switch (cap->cap_type) { case MAILIMAP_CAPABILITY_AUTH_TYPE: printf("auth { %s }", cap->cap_data.cap_auth_type); break; case MAILIMAP_CAPABILITY_NAME: printf("atom { %s }", cap->cap_data.cap_name); break; } printf(" }\n"); } static void mailimap_capability_data_print(struct mailimap_capability_data * cap_data) { clistiter * cur; print_indent(); printf("capability-data {\n"); indent(); for(cur = clist_begin(cap_data->cap_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_capability * cap; cap = clist_content(cur); mailimap_capability_print(cap); } unindent(); print_indent(); printf("}\n"); } static void mailimap_resp_text_code_print(struct mailimap_resp_text_code * text_code) { clistiter * cur; print_indent(); printf("resp-text-code {\n"); indent(); switch (text_code->rc_type) { case MAILIMAP_RESP_TEXT_CODE_BADCHARSET: print_indent(); printf("badcharset { "); for(cur = clist_begin(text_code->rc_data.rc_badcharset) ; cur != NULL ; cur = clist_next(cur)) printf("%s ", (char *) clist_content(cur)); printf("}\n"); break; case MAILIMAP_RESP_TEXT_CODE_CAPABILITY_DATA: print_indent(); printf("capability {\n"); indent(); mailimap_capability_data_print(text_code->rc_data.rc_cap_data); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_RESP_TEXT_CODE_PERMANENTFLAGS: print_indent(); printf("permanent-flags {\n"); indent(); cur = clist_begin(text_code->rc_data.rc_perm_flags); while (cur != NULL) { mailimap_flag_perm_print(clist_content(cur)); cur = clist_next(cur); } unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_RESP_TEXT_CODE_READ_ONLY: print_indent(); printf("readonly\n"); break; case MAILIMAP_RESP_TEXT_CODE_READ_WRITE: print_indent(); printf("readwrite\n"); break; case MAILIMAP_RESP_TEXT_CODE_TRY_CREATE: print_indent(); printf("trycreate\n"); break; case MAILIMAP_RESP_TEXT_CODE_UIDNEXT: print_indent(); printf("uidnext { %i }\n", text_code->rc_data.rc_uidnext); break; case MAILIMAP_RESP_TEXT_CODE_UIDVALIDITY: print_indent(); printf("uidvalidity { %i }\n", text_code->rc_data.rc_uidvalidity); break; case MAILIMAP_RESP_TEXT_CODE_UNSEEN: print_indent(); printf("unseen { %i }\n", text_code->rc_data.rc_first_unseen); break; case MAILIMAP_RESP_TEXT_CODE_OTHER: print_indent(); printf("other { %s = %s }\n", text_code->rc_data.rc_atom.atom_name, text_code->rc_data.rc_atom.atom_value); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_resp_text_print(struct mailimap_resp_text * resp_text) { print_indent(); printf("resp-text {\n"); indent(); if (resp_text->rsp_code) mailimap_resp_text_code_print(resp_text->rsp_code); print_indent(); printf("text { %s }\n", resp_text->rsp_text); unindent(); print_indent(); printf("}\n"); } static void mailimap_continue_req_print(struct mailimap_continue_req * cont_req) { print_indent(); printf("continue-req {\n"); indent(); switch (cont_req->cr_type) { case MAILIMAP_CONTINUE_REQ_TEXT: print_indent(); printf("resp-text {\n"); indent(); mailimap_resp_text_print(cont_req->cr_data.cr_text); unindent(); print_indent(); printf("}\n"); break; case MAILIMAP_CONTINUE_REQ_BASE64: printf("base64 { %s }\n", cont_req->cr_data.cr_base64); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_cont_req_or_resp_data_print(struct mailimap_cont_req_or_resp_data * cont_req_or_resp_data) { print_indent(); printf("cont-req-or-resp-data {\n"); indent(); switch (cont_req_or_resp_data->rsp_type) { case MAILIMAP_RESP_CONT_REQ: mailimap_continue_req_print(cont_req_or_resp_data->rsp_data.rsp_cont_req); break; case MAILIMAP_RESP_RESP_DATA: mailimap_response_data_print(cont_req_or_resp_data->rsp_data.rsp_resp_data); break; } unindent(); print_indent(); printf("}\n"); } static void mailimap_response_tagged_print(struct mailimap_response_tagged * tagged) { print_indent(); printf("response-tagged {\n"); indent(); print_indent(); printf("tag { %s }\n", tagged->rsp_tag); mailimap_resp_cond_state_print(tagged->rsp_cond_state); unindent(); print_indent(); printf("}\n"); } static void mailimap_response_fatal_print(struct mailimap_response_fatal * fatal) { print_indent(); printf("response-fatal {\n"); indent(); mailimap_resp_cond_bye_print(fatal->rsp_bye); unindent(); print_indent(); printf("}\n"); } static void mailimap_response_done_print(struct mailimap_response_done * resp_done) { print_indent(); printf("response-done {\n"); indent(); switch (resp_done->rsp_type) { case MAILIMAP_RESP_DONE_TYPE_TAGGED: mailimap_response_tagged_print(resp_done->rsp_data.rsp_tagged); break; case MAILIMAP_RESP_DONE_TYPE_FATAL: mailimap_response_fatal_print(resp_done->rsp_data.rsp_fatal); break; } unindent(); print_indent(); printf("}\n"); } void mailimap_response_print(struct mailimap_response * resp) { clistiter * cur; print_indent(); printf("response {\n"); indent(); for(cur = clist_begin(resp->rsp_cont_req_or_resp_data_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailimap_cont_req_or_resp_data * resp; resp = clist_content(cur); mailimap_cont_req_or_resp_data_print(resp); } mailimap_response_done_print(resp->rsp_resp_done); unindent(); print_indent(); printf("}\n"); } static void mailimap_resp_cond_auth_print(struct mailimap_resp_cond_auth * cond_auth) { print_indent(); printf("resp-cond-auth {\n"); indent(); switch (cond_auth->rsp_type) { case MAILIMAP_RESP_COND_AUTH_OK: print_indent(); printf("OK\n"); case MAILIMAP_RESP_COND_AUTH_PREAUTH: print_indent(); printf("PREAUTH\n"); } mailimap_resp_text_print(cond_auth->rsp_text); unindent(); print_indent(); printf("}\n"); } void mailimap_greeting_print(struct mailimap_greeting * greeting) { print_indent(); printf("greeting {\n"); indent(); switch(greeting->gr_type) { case MAILIMAP_GREETING_RESP_COND_AUTH: mailimap_resp_cond_auth_print(greeting->gr_data.gr_auth); break; case MAILIMAP_GREETING_RESP_COND_BYE: mailimap_resp_cond_bye_print(greeting->gr_data.gr_bye); break; } unindent(); print_indent(); printf("}\n"); } #endif