⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imapparser.hpp

📁 MIME解析的代码
💻 HPP
📖 第 1 页 / 共 5 页
字号:
		{			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 + -