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

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

?? pop3_client.c

?? 在freescale 的ne64上開發的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
 *Copyright (c) 2000-2002 Viola Systems Ltd.
 *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. The end-user documentation included with the redistribution, if
 *any, must include the following acknowledgment:
 *	"This product includes software developed by Viola
 *	Systems (http://www.violasystems.com/)."
 *
 *Alternately, this acknowledgment may appear in the software itself,
 *if and wherever such third-party acknowledgments normally appear.
 *
 *4. The names "OpenTCP" and "Viola Systems" must not be used to
 *endorse or promote products derived from this software without prior
 *written permission. For written permission, please contact
 *opentcp@opentcp.org.
 *
 *5. Products derived from this software may not be called "OpenTCP",
 *nor may "OpenTCP" appear in their name, without prior written
 *permission of the Viola Systems Ltd.
 *
 *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 VIOLA SYSTEMS LTD. OR ITS 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.
 *====================================================================
 *
 *OpenTCP is the unified open source TCP/IP stack available on a series
 *of 8/16-bit microcontrollers, please see <http://www.opentcp.org>.
 *
 *For more information on how to network-enable your devices, or how to
 *obtain commercial technical support for OpenTCP, please see
 *<http://www.violasystems.com/>.
 */

/** \file pop3_client.c
 *	\brief OpenTCP POP3 client implementation
 *	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\version 1.0
 *	\date 20.08.2002
 *	\bug
 *	\warning
 *	\todo
 *
 *	OpenTCP implementation of POP3 client that uses TCP api. For interface
 *	functions declarations see /pop3/pop3_client.h.
 */

#include "debug.h"
#include "datatypes.h"
#include "globalvariables.h"
#include "system.h"
#include "timers.h"
#include "tcp_ip.h"
#ifdef POP3_WANTED
#include "pop3_client.h"


UINT8 pop3c_init_done = 0; /**< Defines whether pop3c_init has already been invoked or not */

/**	\brief	Holds information needed by the POP3 client for successful operation.
 *
 *	All of the information that the POP3 client is using for operation
 *	are stored here. See pop3c_struct definition for more
 *	information about the structure fields.
 */
struct pop3c_struct pop3_client;


/* The applications that use TCP must implement following function stubs			*/
/* void application_name_init (void) - call once when processor starts				*/
/* void application_name_run (void) - call periodically on main loop				*/
/* INT32 application_name_eventlistener (INT8, UINT8, UINT32, UINT32)				*/
/* - called by TCP input process to inform arriving data, errors etc				*/


/* POP3 Client application		*/


/** \brief Start E-mail reading procedure
 * 	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 11.09.2002
 *	\param ip IP address of POP3 server from which to read the e-mails
 *	\param port Port on the server
 *	\return
 *		\li -1 - Error
 *		\li >0 - Connection procedure started (OK)
 *
 *	This function is called by user when she wants to start E-mail
 *	reading procedure. The function is responsible of establishing
 *	connection to POP3 server. After connection is established the
 *	POP3 client engine starts to make callbacks to user functions
 *	in order to get username information, data etc.
 */
INT8 pop3c_connect (UINT32 ip, UINT16 port){
	/* Do we have socket	*/

	if( pop3_client.sochandle < 0 ) {
		DEBUGOUT("pop3c_connect() called but no socket\r\n");
		return(-1);
	}

	if( pop3_client.state < POP3C_CLOSED ) {
		DEBUGOUT("pop3c_connect() called but uninitialized\r\n");
		return(-1);
	}

	if( pop3_client.state == POP3C_CLOSED )	{
		DEBUGOUT("POP3 Connection request going to be processed\r\n");
		pop3_client.remip = ip;
		pop3_client.remport = port;
		pop3c_changestate(POP3C_OPEN_REQUESTED);
		return(1);
	}

	return(-1);

}

/** \brief Initialize POP3 client
 * 	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 12.08.2002
 *
 *	This function should be called once when system starts.
 *	Make sure that system services e.g. timers, TCP are initialized
 *	before initializing applications!
 */
void pop3c_init (void){

	if(pop3c_init_done) {
		DEBUGOUT("POP3 client already initialized\r\n");
		return;
	}


	/* Get timer handle	*/

	pop3_client.tmrhandle = get_timer();

	/* Get TCP Socket	*/

	pop3_client.sochandle = tcp_getsocket(TCP_TYPE_CLIENT, TCP_TOS_NORMAL, TCP_DEF_TOUT, pop3c_eventlistener);

	if( pop3_client.sochandle < 0 )	{
		DEBUGOUT("pop3c_init() uncapable of getting socket\r\n");
		RESET_SYSTEM();
	}

	pop3c_changestate(POP3C_CLOSED);
	pop3_client.remip = 0;
	pop3_client.remport = 0;
	pop3_client.unacked = 0;
	pop3_client.msgtotal = 0;
	pop3_client.curmsgindex = 0;
	pop3_client.curmsgtotlen = 0;
	pop3_client.curmsghlen = 0;
	pop3_client.headerbuf[0] = '\0';
	pop3_client.charsinheaderbuf = 0;
	pop3_client.from[0] = '\0';
	pop3_client.subject[0] = '\0';

	pop3c_init_done = 0x01;				/* We are initialized now	*/

}
/** \brief Get current POP3 client state
 * 	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 10.10.2002
 *	\return Current POP3 client state
 *
 *	Invoke this function to get current state of the POP3 client
 *
 */
UINT8 pop3c_getstate (void){
	return(pop3_client.state);

}

/********************************************************************************
Function:		pop3c_eventlistener

Parameters:		INT8 cbhandle - handle to TCP socket where event is coming from
				UINT8 event - type of event
				UINT32 par1 - parameter the meaning of depends on event
				UINT32 par2 - parameter the meaning of depends on event

Return val:		INT32 - depends on event but usually (-1) is error of some
						kind and positive reply means OK

Date:			21.8.2002

Desc:			This function is given to TCP socket as function pointer to be
				used by TCP engine to make callbacks to inform about events
				on TCP e.g. arriving data. Main functionality of this function
				is to parse data from TCP to detect POP3 server reply commands,
				handling out retransmissions and making state changes
*********************************************************************************/


INT32 pop3c_eventlistener (INT8 cbhandle, UINT8 event, UINT32 par1, UINT32 par2)
{
	/* This function is called by TCP stack to inform about events	*/

	UINT8 cmd;
	UINT16 i;
	static UINT16 len;
	static UINT16 match;
	static UINT8  end_detect;
	UINT8 ch;
	UINT8 j;
	UINT8 endbuf[4];

	par2 = 0;
	j = 0;
	len = 0;
	endbuf[0] = 0;

	if( cbhandle != pop3_client.sochandle)		/* Not our handle	*/
		return(-1);

	switch( event ) {

		case TCP_EVENT_CONREQ:

			/* We don't allow incoming connections	*/

			return(-1);

		case TCP_EVENT_ABORT:

			if(pop3_client.state > POP3C_CLOSED) {
				/* Inform application	*/
				pop3c_error();
			}

			pop3c_changestate(POP3C_CLOSED);
			pop3_client.unacked = 0;

			return(1);

			break;

		case TCP_EVENT_CONNECTED:

			if(pop3_client.state == POP3C_CONNECTIONOPEN_SENT) {
				DEBUGOUT("POP3 TCP connection opened\r\n");
				pop3c_changestate(POP3C_CONNECTION_OPENED);
				pop3_client.unacked = 0;
				return(-1);
			}

			break;

		case TCP_EVENT_CLOSE:

			pop3c_changestate(POP3C_CLOSED);
			pop3_client.unacked = 0;
			return(1);

			break;

		case TCP_EVENT_ACK:

			/* Our message is acked	*/

			pop3_client.unacked = 0;

			break;

		case TCP_EVENT_DATA:

			/* Do we have unacked data?	*/

			if(pop3_client.unacked)
				return(-1);

			/* Get reply from server	*/

			if(par1 < 3)					/* Long enough?	*/
				return(-1);

			/* Get command				*/

			NETWORK_RECEIVE_INITIALIZE(received_tcp_packet.buf_index);
			cmd = RECEIVE_NETWORK_B();
			NETWORK_RECEIVE_INITIALIZE(received_tcp_packet.buf_index);

			switch(pop3_client.state) {

				case POP3C_CONNECTION_OPENED:

					if(cmd == POP3C_OK)	{
						DEBUGOUT("POP3 Server is ready\r\n");
						pop3c_changestate(POP3C_SERVER_READY);
						return(1);
					}

					break;

				case POP3C_USERNAME_SENT:

					if(cmd == POP3C_OK)	{
						DEBUGOUT("USER +OK by POP3 server\r\n");
						pop3c_changestate(POP3C_USERNAME_ACKED);
						return(1);
					}

					break;

				case POP3C_PASSWORD_SENT:

					if(cmd == POP3C_OK) {
						DEBUGOUT("PASS +OK by POP3 server\r\n");
						pop3c_changestate(POP3C_PASSWORD_ACKED);
						return(1);
					}

					break;

				case POP3C_STAT_SENT:

					if(cmd == POP3C_OK)	{
						DEBUGOUT("STAT get from POP3 server\r\n");

						/* Parse number of messages	*/

						NETWORK_RECEIVE_INITIALIZE(received_tcp_packet.buf_index);

						pop3_client.msgtotal = 0;
						pop3_client.curmsgindex = 0;
						pop3_client.curmsgtotlen = 0;
						pop3_client.curmsghlen = 0;
						if( pop3c_parsestat() < 0 )	{
							/* Error parsing STAT reply	*/
							/* Inform application		*/
							pop3c_error();
							(void)tcp_abort(pop3_client.sochandle);
							pop3c_changestate(POP3C_CLOSED);
							pop3_client.unacked = 0;
							return(1);
						}

						/* Inform application about the nmbr of messages	*/
						pop3c_messages(pop3_client.msgtotal);

						pop3c_changestate(POP3C_STAT_GET);
						return(1);
					}

					break;

				case POP3C_LIST_SENT:

					if(cmd == POP3C_OK)	{
						DEBUGOUT("LIST get from POP3 server\r\n");

						/* Parse message total len	*/

						NETWORK_RECEIVE_INITIALIZE(received_tcp_packet.buf_index);

						pop3_client.curmsgtotlen = 0;

						if(pop3c_parselist() < 0) {
							/* Error parsing LIST reply	*/
							/* Inform application		*/
							(void)pop3c_error();
							(void)tcp_abort(pop3_client.sochandle);
							pop3c_changestate(POP3C_CLOSED);
							pop3_client.unacked = 0;
							return(1);

						}


						pop3c_changestate(POP3C_LIST_GET);
						return(1);
					}

					break;

				case POP3C_TOP0_SENT:

					if(cmd == POP3C_OK) {
						DEBUGOUT("TOP x 0 get from POP3 server\r\n");

						/* Continue imediately to receive header	*/
						pop3_client.curmsghlen = 0;
						pop3_client.from[0] = '\0';
						pop3_client.subject[0] = '\0';
						match = 0;

						/* Receive untill LF found	*/

						for(i=0; i<(UINT16)par1; i++)
						{
							ch = RECEIVE_NETWORK_B();

							if(ch == '\n')
							{	i++;
								break;
							}
						}

						par1 = i;


						pop3c_changestate(POP3C_RECEIVING_HEADER);
					}else
						break;

				case POP3C_RECEIVING_HEADER:
				case POP3C_RECEIVING_HDR_FROM:
				case POP3C_RECEIVING_HDR_SUBJ:

					pop3_client.curmsghlen += (UINT16)par1;

					if( pop3_client.curmsghlen > (pop3_client.curmsgtotlen + 100) )	{
						/* Somebody tries to fool us	*/
						/* Move to next msg				*/

						pop3c_changestate(POP3C_MESSAGE_RECEIVED);
						break;

					}

					/* We try to find 'from:', or 'subject:'	*/

					NETWORK_RECEIVE_INITIALIZE(received_tcp_packet.buf_index);

					for( i=0; i<(UINT16)par1; i++) {

						ch = RECEIVE_NETWORK_B();

						if( pop3_client.state == POP3C_RECEIVING_HEADER) {

							if( ch == '\r')	{
								pop3_client.charsinheaderbuf = 0;
								continue;
							}

							if( ch == '\n')	{
								pop3_client.charsinheaderbuf = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看日韩av| 精品国产乱码久久久久久蜜臀| 精品国产乱码久久久久久影片| 亚洲午夜久久久久久久久电影院 | 日本丶国产丶欧美色综合| 欧美成人福利视频| 日本美女一区二区三区视频| 成人在线视频一区| 中文字幕av一区二区三区高 | 国产91精品入口| 精品精品欲导航| 久久99热99| 精品日韩99亚洲| 国产精品一线二线三线| 国产香蕉久久精品综合网| 日韩和的一区二区| 日韩视频中午一区| 久久国产生活片100| 久久日一线二线三线suv| 国产综合色产在线精品| 久久男人中文字幕资源站| 色综合久久综合网欧美综合网| 亚洲va韩国va欧美va| 久久久久久毛片| 色偷偷88欧美精品久久久| 美女视频黄免费的久久 | 亚洲综合色噜噜狠狠| 日韩午夜激情电影| 97se亚洲国产综合自在线不卡| 亚洲一区欧美一区| 久久精品视频在线免费观看| 在线观看国产91| 国产福利一区二区三区| 亚洲精品成人少妇| 日本一区二区免费在线| 欧美一区二区女人| 色婷婷久久久亚洲一区二区三区| 久久精品99久久久| 亚洲高清不卡在线| 国产精品欧美极品| 日韩精品专区在线影院观看| 91久久精品网| 成人网在线播放| 九九精品一区二区| 亚洲成人激情综合网| 中文字幕日韩一区二区| 久久一区二区三区国产精品| 欧美午夜在线一二页| 91伊人久久大香线蕉| 国产精华液一区二区三区| 蜜臀99久久精品久久久久久软件| 一区二区三区久久| 亚洲欧洲成人自拍| 久久女同互慰一区二区三区| 日韩一区二区三区av| 欧洲精品一区二区| 亚洲精品水蜜桃| 久久久久久久久久久99999| 欧美日韩亚洲综合在线 | 精品国产伦理网| 欧美日本一道本| 欧美亚洲动漫另类| 91美女视频网站| 91免费在线看| 成人免费毛片aaaaa**| 久久99精品久久只有精品| 日韩影院免费视频| 日韩激情av在线| 偷拍与自拍一区| 日日夜夜免费精品| 三级久久三级久久久| 日韩不卡免费视频| 亚洲免费在线视频| 日韩精品一区二区三区在线观看 | 激情六月婷婷久久| 国内精品视频666| 日韩二区三区在线观看| 丝袜美腿亚洲色图| 亚洲自拍偷拍综合| 亚欧色一区w666天堂| 亚洲成人一区二区在线观看| 天天做天天摸天天爽国产一区| 亚洲午夜激情av| 日韩和的一区二区| 久久国产精品第一页| 美国十次综合导航| 国产乱码精品一区二区三区av| 国产成人夜色高潮福利影视| 成人性色生活片免费看爆迷你毛片| 国产精品1区2区3区在线观看| 国产大片一区二区| 色就色 综合激情| 欧美色网站导航| 日韩一卡二卡三卡国产欧美| 精品久久久久久综合日本欧美| 久久夜色精品一区| 亚洲色图都市小说| 五月激情综合色| 在线观看不卡一区| 91精品国产综合久久久久久久久久| 在线观看亚洲一区| 欧美视频一区二| 日韩欧美色综合网站| 久久久五月婷婷| 成人欧美一区二区三区在线播放| 国产精品午夜免费| 亚洲午夜av在线| 久久66热re国产| 日韩视频免费直播| 久久久久久久久97黄色工厂| 日韩伦理av电影| 免费xxxx性欧美18vr| 国产91精品一区二区麻豆网站| 一本久道久久综合中文字幕| 日韩一级免费观看| ...av二区三区久久精品| 日本不卡一区二区三区| 国产精品亚洲成人| 欧美系列日韩一区| 国产亚洲精品久| 亚洲第四色夜色| 成人涩涩免费视频| aaa欧美色吧激情视频| 91麻豆精品国产无毒不卡在线观看| 国产婷婷色一区二区三区| 亚洲一卡二卡三卡四卡无卡久久 | 欧美大片日本大片免费观看| 国产精品国产三级国产aⅴ原创| 丝袜国产日韩另类美女| 成人av第一页| 久久久久久综合| 日本午夜精品视频在线观看 | 激情图片小说一区| 在线观看亚洲一区| 国产精品理伦片| 成人美女在线观看| 日韩欧美色综合| 亚洲电影第三页| 一本色道亚洲精品aⅴ| 国产亚洲人成网站| 免费在线观看视频一区| 欧美体内she精高潮| 亚洲欧洲av色图| 国产福利一区二区三区视频| 日韩欧美国产三级电影视频| 亚洲一区二区三区不卡国产欧美| 国产成人欧美日韩在线电影| 精品国产亚洲一区二区三区在线观看| 亚洲男人电影天堂| 不卡视频在线观看| 国产欧美一区二区在线| 久久99国产精品麻豆| 欧美一区二区三区视频免费播放 | 91丨porny丨最新| 国产精品久久久久永久免费观看| 国内外成人在线| 久久色视频免费观看| 国产乱人伦偷精品视频不卡| 日韩三级av在线播放| 日韩激情av在线| 日韩一区二区三区在线观看 | 欧美国产一区在线| 国产成人啪免费观看软件| 国产视频不卡一区| 国产a级毛片一区| 中文字幕在线一区免费| 成人av网站免费| 亚洲欧美在线观看| 色综合天天性综合| 亚洲精品免费电影| 欧美三级三级三级| 亚洲bt欧美bt精品777| 欧美日韩国产电影| 日韩 欧美一区二区三区| 欧美电影精品一区二区| 久久国产夜色精品鲁鲁99| 久久综合色天天久久综合图片| 国产在线麻豆精品观看| 日本一区二区视频在线| 99国产一区二区三精品乱码| 亚洲精品乱码久久久久久黑人| 精品视频色一区| 奇米色777欧美一区二区| 日韩欧美亚洲国产精品字幕久久久| 久久国产三级精品| 国产精品毛片大码女人| 亚洲最色的网站| 欧美在线观看一二区| 亚洲成人高清在线| 日韩欧美你懂的| 成人免费毛片嘿嘿连载视频| 亚洲激情在线播放| 欧美一区二区女人| 国产69精品久久99不卡| 亚洲一区二区视频| 精品国产一区二区三区久久久蜜月 | 老汉av免费一区二区三区| 国产欧美一二三区| 欧美体内she精视频| 精品一区二区三区免费播放|