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

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

?? smtp_client.c

?? 在freescale 的ne64上開發的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *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 smtp_client.c
 *	\brief OpenTCP SMTP client implementation
 *	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\version 1.0
 *	\date 9.8.2002
 *	\bug
 *	\warning
 *	\todo
 *
 *	OpenTCP implementation of SMTP client that uses TCP api. For interface
 *	functions declarations see smtp_client.h.
 */
#include "datatypes.h"
#include "debug.h"
#include "globalvariables.h"
#include "system.h"
#include "timers.h"
#include "tcp_ip.h"
#ifdef SMTP_WANTED
#include "smtp_client.h"

UINT8 smtpc_init_done = 0; /**< Defines whether smtpc_init has already been invoked or not */

/**
 * 	\brief SMTP client state information
 *
 *	smtp_client variable holds various information about the smtp client
 *  needed for proper operation.
 */
struct
{
	UINT8 state;
	UINT32 remip;
	UINT16 remport;
	INT8 sochandle;
	UINT8 tmrhandle;
	UINT16 unacked;
	UINT16 bufindex;

}smtp_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				*/

/* SMTP client application		*/

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

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

	if( smtp_client.state < SMTP_CLOSED ) {
		DEBUGOUT("smtpc_connect() called but uninitialized\r\n");
		return(-1);
	}

	if( smtp_client.state == SMTP_CLOSED ) {
		DEBUGOUT("SMTP Connection request going to be processed\r\n");
		smtp_client.remip = ip;
		smtp_client.remport = port;
		smtpc_changestate(SMTP_OPEN_REQUESTED);
		return(1);
	}

	return(-1);

}


/** \brief Initializes SMTP 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 smtpc_init (void){

	if(smtpc_init_done) {
		DEBUGOUT("smtp client already initialized\r\n");
		return;
	}


	/* Get timer handle	*/

	smtp_client.tmrhandle = get_timer();

	/* Get TCP Socket	*/

	smtp_client.sochandle = tcp_getsocket(TCP_TYPE_CLIENT, TCP_TOS_NORMAL, TCP_DEF_TOUT, smtpc_eventlistener);

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

	smtpc_changestate(SMTP_CLOSED);
	smtp_client.bufindex = TCP_APP_OFFSET;
	smtp_client.unacked = 0;
	smtp_client.remip = 0;
	smtp_client.remport = 0;

	smtpc_init_done = 0x01;

}

/** \brief Retrieves SMTP clients' state
 * 	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 6.10.2002
 *
 *	Returns the state of SMTP client
 */
UINT8 smtpc_getstate (void){
	return(smtp_client.state);

}

