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

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

?? smtpcli.c

?? TCPIP協議包
?? C
?? 第 1 頁 / 共 2 頁
字號:
	/* Say HELO */
	sendcmd(cb,"HELO %s\n",Hostname);
	if(!Smtpbatch){
		rcode = getresp(cb,200);
		if(rcode == -1 || rcode >= 400)
			goto quit;
	}
	do {	/* For each message... */

		/* if this file open fails, skip it */
		if ((cb->tfile = fopen(cb->tname,READ_TEXT)) == NULL)
			continue;

		/* Send MAIL and RCPT commands */
		sendcmd(cb,"MAIL FROM:<%s>\n",cb->jobq->from);
		if(!Smtpbatch){
			rcode = getresp(cb,200);
			if(rcode == -1 || rcode >= 400)
				goto quit;
		}
		rcpts = 0;
		goodrcpt = 0;
		for (tp = cb->jobq->to; tp != NULL; tp = tp->next){
			sendcmd(cb,"RCPT TO:<%s>\n",tp->val);
			if(!Smtpbatch){
				rcode = getresp(cb,200);
				if(rcode == -1)
					goto quit;
				if(rcode < 400)
					goodrcpt = 1; /* At least one good */
			}
			rcpts++;
		}
		/* Send DATA command */
		sendcmd(cb,"DATA\n");
		if(!Smtpbatch){
			rcode = getresp(cb,200);
			if(rcode == -1 || rcode >= 400)
				goto quit;
		}
		if(Smtpbatch){
			/* Now wait for the responses to come back. The first time
			 * we do this, we wait first for the start banner and
			 * HELO response. In any case, we wait for the response to
			 * the MAIL command here.
			 */
			for(i= init ? 3 : 1;i > 0;i--){
				rcode = getresp(cb,200);
				if(rcode == -1 || rcode >= 400)
					goto quit;
			}
			init = 0;

			/* Now process the responses to the RCPT commands */
			for(i=rcpts;i!=0;i--){
				rcode = getresp(cb,200);
				if(rcode == -1)
					goto quit;
				if(rcode < 400)
					goodrcpt = 1; /* At least one good */
			}
			/* And finally get the response to the DATA command.
			 * Some servers will return failure here if no recipients
			 * are valid, some won't.
			 */
			rcode = getresp(cb,200);
			if(rcode == -1 || rcode >= 400)
				goto quit;

			/* check for no good rcpt on the list */
			if (goodrcpt == 0){
				sendcmd(cb,".\n");  /* Get out of data mode */
				goto quit;
			}
		}
		/* Send the file. This also closes it */
		smtpsendfile(cb);

		/* Wait for the OK response */
		rcode = getresp(cb,200);
		if(rcode == -1)
			goto quit;
		if((rcode >= 200 && rcode < 300) || rcode >= 500){
			/* if a good transfer or permanent failure remove job */

			if (cb->errlog != NULL)
				retmail(cb);
			/* Unlink the textfile */
			(void) unlink(cb->tname);
			(void) unlink(cb->wname);	/* unlink workfile */
			logmsg(s,"SMTP sent job %s To: %s From: %s",
			 cb->jobq->jobname,cb->jobq->to->val,cb->jobq->from);
		}
	} while(next_job(cb));
quit:
	sendcmd(cb,"QUIT\n");
	if (cb->errlog != NULL){
		retmail(cb);
		(void) unlink(cb->wname);	/* unlink workfile */
		(void) unlink(cb->tname);	/* unlink text */
	}
	(void) fclose(cb->network);
	if(cb->tfile != NULL)
		fclose(cb->tfile);
	cb->lock = 0;
	del_session(cb);
}


