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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mailbox.cpp

?? 強大易用的郵件收發客戶端
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
				{
					m_tServerSupportsAPOP = false;
					Check();
				}
				else
				{
					SetState( IDP_MBOX_CONNECTION_WAS_LOST ); 
				}

				return; 
			}
			
			case SOCKET_ERROR:
			{ 
				DWORD dwLastError = GetLastError();

				if( WSAEWOULDBLOCK != dwLastError )
				{
					if( WSAECONNABORTED == dwLastError ||
						WSAECONNRESET == dwLastError )
					{
						if( m_intState == MBOX_WF_APOP_RESPONSE )
						{
							m_tServerSupportsAPOP = false;
							Check();
						}
						else
						{
							SetState( MBOX_CONNECTION_WAS_LOST );
						}
					}
					else
					{
						TRACE2( "Socket Error #%d; [%s] cannot receive\n", GetLastError(), m_strAlias );
						SetState( MBOX_SOCKET_ERROR ); 
					}
				}
				return; 
			}

			default:
			{
//				TRACE2( "[+%d bytes]->[%d bytes]\n", nErrorCode, m_arrayPacket.GetSize()+nErrorCode );
				ASSERT( nErrorCode <= sizeof( szPacket ) );
				m_arrayPacket.SetSize( m_arrayPacket.GetSize() + nErrorCode );
				memcpy( &m_arrayPacket[ m_arrayPacket.GetSize() - nErrorCode ], szPacket, nErrorCode );

				if( nErrorCode < sizeof( szPacket ) )
				{
					while( m_arrayPacket.GetSize() ) 
					{
						int i = 1;
						while( i < m_arrayPacket.GetSize() &&
							'\x0D' != m_arrayPacket[i-1] && 
							'\x0A' != m_arrayPacket[i] ) ++i;
						
						int intStringLength = i - 1;
						
						if( i == m_arrayPacket.GetSize() ) break;

						int intBufferLength = i + 1;

						AppendToLog( "Rcvd: " );
						CString sLog((char*) &m_arrayPacket[0], intBufferLength );
						AppendToLog( sLog );
						static int nTraceLog = 0;
						if (nTraceLog)
							TRACE(sLog);

						// skip any extra returns at the beginning
						int nSkip = 0;
						while (nSkip<intStringLength &&
							(m_arrayPacket[nSkip] == 0x0A || m_arrayPacket[nSkip] == 0x0D))
							nSkip++;
						if (nSkip == intStringLength)
							nSkip = 0;
						ParseString( (char*) &m_arrayPacket[0] + nSkip, intStringLength-nSkip, intBufferLength-nSkip );

						if( m_arrayPacket.GetSize() ) m_arrayPacket.RemoveAt( 0, intBufferLength );
					}   // while
				}   // if

				if( INVALID_SOCKET == m_hSocket ) return;
			}   // default
		}   //  switch  receive
	}   //  while
}