/********************************************************************************
Function:		smtpc_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.7.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 SMTP server reply commands,
				handling out retransmissions and making state changes
*********************************************************************************/


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

	UINT16 cmd;

	 par2++;

	if( cbhandle != smtp_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(smtp_client.state > SMTP_CLOSED)	{
				/* Inform application	*/
				smtpc_error();
			}

			smtpc_changestate(SMTP_CLOSED);
			smtp_client.unacked = 0;

			return(1);

			break;

		case TCP_EVENT_CONNECTED:

			if(smtp_client.state == SMTP_CONNECTIONOPEN_SENT) {
				DEBUGOUT("SMTP TCP connection opened\r\n");
				smtpc_changestate(SMTP_CONNECTION_OPENED);
				smtp_client.unacked = 0;
				smtp_client.bufindex = TCP_APP_OFFSET;
				return(-1);
			}

			break;

		case TCP_EVENT_CLOSE:

			smtpc_changestate(SMTP_CLOSED);
			smtp_client.unacked = 0;
			return(1);

			break;

		case TCP_EVENT_ACK:

			/* Our message is acked	*/

			smtp_client.unacked = 0;

			break;

		case TCP_EVENT_DATA:

			/* Do we have unacked data?	*/

			if(smtp_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();
			cmd += RECEIVE_NETWORK_B();
			cmd += RECEIVE_NETWORK_B();

			switch(smtp_client.state) {

				case SMTP_CONNECTION_OPENED:

					if(cmd == SMTP_CMD_SERVER_READY) {
						DEBUGOUT("SMTP Server is ready\r\n");
						smtpc_changestate(SMTP_SERVER_READY);
						return(1);
					}

					break;

				case SMTP_HELO_SENT:

					if(cmd == SMTP_CMD_OK) {
						DEBUGOUT("HELO acked by SMTP server\r\n");
						smtpc_changestate(SMTP_HELO_ACKED);
						return(1);
					}

					break;

				case SMTP_MAILFROM_SENT:

					if(cmd == SMTP_CMD_OK) {
						DEBUGOUT("MAIL FROM Acked by SMTP server\r\n");
						smtpc_changestate(SMTP_MAILFROM_ACKED);
						return(1);
					}

					break;

				case SMTP_RCPTTO_SENT:

					if(cmd == SMTP_CMD_OK) {
						DEBUGOUT("RCPT TO Acked by SMTP server\r\n");
						smtpc_changestate(SMTP_RCPTTO_ACKED);
						return(1);
					}

					break;

				case SMTP_DATAREQ_SENT:

					if(cmd == SMTP_CMD_DATAOK) {
						DEBUGOUT("DATA Acked by SMTP Server\r\n");
						smtpc_changestate(SMTP_DATAREQ_ACKED);
						return(1);
					}

					break;

				case SMTP_DATAEND_SENT:

					if(cmd == SMTP_CMD_OK) {
						DEBUGOUT("CRLF.CRLF Acked by SMTP Server\r\n");
						smtpc_changestate(SMTP_DATAEND_ACKED);
						return(1);
					}

					break;

				case SMTP_QUIT_SENT:

					if(cmd == SMTP_CMD_QUITOK) {
						DEBUGOUT("QUIT Acked by SMTP Server\r\n");
						smtpc_changestate(SMTP_QUIT_ACKED);
						return(1);
					}

					break;

				default:
					break;


			}


			return(1);


		case TCP_EVENT_REGENERATE:

			/* Send last packet again	*/

			DEBUGOUT("SMTP is regenerating...\r\n");

			switch (smtp_client.state) {

				case SMTP_HELO_SENT:
					smtpc_sendhelo();
					return(1);

				case SMTP_MAILFROM_SENT:
					smtpc_sendmailfrom();
					return(1);

				case SMTP_RCPTTO_SENT:
					smtpc_sendrcptto();
					return(1);

				case SMTP_DATAREQ_SENT:
					smtpc_senddatareq();
					return(1);

				case SMTP_BODY_SENT:
					smtpc_sendbody();
					return(1);

				case SMTP_SENDING_DATA:
					smtpc_senddata();
					return(1);

				case SMTP_DATAEND_SENT:
					smtpc_senddataend();
					return(1);

				case SMTP_QUIT_SENT:
					smtpc_sendquit();
					return(1);

				default:
					return(-1);
			}


			break;


		default:
			return(-1);
	}

	return(-1);

}

/********************************************************************************
Function:		smtpc_run

Parameters:		void

Return val:		void

Date:			21.7.2002

Desc:			This function is main 'thread' of SMTP client program
				and should be called periodically when SMTP client is
				active. This function is responsible of sending commands and
				data to SMTP server and making callbacks to user function stubs.
*********************************************************************************/