/* create mail lockfile */
int
mlock(dir,id)
char *dir,*id;
{
	char lockname[LINELEN];
	int fd;
	struct stat statbuf;

#ifdef	MSDOS
	if(strlen(id) > 8) {		/* truncate long filenames */
		id[8] = '\0';
		if(id[7] == '/')
			id[7] = '\0';
	}
#endif
	/* Try to create the lock file in an atomic operation */
	sprintf(lockname,"%s/%s.lck",dir,id);
#ifdef        AMIGA
	/* don't ask, really, just don't ask... I'd do file locking on
	 * an Amiga much more differently than this.
	 */
	if(access(lockname, 0) == 0)
		return -1;
#endif
	fd = open(lockname, O_WRONLY|O_EXCL|O_CREAT,0600);
	if(fd != -1){
		/* Lock succeeded */
		close(fd);
		return 0;
	}
	/* See if the dir doesn't exist */
	if(stat(dir,&statbuf) == -1 || (statbuf.st_mode & S_IFMT) != S_IFDIR){
		printf("Lock directory %s missing\n",dir);
		fflush(stdout);
		return 0;
	}
	return -1;	/* lock failed */
}

/* remove mail lockfile */
int
rmlock(dir,id)
char *dir,*id;
{
	char lockname[LINELEN];
#ifdef	MSDOS
	if(strlen(id) > 8) {		/* truncate long filenames */
		id[8] = '\0';
		if(id[7] == '/')
			id[7] = '\0';
	}
#endif
	sprintf(lockname,"%s/%s.lck",dir,id);
	return(unlink(lockname));
}

/* free the message struct and data */
static void
del_session(cb)
register struct smtpcli *cb;
{
	register struct smtp_job *jp,*tp;
	register int i;

	if (cb == NULL)
		return;
	for(i=0; i<MAXSESSIONS; i++) 
		if(cli_session[i] == cb) {
			cli_session[i] = NULL;
			break;
		}

	free(cb->wname);
	free(cb->tname);
	free(cb->destname);
	for (jp = cb->jobq; jp != NULL;jp = tp) {
			tp = jp->next;
			del_job(jp);
	}
	del_list(cb->errlog);
	free(cb);
	Smtpsessions--;	/* number of connections active */
}

static void
del_job(jp)
register struct smtp_job *jp;
{
	if ( *jp->jobname != '\0')
		(void) rmlock(Mailqdir,jp->jobname);
	free(jp->from);
	del_list(jp->to);
	free(jp);
}

/* delete a list of list structs */
void
del_list(lp)
struct list *lp;
{
	register struct list *tp, *tp1;
	for (tp = lp; tp != NULL; tp = tp1) {
		tp1 = tp->next;
		free(tp->val);
		free(tp);
	}
}

/* stub for calling mdaemon to return message to sender */
static void
retmail(cb)
struct smtpcli *cb;
{
	FILE *infile;
#ifdef SMTPTRACE
	if (Smtptrace > 5) {
		printf("smtp job %s returned to sender\n",cb->wname);
	}
#endif
	if ((infile = fopen(cb->tname,READ_TEXT)) == NULL)
		return;
	mdaemon(infile,cb->jobq->from,cb->errlog,1);
	fclose(infile);
}

/* look to see if a smtp control block exists for this ipdest */
static struct smtpcli *
lookup(destaddr)
int32 destaddr;
{
	register int i;

	for(i=0; i<MAXSESSIONS; i++) {
		if (cli_session[i] == NULL)
			continue;
		if(cli_session[i]->ipdest == destaddr)
			return cli_session[i];
	}
	return NULL;
}

/* create a new  smtp control block */
static struct smtpcli *
newcb()
{
	register int i;
	register struct smtpcli *cb;

	for(i=0; i<MAXSESSIONS; i++) {
		if(cli_session[i] == NULL) {
			cb = (struct smtpcli *)callocw(1,sizeof(struct smtpcli));
			cb->wname = mallocw((unsigned)strlen(Mailqdir)+JOBNAME);
			cb->tname = mallocw((unsigned)strlen(Mailqdir)+JOBNAME);
			cli_session[i] = cb;
			Smtpsessions++;	/* number of connections active */
			return(cb);
		}
	}
	return NULL;
}