void CMailbox::ParseString( char *str, int len, int size )
{
	char szPacket[ 1024 ];
	CString strPacket;

	switch( m_intState )
	{
		case MBOX_CONNECTING:
		{
			// null-terminate
			str[ len ] = 0;

			char *stamp_begin = (char*) memchr( str, '<', size );
			char *stamp_end = (char*) memchr( str, '>', size );

			m_sServerGreeting = CString( str + 3, len - 3 );
			m_sServerGreeting.TrimLeft();
			m_sServerGreeting.TrimRight();

#if 1
			if  ( ((m_dwFlags & MBF_NO_APOP) == 0) && m_tServerSupportsAPOP &&
				( stamp_begin ) && 
				( stamp_end ) && 
				( stamp_begin < stamp_end ) )
			{
				/* APOP command is supported - use secure method */
				*(++stamp_end) = 0;
				CString sPass = GetPassword();
				char *pass = new char[ sPass.GetLength() + 1 ];
				strcpy(pass, sPass);
				char *string = new char[ strlen( stamp_begin ) + strlen( pass ) + 1 ];
				sprintf( string, "%s%s", stamp_begin, pass );

				unsigned char digest[16];

				MD5String( string, digest );
				
				strPacket.Format( _T("APOP %s "), m_strUser );
				strcpy( szPacket, strPacket);

				for( int i = 0; i < sizeof( digest ); ++i )
				{
					char hex[3];
					sprintf( hex, "%02x", digest[i] );
					strcat( szPacket, hex );
				}
				strcat( szPacket, "\r\n" );
				
				delete pass;
				delete string;

				SetState( Send( szPacket, strlen( szPacket ) ) ?
					MBOX_WF_APOP_RESPONSE : MBOX_CANNOT_SEND );
			}
			else 
#endif
			{
				/* APOP command is NOT supported - use plain text method */
				strPacket.Format( _T("USER %s\r\n"), m_strUser );
				CharToOem( strPacket, szPacket );
				SetState( Send( szPacket, strlen( szPacket ) ) ?
					MBOX_WF_USER_RESPONSE : MBOX_CANNOT_SEND );

				m_tServerSupportsAPOP = false;
			}
		}
		break;

		case MBOX_WF_APOP_RESPONSE:
		{
			m_strLastError.Empty();

			if( '-' == *str )
			{
				// note, this piece is duplicated:
				{
					/* APOP command is NOT supported - use plain text method */
					strPacket.Format( _T("USER %s\r\n"), m_strUser );
					CharToOem( strPacket, szPacket );
					SetState( Send( szPacket, strlen( szPacket ) ) ?
						MBOX_WF_USER_RESPONSE : MBOX_CANNOT_SEND );
					
					m_tServerSupportsAPOP = false;
				}
			}
			else
			{
				m_tServerSupportsAPOP = true;
				SendBurstWriteSenseRequest();
			}
		}
		break;

		case MBOX_WF_USER_RESPONSE_SSL:
		case MBOX_WF_USER_RESPONSE:
		{
			if( '-' == *str )
			{
				if( len > 5 )
				{
					str[ len ] = 0;
					m_strLastError = "error: ";
					m_strLastError += str + 5;
					m_strLastError.MakeLower();
					m_strLastError.Replace( '.', ' ' );
				}

				SendQuitRequest( MBOX_INVALID_USER ); 
			}
			else
			{
				if (m_intState == MBOX_WF_USER_RESPONSE_SSL)
				{
					m_intState = MBOX_WF_USER_RESPONSE;
					break;
				}
				CString sPass = GetPassword();
				strPacket.Format( _T("PASS %s\r\n"), sPass );
				strcpy(szPacket, strPacket);
				SetState( Send( szPacket, strlen( szPacket ) ) ?
					MBOX_WF_PASS_RESPONSE : MBOX_CANNOT_SEND );
			}
		}
		break;

		case MBOX_WF_PASS_RESPONSE:
		{
			m_strLastError.Empty();

			if( '-' == *str )
			{
				if( len > 5 )
				{
					str[ len ] = 0;
					m_strLastError = "error: ";
					m_strLastError += str + 5;
					m_strLastError.MakeLower();
					m_strLastError.Replace( '.', ' ' );
				}

				SendQuitRequest( MBOX_INVALID_PASS );
			}
			else
			{
				m_tServerSupportsAPOP = false;
				SendBurstWriteSenseRequest();
			}
		}
		break;


		case MBOX_WF_FIRST_NOOP:
		{
			CreateWatchDog( 4000 );
			SetState( MBOX_WF_SECOND_NOOP );
		}
		break;

		case MBOX_WF_SECOND_NOOP:
		{
			DestroyWatchDog();
			m_tServerSupportsBurstWrites = true;
			SendUidlRequest();
		}
		break;

		case MBOX_WF_UIDL_RESPONSE:
		{
			m_strLastError.Empty();

			switch( *str )
			{ 
				case '-':
				{
					m_tServerSupportsUIDL = false;
					m_intOrder = 0;
					SendTopExRequest();
				}
				break;

				case '.': 
				{
					// brieuc
					if (m_dwFlags & MBF_SPEC_TOP)
						SendTopFRequest();   //  for my FLASH POP server
					else
						FinishReceivingID();
				}
				break;

				case '+':
				{
					m_tServerSupportsUIDL = true;
					break;
				}

				default:
				{
					str[ len ] = 0;

					int order = 0;
					if( 1 != sscanf( str, "%d", &order ) )
					{
						SetState( MBOX_SERVER_FAILED );
						break;
					};
					
					char *id_space = strchr( str, ' ' );

					if( id_space == NULL )
					{
						SetState( MBOX_SERVER_FAILED );
						break;
					}
					
					OrderAssignedToID( order, id_space + 1 );
				}
			}
		}
		break;

		case MBOX_WF_TOPEX_RESPONSE:
		{
			switch( *str )
			{ 
				case '-': FinishReceivingID(); break;
				case '.': SendTopExRequest(); break;
				default:
				{
					const char msgid[] = "message-id: ";
					if( strnicmp( str, msgid, sizeof( msgid )-1 ) ) break;
					str[ len ] = 0;
					str += sizeof( msgid )-1;
					OrderAssignedToID( m_intOrder, str );
				}
			}
		}
		break;

		
        case MBOX_WF_TOPF_RESPONSE:
        {
        	switch( *str )
        	{
        		case '-':
        		case '.': 	FinishReceivingID();   break;

        		default: {  }
        	}
        }
        break;


		case MBOX_WF_LIST_RESPONSE:
		{
			switch( *str )
			{
				case '.': 
				case '-': SendInitialTopRequest();
				case '+': break;

				default: 
				{
					str[ len ] = 0;

					int order = 0, size = 0;
					if( ( 2 != sscanf( str, "%d %d", &order, &size  ) ) || !order || !size )
					{
						SendQuitRequest( MBOX_SERVER_FAILED );
						break;
					}

					for( int i = m_arrayExcerpt.GetSize(); i; --i )
					{
//						char a[111];
//						TRACE( strcat( itoa( m_arrayExcerpt[i-1]->m_intOrder, a, 10 ), "\n" ) );
						if( order == m_arrayExcerpt[i-1]->m_intOrder ) break;
					}

					if( !i )
					{
						SendQuitRequest( MBOX_SERVER_FAILED );
						break;
					}

					m_arrayExcerpt[--i]->m_intSize = size;
					m_arrayExcerpt[i]->Change( COLUMN_SIZE );
				}
			}
		}
		break;

		case MBOX_WF_TOP_RESPONSE:
		{
			ASSERT( m_aIndices.GetSize() > 0 );
			// BRN
			str[ len ] = 0;
			if (_tcscmp(str, _T("."))==0)
			{
				m_arrayExcerpt[ m_aIndices[0] ]->NoMoreTopLines();
				m_arrayExcerpt[ m_aIndices[0] ]->m_tmCheckTime = m_tmCheckTime;
				m_aIndices.RemoveAt(0);
				SendTopRequest();
			}
			else if (_tcsncmp(str, _T("-ERR"),4)==0)
			{
				m_aIndices.RemoveAt(0);
				SendTopRequest();
			}
			else if (_tcsncmp(str, _T("+OK"),4)==0)
			{

			}
			else
			{
				m_arrayExcerpt[ m_aIndices[0] ]->ParseTopLine( str );
			}

			/* BRN
			switch( *str )
			{
				case '.': m_arrayExcerpt[ m_aIndices[0] ]->NoMoreTopLines();
				
				case '-': m_aIndices.RemoveAt(0);
						  SendTopRequest();

				case '+': break;

				default: 
				{
					str[ len ] = 0;
					m_arrayExcerpt[ m_aIndices[0] ]->ParseTopLine( str );
				}
			}
			*/
		}
		break;

		case MBOX_WF_RETR_RESPONSE:
		{
			switch( *str )
			{
				case '-':
				{
					SendRetrRequest();
				}
				break;

				case '+': 
				{
					m_arrayExcerpt[ m_aIndices[0] ]->BeginDataDownload();
					SetState( MBOX_DOWNLOADING_DATA );
				}
				break;

				default: SetState( MBOX_SERVER_FAILED );
			}
		}
		break;

		case MBOX_DOWNLOADING_DATA:
		{
			BOOL bStopDownload = FALSE;
			if( ( *str == '.' ) && ( len == 1 ) )
			{
				// terminal dot
				bStopDownload = TRUE;
			}
			else
			{
				if (!m_arrayExcerpt[ m_aIndices[0] ]->WriteBufferToDataFile( str, size ))
					bStopDownload = TRUE;
			}
			if (bStopDownload)
			{
				m_arrayExcerpt[ m_aIndices[0] ]->EndDataDownload();
				m_aIndices.RemoveAt(0);
				SetState( MBOX_WF_RETR_RESPONSE );
				SendRetrRequest();
			}
		}
		break;

		case MBOX_WF_DELE_RESPONSE:
		{
			switch( *str )
			{
				case '+':	// we know that indices are in descending order,
							// so we don't worry about fixing remaining indices in
							// array m_aIndices
							delete m_arrayExcerpt[ m_aIndices[0] ];
							m_arrayExcerpt.RemoveAt( m_aIndices[0] );

				case '-':	m_aIndices.RemoveAt(0);
							Change( COLUMN_MAIL );
							SendDeleRequest();
							break;

				default:	SetState( MBOX_SERVER_FAILED );
			}
		}
	}
}

void CMailbox::OrderAssignedToID( int order, const char *str )
{
	TCHAR *szID = new TCHAR [ strlen( str ) + 1 ];
	OemToChar( str, szID );

	// search for this id
	for( int i = m_arrayExcerpt.GetSize(); i; --i )
	{
		if( !m_arrayExcerpt[i-1]->m_strID.Compare( szID ) ||
		    ( m_arrayExcerpt[i-1]->m_intOrder == order ) ) break;
	}

	if( i && m_arrayExcerpt[i-1]->m_intOrder == 0 ) // excerpt with this id exists
	{
		m_arrayExcerpt[i-1]->m_intOrder = order;
	}
	else // create a new one
	{
		Change( COLUMN_MAIL );
		CExcerpt *xrpt = new CExcerpt( this );
		xrpt->m_intOrder = order;
		xrpt->m_strID = szID;
		m_arrayExcerpt.Add( xrpt );
	}

	delete szID;
}

void CMailbox::FinishReceivingID()
{
	int i = m_arrayExcerpt.GetSize();
	while( i-- )
	{
		if( !m_arrayExcerpt[i]->m_intOrder )
		{
			Change( COLUMN_MAIL );
			delete m_arrayExcerpt[i];
			m_arrayExcerpt.RemoveAt(i);
		}
	}

	SendListRequest();
}