void smtpc_run (void)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜激情在线| 久久国产精品色| 亚洲精品第一国产综合野| 欧美国产日产图区| 国产亚洲一区字幕| 国产精品国产自产拍高清av | 亚洲成av人**亚洲成av**| 一区二区三区在线观看欧美| 亚洲欧洲三级电影| 亚洲自拍偷拍综合| 麻豆高清免费国产一区| 精品一区二区免费视频| 久久97超碰国产精品超碰| 亚洲成人综合网站| 日本女人一区二区三区| 国产99精品国产| 欧美日韩综合不卡| 久久久久亚洲蜜桃| 亚洲精品久久久蜜桃| 日韩av电影免费观看高清完整版| 九色|91porny| 欧美亚洲高清一区二区三区不卡| 欧美一区二视频| 亚洲人快播电影网| 国产美女精品人人做人人爽| 在线视频一区二区三| 国产日韩高清在线| 奇米精品一区二区三区四区 | 久久精品一二三| 亚洲国产精品综合小说图片区| 精品一区二区三区不卡| 欧美色网一区二区| 1区2区3区精品视频| 国产精品1024| 日韩一区二区在线观看| 亚洲综合久久久久| 91污片在线观看| 国产农村妇女毛片精品久久麻豆| 奇米精品一区二区三区在线观看| 欧美三级韩国三级日本一级| 综合电影一区二区三区| 风间由美一区二区三区在线观看| 日韩精品一区二区在线| 免费在线观看一区二区三区| 欧美日韩一区二区三区免费看| 国产精品网站在线观看| 国产激情视频一区二区三区欧美| 91精品国产综合久久久久| 午夜不卡av在线| 欧美一区二区在线观看| 麻豆精品久久精品色综合| 精品国产凹凸成av人网站| 狠狠色综合播放一区二区| 久久日韩精品一区二区五区| 国产精品亚洲一区二区三区妖精| 精品国产伦一区二区三区观看方式 | 久久精品国产77777蜜臀| 日韩精品在线一区二区| 成人性色生活片免费看爆迷你毛片| 国产香蕉久久精品综合网| 97精品国产露脸对白| 亚洲欧美另类小说视频| 92国产精品观看| 久久国产视频网| 亚洲色欲色欲www在线观看| 欧美日韩一区二区三区四区五区| 日本不卡一二三| 亚洲天天做日日做天天谢日日欢| 欧美日韩高清影院| jizz一区二区| 久久精品国产在热久久| 18成人在线视频| 久久久亚洲精品石原莉奈| 色呦呦一区二区三区| 狠狠色狠狠色综合系列| 亚洲综合在线视频| 国产精品色一区二区三区| 91精品国产综合久久蜜臀| 色94色欧美sute亚洲线路一久| 久久se这里有精品| 日产精品久久久久久久性色| 国产欧美精品日韩区二区麻豆天美| 成人免费三级在线| 国产一区二区在线视频| 激情另类小说区图片区视频区| 亚洲超碰精品一区二区| 亚洲日本中文字幕区| 亚洲啪啪综合av一区二区三区| 中文字幕中文字幕一区| 国产精品久久久久久户外露出| 久久久亚洲午夜电影| 国产欧美日韩激情| 亚洲欧洲精品一区二区精品久久久| 久久久久9999亚洲精品| 久久精品无码一区二区三区| 国产蜜臀97一区二区三区| 国产日韩成人精品| 中文字幕中文在线不卡住| 亚洲欧洲综合另类| 丝袜脚交一区二区| 国产一区二区三区香蕉| 国产精品66部| 99视频在线精品| 欧美午夜精品免费| 欧美一区二区三区在线观看| 久久美女艺术照精彩视频福利播放| 久久久天堂av| 亚洲小少妇裸体bbw| 日本免费在线视频不卡一不卡二| 激情综合网av| 在线观看日产精品| wwww国产精品欧美| 一区二区三区久久久| 国产一区二区久久| 欧美日韩一级片在线观看| 久久蜜桃香蕉精品一区二区三区| 亚洲精品五月天| 国产精品香蕉一区二区三区| 欧美体内she精视频| 中文字幕色av一区二区三区| 另类的小说在线视频另类成人小视频在线 | 成人免费在线观看入口| 亚洲国产精品久久久久秋霞影院| 国产精品亚洲午夜一区二区三区 | 亚洲激情自拍视频| 国产成人日日夜夜| 精品三级在线看| 秋霞电影网一区二区| 欧美日本在线观看| 亚洲美女电影在线| 色婷婷狠狠综合| 一区二区三区精品在线| 99久久精品国产麻豆演员表| 精品91自产拍在线观看一区| 老司机免费视频一区二区三区| 555夜色666亚洲国产免| 免费欧美在线视频| 日韩视频在线一区二区| 天天av天天翘天天综合网色鬼国产 | 日韩精品中文字幕在线不卡尤物| 亚洲韩国一区二区三区| 在线观看不卡一区| 亚洲午夜久久久久久久久久久| 欧美美女喷水视频| 日本亚洲三级在线| 久久精品日韩一区二区三区| 国产成人精品综合在线观看| 日韩毛片在线免费观看| 欧美日韩你懂的| 国产一区三区三区| 亚洲美女在线国产| 久久夜色精品国产噜噜av| 成人影视亚洲图片在线| 亚洲午夜在线电影| 国产精品亲子乱子伦xxxx裸| 欧美亚日韩国产aⅴ精品中极品| 青青草国产成人99久久| 最好看的中文字幕久久| 欧美日韩国产大片| 成人午夜精品一区二区三区| 亚洲电影一区二区三区| 国产精品免费av| 久久久亚洲高清| 欧美性色欧美a在线播放| 老司机免费视频一区二区三区| 亚洲人成亚洲人成在线观看图片| 日韩午夜在线播放| 欧美色区777第一页| 色综合天天天天做夜夜夜夜做| 精品影视av免费| 日韩av在线免费观看不卡| 一区二区三区精品在线观看| 亚洲欧洲av色图| 欧美性大战久久久| 91成人网在线| 色婷婷激情综合| 欧美视频日韩视频在线观看| 在线看国产日韩| 欧美日韩国产欧美日美国产精品| 波多野结衣中文一区| 99在线视频精品| 欧美亚洲一区二区在线| 欧美精品vⅰdeose4hd| 777亚洲妇女| 精品人在线二区三区| 26uuu国产电影一区二区| 久久综合网色—综合色88| 欧美国产丝袜视频| 亚洲日本在线a| 日韩电影一区二区三区四区| 亚洲电影视频在线| 麻豆久久久久久| 成人午夜在线免费| 在线免费观看日韩欧美| 欧美一区二区精品在线| 国产拍欧美日韩视频二区| 日韩视频一区二区| 国产精品美日韩| 美腿丝袜亚洲色图| 在线观看av一区|