static void
execjobs()
{
	register struct smtpcli *cb;
	register int i;

	for(i=0; i<MAXSESSIONS; i++) {
		cb = cli_session[i];
		if (cb == NULL) 
			continue;
		if(cb->lock)
			continue;

		sprintf(cb->tname,"%s/%s.txt",Mailqdir,cb->jobq->jobname);
		sprintf(cb->wname,"%s/%s.wrk",Mailqdir,cb->jobq->jobname);

		newproc("smtp_send", 1024, smtp_send, 0, cb,NULL,0);

#ifdef SMTPTRACE
		if (Smtptrace) 
			printf("Trying Connection to %s\n",inet_ntoa(cb->ipdest));
#endif


	}
}
	
/* add this job to control block queue */
static struct smtp_job *
setupjob(cb,id,from)
struct smtpcli *cb;
char *id,*from;
{
	register struct smtp_job *p1,*p2;

	p1 = (struct smtp_job *)callocw(1,sizeof(struct smtp_job));
	p1->from = strdup(from);
	strcpy(p1->jobname,id);
	/* now add to end of jobq */
	if ((p2 = cb->jobq) == NULL)
		cb->jobq = p1;
	else {
		while(p2->next != NULL)
			p2 = p2->next;
		p2->next = p1;
	}
	return p1;
}

/* called to advance to the next job */
static int
next_job(cb)
register struct smtpcli *cb;
{
	register struct smtp_job *jp;

	jp = cb->jobq->next;
	del_job(cb->jobq);
	/* remove the error log of previous message */
	del_list(cb->errlog);
	cb->errlog = NULL;
	cb->jobq = jp;
	if (jp == NULL)
		return 0;
	sprintf(cb->tname,"%s/%s.txt",Mailqdir,jp->jobname);
	sprintf(cb->wname,"%s/%s.wrk",Mailqdir,jp->jobname);
#ifdef SMTPTRACE
	if (Smtptrace > 5) {
		printf("sending job %s\n",jp->jobname);
	}
#endif
		return 1;

}


/* Mail routing function. For now just use the hosts file */
int32
mailroute(dest)
char *dest;
{
	int32 destaddr;

	/* look up address or use the gateway */
	destaddr = resolve_mx(dest);
	if (destaddr == 0 && (destaddr = resolve(dest)) == 0)
		if (Gateway != 0) 
			destaddr = Gateway; /* Use the gateway  */
	return destaddr;
	
}

/* save line in error list */
static void
logerr(cb,line)
struct smtpcli *cb;
char *line;
{
	register struct list *lp,*tp;
	tp = (struct list *)callocw(1,sizeof(struct list));
	tp->val = strdup(line);
	/* find end of list */
	if ((lp = cb->errlog) == NULL)
		cb->errlog = tp;
	else {
		while(lp->next != NULL)
			lp = lp->next;
		lp->next = tp;
	}
}

static int
smtpsendfile(cb)
register struct smtpcli *cb;
{
	int error = 0;

	strcpy(cb->buf,"\n");
	while(fgets(cb->buf,sizeof(cb->buf),cb->tfile) != NULL) {
		/* Escape a single '.' character at the beginning of a line */
		if(strcmp(cb->buf,".\n") == 0)
			putc('.',cb->network);
		fputs(cb->buf,cb->network);
	}
	fclose(cb->tfile);
	cb->tfile = NULL;
	/* Send the end-of-message command */
	if(cb->buf[strlen(cb->buf)-1] == '\n')
		sendcmd(cb,".\n");
	else
		sendcmd(cb,"\n.\n");
	return error;
}
/* do a printf() on the network stream with optional local tracing */
static void
sendcmd(struct smtpcli *cb,char *fmt, ...)
{
	va_list args;

	va_start(args,fmt);
#ifdef	SMTPTRACE
	if(Smtptrace){
		printf("smtp sent: ");
		vprintf(fmt,args);
	}
#endif
	vsprintf(cb->buf,fmt,args);
	fputs(cb->buf,cb->network);
	va_end(args);
}

/* Wait for, read and display response from server. Return the result code. */
static int
getresp(cb,mincode)
struct smtpcli *cb;
int mincode;	/* Keep reading until at least this code comes back */
{
	int rval;
	char line[LINELEN];

	fflush(cb->network);
	for(;;){
		/* Get line */
		if(fgets(line,LINELEN,cb->network) == NULL){
			rval = -1;
			break;
		}
		rip(line);		/* Remove cr/lf */
		rval = atoi(line);
#ifdef	SMTPTRACE
		if(Smtptrace)
			printf("smtp recv: %s\n",line);/* Display to user */
#endif
		if(rval >= 500) {	/* Save permanent error replies */
			char tmp[LINELEN];
			if(cb->errlog == NULL) {
				sprintf(tmp,"While talking to %s:",
					cb->destname);
				logerr(cb,tmp);
			}
			if(cb->buf[0] != '\0') { /* Save offending command */
				rip(cb->buf);
				sprintf(tmp,">>> %s",cb->buf);
				logerr(cb,tmp);
				cb->buf[0] = '\0';
			}
			sprintf(tmp,"<<< %s",line);
			logerr(cb,tmp);		/* save the error reply */
		}
		/* Messages with dashes are continued */
		if(line[3] != '-' && rval >= mincode)
			break;
	}
	return rval;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃精品视频在线| 九九**精品视频免费播放| 欧美电影免费观看高清完整版在线 | 亚洲激情综合网| 中文字幕一区二区三区不卡 | 国产一区二区三区免费| 国产精品综合在线视频| 国产夫妻精品视频| yourporn久久国产精品| 成人app软件下载大全免费| 99久久99久久久精品齐齐| 99r国产精品| 欧美精品丝袜中出| 精品少妇一区二区| 亚洲国产成人一区二区三区| 亚洲桃色在线一区| 亚洲国产乱码最新视频| 视频在线观看国产精品| 国产毛片精品视频| av中文字幕在线不卡| 色av成人天堂桃色av| 欧美高清视频不卡网| 日韩精品一区二区在线观看| 国产性天天综合网| 亚洲国产视频一区二区| 粉嫩嫩av羞羞动漫久久久| 91久久精品网| 精品国产一区二区三区四区四 | 亚洲成在人线免费| 国产美女娇喘av呻吟久久| 99精品久久只有精品| 欧美高清精品3d| 国产精品不卡一区| 天使萌一区二区三区免费观看| 麻豆精品国产91久久久久久| 99麻豆久久久国产精品免费优播| 欧美日韩中字一区| 国产精品国产三级国产专播品爱网 | 色久优优欧美色久优优| 精品国产污污免费网站入口| 亚洲三级在线播放| 视频在线观看一区| 国产一区在线不卡| 欧美日韩国产系列| |精品福利一区二区三区| 久久精品国产色蜜蜜麻豆| 欧美性猛片xxxx免费看久爱| 国产日韩综合av| 久久99国产精品久久| 欧美人与z0zoxxxx视频| 中文字幕日韩欧美一区二区三区| 伦理电影国产精品| 欧美日本一区二区在线观看| 中文字幕在线一区二区三区| 狠狠色综合色综合网络| 欧美美女直播网站| 一区2区3区在线看| 色综合天天在线| 国产精品美女一区二区三区 | 国产电影精品久久禁18| 欧美一级免费观看| 亚洲一区二区三区美女| av电影在线观看完整版一区二区| 久久人人97超碰com| 日韩中文字幕麻豆| 欧美美女喷水视频| 日韩精品电影一区亚洲| 欧美日韩国产免费一区二区| 亚洲自拍偷拍欧美| 91久久久免费一区二区| 亚洲美女精品一区| 日本韩国精品一区二区在线观看| 国产精品久久久久久久第一福利| 成人免费视频免费观看| 国产精品视频免费| av电影天堂一区二区在线观看| 国产精品人人做人人爽人人添 | 欧美中文字幕不卡| 亚洲免费在线播放| 欧洲一区二区av| 亚洲一区二区欧美日韩| 制服丝袜av成人在线看| 免费成人美女在线观看.| 精品三级在线看| 国产成人在线看| 自拍偷拍亚洲激情| 欧美嫩在线观看| 久久精品国产一区二区三| 精品国产露脸精彩对白| 国产精品91一区二区| 综合精品久久久| 欧美亚洲免费在线一区| 麻豆一区二区三区| 国产欧美日韩三级| 欧美视频中文字幕| 国产揄拍国内精品对白| 国产精品二区一区二区aⅴ污介绍| 91在线观看地址| 日韩精品一级中文字幕精品视频免费观看 | 亚洲地区一二三色| 精品乱人伦小说| 不卡欧美aaaaa| 日韩成人免费看| 亚洲国产成人私人影院tom| 欧美性猛片xxxx免费看久爱| 久久99国产精品久久99| 一区二区三区蜜桃网| 久久一日本道色综合| 欧美在线影院一区二区| 韩国成人精品a∨在线观看| 亚洲欧美一区二区三区久本道91| 制服丝袜激情欧洲亚洲| 99riav一区二区三区| 久久精品国产精品亚洲精品| 亚洲精品五月天| 精品国产乱码久久久久久牛牛| 91污在线观看| 国内精品国产成人| 亚洲不卡一区二区三区| 国产精品免费观看视频| 精品国产免费视频| 欧美午夜免费电影| 99精品国产91久久久久久| 国产一区二区主播在线| 亚洲超丰满肉感bbw| 亚洲色图在线播放| 国产精品免费久久久久| 精品免费视频.| 欧美三级在线视频| 91麻豆免费在线观看| 国产精品正在播放| 麻豆专区一区二区三区四区五区| 亚洲成a人片综合在线| 亚洲成人动漫精品| 国产精品乱码妇女bbbb| 日韩欧美国产一区二区在线播放| 欧美无乱码久久久免费午夜一区| 成人免费高清在线观看| 国产精品一品二品| 国产成人精品一区二区三区四区 | 亚洲欧洲制服丝袜| 国产精品入口麻豆原神| 欧美激情一区二区三区在线| 久久欧美一区二区| 久久亚洲综合色一区二区三区| 日韩一区二区麻豆国产| 777亚洲妇女| 欧美电影免费观看高清完整版在 | 国产中文字幕精品| 麻豆视频观看网址久久| 久久国产麻豆精品| 国产麻豆视频精品| 国产成人精品免费| 成人听书哪个软件好| 国产iv一区二区三区| 99热精品一区二区| 欧美午夜宅男影院| 91精品午夜视频| 亚洲精品一区在线观看| 久久久久久久久久电影| 国产精品乱子久久久久| 一区二区三区四区视频精品免费 | 97国产精品videossex| 99久久99久久免费精品蜜臀| 色网综合在线观看| 欧美日韩在线免费视频| 日韩欧美国产高清| 欧美国产在线观看| 伊人开心综合网| 免费av网站大全久久| 国产99久久久国产精品潘金| 99久久久免费精品国产一区二区| 99精品国产一区二区三区不卡| 在线观看免费一区| 精品剧情在线观看| 中文字幕日韩精品一区| 日本美女视频一区二区| 国产一区二区在线观看视频| 波多野洁衣一区| 欧美精选午夜久久久乱码6080| 精品日本一线二线三线不卡| 国产精品理论在线观看| 天天综合色天天综合| 国产成人av资源| 欧美精品一卡两卡| 国产精品嫩草影院av蜜臀| 日韩电影在线免费看| 99riav一区二区三区| 精品久久久影院| 亚洲欧美日韩电影| 国产一级精品在线| 欧美日韩一区中文字幕| 国产精品另类一区| 久久精品国产久精国产| 欧美亚洲禁片免费| 国产精品麻豆视频| 国产在线精品一区二区不卡了 | 成人午夜免费电影| 欧美大片免费久久精品三p| 成人免费在线视频观看|