📄 imapparser.hpp
字号:
{ delete (m_section_text1); delete (m_section_text2); } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("section"); string::size_type pos = *currentPos; parser.check <one_char <'['> >(line, &pos); if (!parser.check <one_char <']'> >(line, &pos, true)) { if (!(m_section_text1 = parser.get <section_text>(line, &pos, true))) { nz_number* num = parser.get <nz_number>(line, &pos); m_nz_numbers.push_back(num->value()); delete (num); while (parser.check <one_char <'.'> >(line, &pos, true)) { if ((num = parser.get <nz_number>(line, &pos, true))) { m_nz_numbers.push_back(num->value()); delete (num); } else { m_section_text2 = parser.get <section_text>(line, &pos); break; } } } parser.check <one_char <']'> >(line, &pos); } *currentPos = pos; } private: section_text* m_section_text1; section_text* m_section_text2; std::vector <unsigned int> m_nz_numbers; public: const section_text* section_text1() const { return (m_section_text1); } const section_text* section_text2() const { return (m_section_text2); } const std::vector <unsigned int>& nz_numbers() const { return (m_nz_numbers); } }; // // addr_adl ::= nstring // ;; Holds route from [RFC-822] route-addr if // ;; non-NIL // // addr_host ::= nstring // ;; NIL indicates [RFC-822] group syntax. // ;; Otherwise, holds [RFC-822] domain name // // addr_mailbox ::= nstring // ;; NIL indicates end of [RFC-822] group; if // ;; non-NIL and addr_host is NIL, holds // ;; [RFC-822] group name. // ;; Otherwise, holds [RFC-822] local-part // // addr_name ::= nstring // ;; Holds phrase from [RFC-822] mailbox if // ;; non-NIL // // address ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox // SPACE addr_host ")" // class address : public component { public: address() : m_addr_name(NULL), m_addr_adl(NULL), m_addr_mailbox(NULL), m_addr_host(NULL) { } ~address() { delete (m_addr_name); delete (m_addr_adl); delete (m_addr_mailbox); delete (m_addr_host); } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("address"); string::size_type pos = *currentPos; parser.check <one_char <'('> >(line, &pos); m_addr_name = parser.get <nstring>(line, &pos); parser.check <SPACE>(line, &pos); m_addr_adl = parser.get <nstring>(line, &pos); parser.check <SPACE>(line, &pos); m_addr_mailbox = parser.get <nstring>(line, &pos); parser.check <SPACE>(line, &pos); m_addr_host = parser.get <nstring>(line, &pos); parser.check <one_char <')'> >(line, &pos); *currentPos = pos; } private: nstring* m_addr_name; nstring* m_addr_adl; nstring* m_addr_mailbox; nstring* m_addr_host; public: nstring* addr_name() const { return (m_addr_name); } nstring* addr_adl() const { return (m_addr_adl); } nstring* addr_mailbox() const { return (m_addr_mailbox); } nstring* addr_host() const { return (m_addr_host); } }; // // address_list ::= "(" 1*address ")" / nil // class address_list : public component { public: ~address_list() { for (std::vector <address*>::iterator it = m_addresses.begin() ; it != m_addresses.end() ; ++it) { delete (*it); } } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("address_list"); string::size_type pos = *currentPos; if (!parser.check <NIL>(line, &pos, true)) { parser.check <one_char <'('> >(line, &pos); while (!parser.check <one_char <')'> >(line, &pos, true)) { m_addresses.push_back(parser.get <address>(line, &pos)); parser.check <SPACE>(line, &pos, true); } } *currentPos = pos; } private: std::vector <address*> m_addresses; public: const std::vector <address*>& addresses() const { return (m_addresses); } }; // // env_bcc ::= "(" 1*address ")" / nil // COMPONENT_ALIAS(address_list, env_bcc); // // env_cc ::= "(" 1*address ")" / nil // COMPONENT_ALIAS(address_list, env_cc); // // env_date ::= nstring // COMPONENT_ALIAS(nstring, env_date); // // env_from ::= "(" 1*address ")" / nil // COMPONENT_ALIAS(address_list, env_from); // // env_in_reply_to ::= nstring // COMPONENT_ALIAS(nstring, env_in_reply_to); // // env_message_id ::= nstring // COMPONENT_ALIAS(nstring, env_message_id); // // env_reply_to ::= "(" 1*address ")" / nil // COMPONENT_ALIAS(address_list, env_reply_to); // // env_sender ::= "(" 1*address ")" / nil // COMPONENT_ALIAS(address_list, env_sender); // // env_subject ::= nstring // COMPONENT_ALIAS(nstring, env_subject); // // env_to ::= "(" 1*address ")" / nil // COMPONENT_ALIAS(address_list, env_to); // // envelope ::= "(" env_date SPACE env_subject SPACE env_from // SPACE env_sender SPACE env_reply_to SPACE env_to // SPACE env_cc SPACE env_bcc SPACE env_in_reply_to // SPACE env_message_id ")" // class envelope : public component { public: envelope() : m_env_date(NULL), m_env_subject(NULL), m_env_from(NULL), m_env_sender(NULL), m_env_reply_to(NULL), m_env_to(NULL), m_env_cc(NULL), m_env_bcc(NULL), m_env_in_reply_to(NULL), m_env_message_id(NULL) { } ~envelope() { delete (m_env_date); delete (m_env_subject); delete (m_env_from); delete (m_env_sender); delete (m_env_reply_to); delete (m_env_to); delete (m_env_cc); delete (m_env_bcc); delete (m_env_in_reply_to); delete (m_env_message_id); } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("envelope"); string::size_type pos = *currentPos; parser.check <one_char <'('> >(line, &pos); m_env_date = parser.get <IMAPParser::env_date>(line, &pos); parser.check <SPACE>(line, &pos); m_env_subject = parser.get <IMAPParser::env_subject>(line, &pos); parser.check <SPACE>(line, &pos); m_env_from = parser.get <IMAPParser::env_from>(line, &pos); parser.check <SPACE>(line, &pos); m_env_sender = parser.get <IMAPParser::env_sender>(line, &pos); parser.check <SPACE>(line, &pos); m_env_reply_to = parser.get <IMAPParser::env_reply_to>(line, &pos); parser.check <SPACE>(line, &pos); m_env_to = parser.get <IMAPParser::env_to>(line, &pos); parser.check <SPACE>(line, &pos); m_env_cc = parser.get <IMAPParser::env_cc>(line, &pos); parser.check <SPACE>(line, &pos); m_env_bcc = parser.get <IMAPParser::env_bcc>(line, &pos); parser.check <SPACE>(line, &pos); m_env_in_reply_to = parser.get <IMAPParser::env_in_reply_to>(line, &pos); parser.check <SPACE>(line, &pos); m_env_message_id = parser.get <IMAPParser::env_message_id>(line, &pos); parser.check <one_char <')'> >(line, &pos); *currentPos = pos; } private: IMAPParser::env_date* m_env_date; IMAPParser::env_subject* m_env_subject; IMAPParser::env_from* m_env_from; IMAPParser::env_sender* m_env_sender; IMAPParser::env_reply_to* m_env_reply_to; IMAPParser::env_to* m_env_to; IMAPParser::env_cc* m_env_cc; IMAPParser::env_bcc* m_env_bcc; IMAPParser::env_in_reply_to* m_env_in_reply_to; IMAPParser::env_message_id* m_env_message_id; public: const IMAPParser::env_date* env_date() const { return (m_env_date); } const IMAPParser::env_subject* env_subject() const { return (m_env_subject); } const IMAPParser::env_from* env_from() const { return (m_env_from); } const IMAPParser::env_sender* env_sender() const { return (m_env_sender); } const IMAPParser::env_reply_to* env_reply_to() const { return (m_env_reply_to); } const IMAPParser::env_to* env_to() const { return (m_env_to); } const IMAPParser::env_cc* env_cc() const { return (m_env_cc); } const IMAPParser::env_bcc* env_bcc() const { return (m_env_bcc); } const IMAPParser::env_in_reply_to* env_in_reply_to() const { return (m_env_in_reply_to); } const IMAPParser::env_message_id* env_message_id() const { return (m_env_message_id); } }; // // body_fld_desc ::= nstring // typedef nstring body_fld_desc; // // body_fld_id ::= nstring // typedef nstring body_fld_id; // // body_fld_md5 ::= nstring // typedef nstring body_fld_md5; // // body_fld_octets ::= number // typedef number body_fld_octets; // // body_fld_lines ::= number // typedef number body_fld_lines; // // body_fld_enc ::= (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/ // "QUOTED-PRINTABLE") <">) / string // typedef xstring body_fld_enc; // // body_fld_param_item ::= string SPACE string // class body_fld_param_item : public component { public: body_fld_param_item() : m_string1(NULL), m_string2(NULL) { } ~body_fld_param_item() { delete (m_string1); delete (m_string2); } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("body_fld_param_item"); string::size_type pos = *currentPos; m_string1 = parser.get <xstring>(line, &pos); parser.check <SPACE>(line, &pos); m_string2 = parser.get <xstring>(line, &pos); DEBUG_FOUND("body_fld_param_item", "<" << m_string1->value() << ", " << m_string2->value() << ">"); *currentPos = pos; } private: xstring* m_string1; xstring* m_string2; public: const xstring* string1() const { return (m_string1); } const xstring* string2() const { return (m_string2); } }; // // body_fld_param ::= "(" 1#(body_fld_param_item) ")" / nil // class body_fld_param : public component { public: ~body_fld_param() { for (std::vector <body_fld_param_item*>::iterator it = m_items.begin() ; it != m_items.end() ; ++it) { delete (*it); } } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("body_fld_param"); string::size_type pos = *currentPos; if (parser.check <one_char <'('> >(line, &pos, true)) { m_items.push_back(parser.get <body_fld_param_item>(line, &pos)); while (!parser.check <one_char <')'> >(line, &pos, true)) { parser.check <SPACE>(line, &pos); m_items.push_back(parser.get <body_fld_param_item>(line, &pos)); } } else { parser.check <NIL>(line, &pos); } *currentPos = pos; } private: std::vector <body_fld_param_item*> m_items; public: const std::vector <body_fld_param_item*>& items() const { return (m_items); } }; // // body_fld_dsp ::= "(" string SPACE body_fld_param ")" / nil // class body_fld_dsp : public component { public: body_fld_dsp() : m_string(NULL), m_body_fld_param(NULL) { } ~body_fld_dsp() { delete (m_string); delete (m_body_fld_param); } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("body_fld_dsp"); string::size_type pos = *currentPos; if (parser.check <one_char <'('> >(line, &pos, true)) { m_string = parser.get <xstring>(line, &pos); parser.check <SPACE>(line, &pos); m_body_fld_param = parser.get <class body_fld_param>(line, &pos); parser.check <one_char <')'> >(line, &pos); } else { parser.check <NIL>(line, &pos); } *currentPos = pos; } private: class xstring* m_string; class body_fld_param* m_body_fld_param; public: const class xstring* str() const { return (m_string); } const class body_fld_param* body_fld_param() const { return (m_body_fld_param); } }; // // body_fld_lang ::= nstring / "(" 1#string ")" // class body_fld_lang : public component { public: ~body_fld_lang() { for (std::vector <xstring*>::iterator it = m_strings.begin() ; it != m_strings.end() ; ++it) { delete (*it); } } void go(IMAPParser& parser, string& line, string::size_type* currentPos) { DEBUG_ENTER_COMPONENT("body_fld_lang"); string::size_type pos = *currentPos; if (parser.check <one_char <'('> >(line, &pos, true)) { m_strings.push_back(parser.get <class xstring>(line, &pos)); while (!parser.check <one_char <')'> >(line, &pos, true)) { parser.check <SPACE>(line, &pos); m_strings.push_back(parser.get <class xstring>(line, &pos)); } } else { m_strings.push_back(parser.get <class nstring>(line, &pos)); } *currentPos = pos; } private: std::vector <xstring*> m_strings; public: const std::vector <xstring*>& strings() const { return (m_strings); } }; // // body_fields ::= body_fld_param SPACE body_fld_id SPACE // body_fld_desc SPACE body_fld_enc SPACE // body_fld_octets // class body_fields : public component { public: body_fields() : m_body_fld_param(NULL), m_body_fld_id(NULL), m_body_fld_desc(NULL), m_body_fld_enc(NULL), m_body_fld_octets(NULL) { } ~body_fields() { delete (m_body_fld_param); delete (m_body_fld_id); delete (m_body_fld_desc); delete (m_body_fld_enc); delete (m_body_fld_octets); } void go(IMAPParser& parser, string& li
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -