亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mail.cpp

?? .net 方面的開發(fā)說明資料。
?? CPP
字號:
#pragma warning (disable : 4786)

#include <list>
#include <string>
#include <vector>

#include "..\ETransport.h"
#include "mail.h"
#include "MailDecoder.h"

// --------------------------------------------------------

static Protocol *s_pop3_protocol;
static Protocol *s_smtp_protocol;

// --------------------------------------------------------
// Mail Protocol data
// --------------------------------------------------------

/*
struct QueueData {
	MailReceiveEvents m_event;
	int m_count;
};

struct MailData {
	PLUG_HANDLE m_plug_handle;
	void *m_pop3_handle;
	std::list<QueueData> m_event_queue;
	std::string username;
	std::string password;
	std::string mail_content;
	MailMessageCount message_count;
	std::vector<MailMessageListEntry> message_list_entries;
};
*/

// --------------------------------------------------------
// These functions monitors all events being passed from
// the pop3 protocol to the user and vice versa.
// --------------------------------------------------------

/*
static bool DLL_CALLCONV
FilterLogin(void *data, PLUG_HANDLE plug, EpEvent *event) {
	MailData *mail = (MailData *)data;

	// cancel any action we were doing when an error occurs on the socket

	if (IsEqualGUID(event->protocol, CLSID_PROTOCOL_SYSTEM)) {
		switch(event->msg) {
			case SYSTEM_NOT_CONNECTED :
			case SYSTEM_DISCONNECTED :
			case SYSTEM_IO_ERROR :
				EpRemoveEventFilter(mail->m_plug_handle, FilterLogin);
				mail->m_event_queue.clear();
				break;
		};
	} else if (IsEqualGUID(event->protocol, CLSID_POP3_PROTOCOL)) {
		EpEvent new_event;
		new_event.reference_id = 0;
		new_event.timeout = 0;

		mail->m_event_queue.front().m_count++;

		switch(event->msg) {
			case POP3_REPLY_OK :
				switch(mail->m_event_queue.front().m_count) {
					case 1 :
						new_event.protocol = CLSID_POP3_PROTOCOL;
						new_event.msg = POP3_PASS;
						new_event.data = (unsigned char *)mail->password.c_str();
						new_event.size = mail->password.length() + 1;

						EpSendEvent(plug, &new_event);
						return false;

					case 2 :
					{
						new_event.protocol = CLSID_POP3_PROTOCOL;
						new_event.msg = POP3_LIST;
						new_event.data = 0;
						new_event.size = 0;

						EpDispatchEvent(plug, &new_event);

						FILE *file = fopen("log.txt", "a+");
						fprintf(file, "sending out LIST\n");
						fclose(file);
						return false;
					}

					case 3 :
					{
						std::string message_count;
						int i = 0;

						while ((i < event->size) && (event->data[i] != ' '))
							message_count += event->data[i++];

						if (atoi(message_count.c_str()) == 0) {
							mail->m_event_queue.pop_front();

							new_event.protocol = CLSID_MAILRECV_PROTOCOL;
							new_event.msg = MAILRECV_LOGIN;
							new_event.data = 0;
							new_event.size = 0;

							EpDispatchEvent(plug, &new_event);
						}

						mail->message_list_entries.clear();
						return false;
					}
				};

				return true;

			case POP3_REPLY_LISTING :
			{
				std::string message_count;
				std::string message_octets;
				int i = 0;

				while ((i < event->size) && (event->data[i] != ' '))
					message_count += event->data[i++];

				while ((i < event->size) && (event->data[i] == ' '))
					++i;

				while (i < event->size)
					message_octets += event->data[i++];

				MailMessageListEntry entry;
				entry.message_id = atoi(message_count.c_str());
				entry.octets = atoi(message_octets.c_str());

				mail->message_list_entries.push_back(entry);
				return false;
			}

			case POP3_REPLY_ENDLIST :
			{
				mail->m_event_queue.pop_front();

				// store the number of found messages in the struct

				mail->message_count.message_count = mail->message_list_entries.size();

				// copy the message data

				int size = sizeof(int) + mail->message_list_entries.size() * sizeof(MailMessageListEntry);
				unsigned char *data = new unsigned char[size];
				memcpy(data, &mail->message_count, sizeof(int));

				for (int i = 0; i < mail->message_list_entries.size(); ++i)
					memcpy(data + sizeof(int) + i * sizeof(MailMessageListEntry), &mail->message_list_entries[i], sizeof(MailMessageListEntry));

				// send an event to the user

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_LOGIN;
				new_event.data = 0;
				new_event.size = 0;

				EpDispatchEvent(plug, &new_event);

				// delete the allocated data

				delete [] data;
				return false;
			}

			case POP3_REPLY_ERROR :
				mail->m_event_queue.pop_front();

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_LOGIN_FAILED;
				new_event.data = event->data;
				new_event.size = event->size;

				EpDispatchEvent(plug, &new_event);
				return false;
		};
	}

	return true;
}

static bool DLL_CALLCONV
FilterMessageCount(void *data, PLUG_HANDLE plug, EpEvent *event) {
	MailData *mail = (MailData *)data;

	if (IsEqualGUID(event->protocol, CLSID_PROTOCOL_SYSTEM)) {
		switch(event->msg) {
			case SYSTEM_NOT_CONNECTED :
			case SYSTEM_DISCONNECTED :
			case SYSTEM_IO_ERROR :
				EpRemoveEventFilter(mail->m_plug_handle, FilterMessageCount);
				mail->m_event_queue.clear();
				break;
		};
	} else if (IsEqualGUID(event->protocol, CLSID_POP3_PROTOCOL)) {
		EpEvent new_event;
		new_event.reference_id = 0;
		new_event.timeout = 0;

		switch(event->msg) {
			case POP3_REPLY_OK :
			{
				mail->m_event_queue.pop_front();

				std::string message_count;
				std::string message_octets;
				int length = strlen((char *)event->data);
				int i = 0;

				while ((i < length) && (event->data[i] != ' '))
					message_count += event->data[i++];

				while ((i < length) && (event->data[i] == ' '))
					++i;

				while (i < length)
					message_octets += event->data[i++];

				MailMessageCount count;
				count.message_count = atoi(message_count.c_str());
				count.octets = atoi(message_octets.c_str());

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_GETMESSAGECOUNT;
				new_event.data = (unsigned char *)&count;
				new_event.size = sizeof(count);

				EpDispatchEvent(plug, &new_event);
				return false;
			}

			case POP3_REPLY_ERROR :
				mail->m_event_queue.pop_front();

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_GETMESSAGECOUNT_FAILED;
				new_event.data = event->data;
				new_event.size = event->size;

				EpDispatchEvent(plug, &new_event);
				return true;
		};
	}

	return true;
}

static bool DLL_CALLCONV
FilterDeleteMessage(void *data, PLUG_HANDLE plug, EpEvent *event) {
	MailData *mail = (MailData *)data;

	// cancel any action we were doing when an error occurs on the socket

	if (IsEqualGUID(event->protocol, CLSID_PROTOCOL_SYSTEM)) {
		switch(event->msg) {
			case SYSTEM_NOT_CONNECTED :
			case SYSTEM_DISCONNECTED :
			case SYSTEM_IO_ERROR :
				EpRemoveEventFilter(mail->m_plug_handle, FilterDeleteMessage);
				mail->m_event_queue.clear();
				break;
		};

	// continue a batch send when this is a pop3 protocol

	} else if (IsEqualGUID(event->protocol, CLSID_POP3_PROTOCOL)) {
		EpEvent new_event;
		new_event.reference_id = 0;
		new_event.timeout = 0;

		switch(event->msg) {
			case POP3_REPLY_OK :
				mail->m_event_queue.pop_front();

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_DELETEMESSAGE;
				new_event.data = NULL;
				new_event.size = 0;

				EpDispatchEvent(plug, &new_event);
				return false;

			case POP3_REPLY_ERROR :
				mail->m_event_queue.pop_front();

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_DELETEMESSAGE_FAILED;
				new_event.data = event->data;
				new_event.size = event->size;

				EpDispatchEvent(plug, &new_event);
				return false;
		};
	}

	return true;
}

static bool DLL_CALLCONV
FilterGetMessage(void *data, PLUG_HANDLE plug, EpEvent *event) {
	MailData *mail = (MailData *)data;

	// cancel any action we were doing when an error occurs on the socket

	if (IsEqualGUID(event->protocol, CLSID_PROTOCOL_SYSTEM)) {
		switch(event->msg) {
			case SYSTEM_NOT_CONNECTED :
			case SYSTEM_DISCONNECTED :
			case SYSTEM_IO_ERROR :
				EpRemoveEventFilter(mail->m_plug_handle, FilterGetMessage);
				mail->m_event_queue.clear();
				break;
		};
	} else if (IsEqualGUID(event->protocol, CLSID_POP3_PROTOCOL)) {
		EpEvent new_event;
		new_event.reference_id = 0;
		new_event.timeout = 0;

		switch(event->msg) {
			case POP3_REPLY_LISTING :
				if (!mail->mail_content.empty())
					mail->mail_content += std::string("\r\n");
				
				mail->mail_content += std::string((char *)event->data);
				return false;

			case POP3_REPLY_ENDLIST :
			{
				mail->m_event_queue.pop_front();

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_GETMESSAGE;
				new_event.data = (unsigned char *)mail->mail_content.c_str();
				new_event.size = mail->mail_content.length() + 1;

				MailDecoder decoder;
				decoder.open(mail->mail_content);

				EpDispatchEvent(plug, &new_event);
				return false;
			}

			case POP3_REPLY_ERROR :
				mail->m_event_queue.pop_front();

				new_event.protocol = CLSID_MAILRECV_PROTOCOL;
				new_event.msg = MAILRECV_GETMESSAGE_FAILED;
				new_event.data = event->data;
				new_event.size = event->size;

				EpDispatchEvent(plug, &new_event);
				return false;
		};
	}

	return true;
}

// --------------------------------------------------------

static void *DLL_CALLCONV
ProtocolCreate(PLUG_HANDLE plug) {
	MailData *mail = new MailData;
	mail->m_plug_handle = plug;
	mail->m_pop3_handle = s_pop3_protocol->create(plug);
	return mail;
}

static bool DLL_CALLCONV
ProtocolReceive(void *self, const unsigned char *data, int size) {
	MailData *mail = (MailData *)self;

	return s_pop3_protocol->receive(mail->m_pop3_handle, data, size);
}

static bool DLL_CALLCONV
ProtocolSend(void *self, EpEvent *event) {
	MailData *mail = (MailData *)self;

	if (IsEqualGUID(event->protocol, CLSID_MAILRECV_PROTOCOL)) {
		EpEvent new_event;
		new_event.protocol = CLSID_POP3_PROTOCOL;
		new_event.reference_id = 0;
		new_event.timeout = 0;

		QueueData data;
		data.m_count = 0;
		data.m_event = (MailReceiveEvents)event->msg;

		switch(event->msg) {
			case MAILRECV_LOGIN :
			{
				EpInstallEventFilter(mail->m_plug_handle, FilterLogin, mail);

				mail->m_event_queue.push_back(data);

				MailRecvLogin *login = (MailRecvLogin *)event->data;
				mail->username = login->username;
				mail->password = login->password;

				new_event.msg = POP3_USER;
				new_event.data = (unsigned char *)mail->username.c_str();
				new_event.size = mail->username.length() + 1;
			
				s_pop3_protocol->send(mail->m_pop3_handle, &new_event);
				return true;
			}

			case MAILRECV_GETMESSAGE :
				EpInstallEventFilter(mail->m_plug_handle, FilterGetMessage, mail);

				mail->m_event_queue.push_back(data);

				mail->mail_content.erase();

				new_event.msg = POP3_RETR;
				new_event.data = event->data;
				new_event.size = event->size;
			
				s_pop3_protocol->send(mail->m_pop3_handle, &new_event);
				return true;

			case MAILRECV_GETMESSAGECOUNT :
				EpInstallEventFilter(mail->m_plug_handle, FilterMessageCount, mail);

				mail->m_event_queue.push_back(data);

				new_event.msg = POP3_STAT;
				new_event.data = event->data;
				new_event.size = event->size;
			
				s_pop3_protocol->send(mail->m_pop3_handle, &new_event);
				return true;

			case MAILRECV_DELETEMESSAGE :
				EpInstallEventFilter(mail->m_plug_handle, FilterDeleteMessage, mail);

				mail->m_event_queue.push_back(data);

				new_event.msg = POP3_DELE;
				new_event.data = event->data;
				new_event.size = event->size;
			
				s_pop3_protocol->send(mail->m_pop3_handle, &new_event);
				return true;
		}


		return false;
	}

	return s_pop3_protocol->send(mail->m_pop3_handle, event);
}

static void DLL_CALLCONV
ProtocolDestroy(void *self) {
	MailData *mail = (MailData *)self;

	s_pop3_protocol->destroy(mail->m_pop3_handle);

	delete mail;
}
*/