void CMailbox::SendListRequest()
{
	int i = m_arrayExcerpt.GetSize();
	while( i-- )
	{
		if( m_arrayExcerpt[i]->m_intSize == 0 )
		{
			SetState( Send( "LIST\r\n", 6 ) ?
				MBOX_WF_LIST_RESPONSE : MBOX_CANNOT_SEND );

			return;
		}
	}

	SendInitialTopRequest();
}

void CMailbox::SendBurstWriteSenseRequest()
{
	if( m_tServerSupportsBurstWrites.IsSet() )
	{
		SendUidlRequest();
	}
	else
	{
		SetState( Send( "NOOP\r\nNOOP\r\n", 12 ) ?
			MBOX_WF_FIRST_NOOP : MBOX_CANNOT_SEND );
	}
}

void CMailbox::SendUidlRequest()
{
	for( int i = 0; i < m_arrayExcerpt.GetSize(); ++i )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合亚洲深深色噜噜狠狠网站| 国产精品乱人伦中文| 欧美成人午夜电影| ...av二区三区久久精品| 日韩不卡一区二区三区| 99久久久久久99| 欧美电视剧在线看免费| 亚洲欧美激情小说另类| 国产在线日韩欧美| 69久久99精品久久久久婷婷| 国产精品久久三| 国产在线一区二区综合免费视频| 在线亚洲欧美专区二区| 欧美激情一区二区三区在线| 久久精品国产免费| 欧美日韩在线播放一区| 日韩毛片精品高清免费| 夫妻av一区二区| 国产亚洲一区二区三区| 国内精品写真在线观看| 欧美一区二区成人6969| 亚洲综合另类小说| 在线视频国内一区二区| 亚洲欧美日韩一区二区三区在线观看| 国产高清不卡一区| 久久精品人人做人人综合 | 欧美色图在线观看| 国产精品久久久久久久岛一牛影视 | 国产精品18久久久久久久久| 日韩视频一区二区在线观看| 亚洲国产aⅴ天堂久久| 91黄色激情网站| 樱桃视频在线观看一区| 色诱视频网站一区| 亚洲尤物视频在线| 欧美挠脚心视频网站| 天天亚洲美女在线视频| 制服丝袜在线91| 久久精品免费观看| 亚洲精品在线网站| 国产精品一级片| 中文成人av在线| 91亚洲午夜精品久久久久久| 一区二区免费看| 欧美日韩国产精选| 极品销魂美女一区二区三区| 久久精品欧美一区二区三区麻豆| 国产一区二区精品久久91| 国产午夜亚洲精品理论片色戒| 成人综合激情网| 亚洲精品免费在线观看| 欧美日韩一区小说| 久久精品国产一区二区| 国产日本欧美一区二区| 一本色道久久综合亚洲aⅴ蜜桃 | 在线免费不卡视频| 男人的j进女人的j一区| 久久女同精品一区二区| av亚洲精华国产精华| 亚洲韩国一区二区三区| 日韩欧美二区三区| 成人中文字幕在线| 亚洲成人动漫一区| 日韩欧美专区在线| 波多野结衣中文一区| 亚洲一区二区精品久久av| 欧美一级日韩免费不卡| 床上的激情91.| 日日摸夜夜添夜夜添国产精品| 久久蜜臀中文字幕| 日本丶国产丶欧美色综合| 麻豆精品在线看| 亚洲色图一区二区| 日韩美女视频在线| 99久精品国产| 激情五月婷婷综合| 亚洲欧美精品午睡沙发| 日韩精品在线一区| 91精品福利视频| 国产一二精品视频| 无码av免费一区二区三区试看 | 亚洲在线观看免费| 久久久久久久久一| 欧美日韩夫妻久久| 99久久久久免费精品国产| 黄色小说综合网站| 亚洲444eee在线观看| 国产精品乱人伦| 精品国产a毛片| 欧美精品一级二级| 色综合久久久网| 丁香婷婷综合五月| 久久成人免费网| 午夜激情一区二区| 伊人色综合久久天天| 中文字幕精品一区| 欧美大黄免费观看| 欧美精品99久久久**| 91女厕偷拍女厕偷拍高清| 国产成人精品亚洲日本在线桃色 | 欧美精品一卡二卡| 色婷婷av一区二区三区大白胸| 国产精品一级片在线观看| 免费在线观看精品| 日韩在线一区二区| 亚洲国产精品久久人人爱| 亚洲视频一二三区| 国产精品热久久久久夜色精品三区| 日韩一区二区在线观看视频播放| 在线亚洲人成电影网站色www| 成人h版在线观看| 成人性生交大片免费看在线播放 | 五月激情丁香一区二区三区| 亚洲国产一区二区视频| 一区二区在线电影| 一区二区三区视频在线观看| 亚洲精品乱码久久久久久| 一区二区三区日韩精品视频| 亚洲欧美激情在线| 亚洲一区免费在线观看| 亚洲成人免费视频| 日本不卡123| 麻豆精品久久精品色综合| 麻豆久久久久久| 国产成人av一区二区三区在线 | 亚洲少妇30p| 一区二区三区中文在线| 亚洲国产另类av| 视频一区二区国产| 免费精品视频在线| 国产永久精品大片wwwapp| 国产乱人伦偷精品视频免下载| 国产成人免费9x9x人网站视频| 成人晚上爱看视频| 色综合天天做天天爱| 欧美日产在线观看| 日韩三级精品电影久久久| 国产午夜精品久久久久久免费视 | 色噜噜狠狠成人中文综合| 在线观看区一区二| 欧美一区二区三区四区五区 | 精品久久五月天| 中文字幕精品综合| 亚洲妇女屁股眼交7| 国产一区二区在线观看视频| 成人精品电影在线观看| 日本福利一区二区| 精品国产欧美一区二区| 国产精品高清亚洲| 免费欧美在线视频| www.日韩精品| 日韩欧美在线不卡| 中文字幕中文乱码欧美一区二区| 亚洲高清不卡在线观看| 国产精品99久久久久久久vr | 亚洲成人动漫av| 国产精品456露脸| 欧美亚洲一区二区三区四区| 欧美大片国产精品| 一区二区三区日本| 国产成人av一区二区三区在线观看| 欧美天堂亚洲电影院在线播放| 久久久蜜桃精品| 亚洲大尺度视频在线观看| 国产91高潮流白浆在线麻豆| 色一区在线观看| 国产性做久久久久久| 丝袜美腿亚洲一区二区图片| av网站一区二区三区| 精品国产露脸精彩对白| 亚洲综合偷拍欧美一区色| 高清不卡在线观看| 欧美一区二区视频网站| 一区二区三区在线免费观看| 国产福利一区二区| 欧美mv日韩mv国产网站app| 一区二区三区四区视频精品免费| 国产综合成人久久大片91| 欧美色图一区二区三区| 1区2区3区欧美| 国产黑丝在线一区二区三区| 欧美成人精品1314www| 亚洲第一主播视频| 色欲综合视频天天天| 国产精品久久久久三级| 韩国欧美一区二区| 日韩午夜小视频| 手机精品视频在线观看| 色狠狠色噜噜噜综合网| 国产精品美女视频| 福利视频网站一区二区三区| 久久久亚洲综合| 国产精品综合网| 国产亚洲精品aa午夜观看| 看电影不卡的网站| 精品黑人一区二区三区久久| 久久成人18免费观看| 精品久久久久久久久久久久久久久 | 欧美午夜一区二区三区免费大片| 日本一区二区三区四区|