// --------------------------------------------------------

SMTP_API unsigned int DLL_CALLCONV
EpProtocolCount() {
	return 3;
}

SMTP_API CLSID DLL_CALLCONV
EpProtocolInit(unsigned int count, Protocol *protocol) {
	switch(count) {
		case 0 : return EpIRCProtocolInit(protocol);
		case 1 : return EpSMTPProtocolInit(protocol);
		case 2 : return EpPOP3ProtocolInit(protocol);
	};

	return CLSID_NULL_PROTOCOL;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草在线在线精品观看| 亚洲女人小视频在线观看| 日本伊人色综合网| 欧美久久久久久久久| 日本大胆欧美人术艺术动态| 日韩精品一区二区三区在线观看 | 色综合久久久网| 亚洲青青青在线视频| 欧美日韩亚洲不卡| 毛片av中文字幕一区二区| 久久综合九色综合欧美就去吻| 国产大陆a不卡| 亚洲视频在线观看一区| 91 com成人网| 精品一区二区久久| 亚洲欧洲性图库| 欧美日韩一区二区在线视频| 激情五月婷婷综合| 最新日韩在线视频| 欧美一级生活片| 成人在线综合网| 亚洲高清中文字幕| 久久久久久免费毛片精品| 色婷婷av一区二区三区gif| 石原莉奈在线亚洲三区| 中文字幕精品一区二区精品绿巨人| 一本大道av一区二区在线播放| 视频一区在线播放| 国产精品免费免费| 日韩亚洲欧美在线| 不卡的看片网站| 老司机免费视频一区二区三区| 中文字幕精品三区| 日韩一卡二卡三卡国产欧美| 97se亚洲国产综合在线| 久久精品国产一区二区| 伊人婷婷欧美激情| 国产午夜精品美女毛片视频| 欧美色精品天天在线观看视频| 国产精品自拍毛片| 午夜私人影院久久久久| 中文av字幕一区| 日韩欧美你懂的| 欧美午夜不卡视频| 国产一区亚洲一区| 性做久久久久久久免费看| 国产精品午夜春色av| 欧美成人一区二区三区在线观看 | 欧美激情一区三区| 日韩欧美亚洲国产另类| 欧美日韩视频一区二区| 91蜜桃视频在线| 国产白丝精品91爽爽久久 | 国产视频一区不卡| 日韩一区二区在线观看| 欧美性大战xxxxx久久久| 99久久夜色精品国产网站| 国产精品一区二区三区四区| 日韩国产欧美三级| 亚洲福利视频三区| 亚洲综合在线电影| 亚洲色图视频网| 国产精品视频免费看| 久久久久国色av免费看影院| 精品美女在线播放| 精品美女在线播放| 日韩精品一区二区三区在线| 欧美一区二区三区视频在线 | 国产偷v国产偷v亚洲高清| 欧美一区二区三区白人| 欧美嫩在线观看| 欧美久久一区二区| 91精品国产综合久久久久久漫画| 欧美日韩国产经典色站一区二区三区| 一本久久a久久精品亚洲| 91网站最新地址| 91国偷自产一区二区三区成为亚洲经典| 国产91精品精华液一区二区三区| 国产一区二区三区免费看| 狠狠色丁香婷婷综合| 国产乱码精品一区二区三| 国产一区二区在线电影| 国产福利一区二区三区在线视频| 国产精品乡下勾搭老头1| 国产露脸91国语对白| 国产精品影视在线| 成人av资源下载| 91久久免费观看| 3d动漫精品啪啪一区二区竹菊| 91精品国产综合久久小美女| 欧美一区二区三区电影| 欧美v日韩v国产v| 中文字幕高清一区| 亚洲精品国产a| 五月天精品一区二区三区| 日韩精品一级二级| 国产毛片精品视频| 高清视频一区二区| 91久久精品国产91性色tv| 欧美久久一二三四区| 久久一夜天堂av一区二区三区| 中文字幕乱码久久午夜不卡| 亚洲蜜桃精久久久久久久| 丝袜美腿高跟呻吟高潮一区| 久久精品国产亚洲aⅴ| 成人免费毛片嘿嘿连载视频| 91久久精品网| 精品理论电影在线观看| 中文字幕亚洲成人| 日韩制服丝袜先锋影音| 国产aⅴ综合色| 欧美视频一区在线观看| 精品日韩av一区二区| 综合av第一页| 六月丁香婷婷色狠狠久久| 成人av电影免费在线播放| 在线不卡免费欧美| 国产亚洲精品bt天堂精选| 亚洲成人久久影院| 国产xxx精品视频大全| 欧美精品电影在线播放| 中文字幕av一区 二区| 日本一区二区三区免费乱视频| 亚洲精品日韩综合观看成人91| 六月婷婷色综合| 91麻豆精东视频| 久久久精品免费免费| 亚洲地区一二三色| 波多野结衣一区二区三区 | 精品国产三级电影在线观看| 中文字幕在线不卡| 麻豆精品一区二区| 色婷婷狠狠综合| 国产精品色哟哟网站| 经典一区二区三区| 欧美日韩久久一区二区| 一区在线中文字幕| 国产很黄免费观看久久| 欧美一区二区三区四区视频 | 欧美酷刑日本凌虐凌虐| 亚洲视频你懂的| 国产成人亚洲综合a∨婷婷 | 国产成人av一区二区三区在线观看| 欧美综合一区二区三区| 国产精品系列在线| 国产传媒一区在线| 精品国产三级电影在线观看| 日本免费新一区视频 | 欧美一区二视频| 一区二区三区精品久久久| 成人国产在线观看| 国产女同性恋一区二区| 国产一区福利在线| 欧美mv和日韩mv国产网站| 日精品一区二区三区| 欧美日本一道本在线视频| 亚洲伊人色欲综合网| 一本大道av伊人久久综合| 中文字幕亚洲视频| 91污片在线观看| 亚洲精品自拍动漫在线| 91亚洲精品久久久蜜桃网站| 国产精品久久久久久久久图文区| 国产精品小仙女| 久久精品一区二区三区av| 精品一区二区免费看| 久久久亚洲综合| 狠狠色狠狠色综合| 国产日韩在线不卡| 国产 日韩 欧美大片| 中文字幕在线一区免费| av成人免费在线| 伊人一区二区三区| 欧美日韩dvd在线观看| 三级在线观看一区二区| 欧美v日韩v国产v| 国产成人一级电影| 亚洲丝袜美腿综合| 亚洲精品一区二区三区在线观看| 久久国产生活片100| 久久久久久综合| av不卡一区二区三区| 亚洲欧美国产77777| 欧美日韩在线亚洲一区蜜芽| 日韩黄色在线观看| 久久综合视频网| 国产成a人亚洲| 一区二区三区鲁丝不卡| 欧美美女bb生活片| 久久99国产精品麻豆| 国产精品国产成人国产三级| 色吧成人激情小说| 日韩avvvv在线播放| 国产三级欧美三级日产三级99| 99国产精品久久久久久久久久久| 亚洲一区二区偷拍精品| 欧美变态tickle挠乳网站| 99国产精品久久久久久久久久久| 亚洲777理论| 亚洲国产精品传媒在线观看|