Beispiel #1
0
/**************************************************************
*		VERCHK num
*				設定所使用的Client版本編號
*				系統內定值為20
***************************************************************/
DoVersionCheck()
{
	int ver;

	ver = Get_para_number(1);
	if (ver <= 0)
		RespondProtocol(SYNTAX_ERROR);
	else
	{
		if (ver >= VERSION_NEWEST)
			RespondProtocol(VER_OK);
		else if (ver >= VERSION_LEAST)
			RespondProtocol(VER_GETNEW);
		else
			RespondProtocol(VER_NOT);
	}
/*-------------------------------------------
    NextToken=GetToken(NextToken,tmp,10);
    if(tmp[0]=='\0')
        RespondProtocol(SYNTAX_ERROR);
    else
		{
        ver=atoi(tmp);
        if(ver>=VERSION_NEWEST)
            RespondProtocol(VER_OK);
        else if(ver>=VERSION_LEAST)
            RespondProtocol(VER_GETNEW);
        else
            RespondProtocol(VER_NOT);
    	}
----------------------------------------------*/

}
Beispiel #2
0
/*****************************************************
 *   Syntax: MAILHEAD startnum [endnum]
 *				取得信件資料
 *  Respond: MailNum State-Condition Owner Date Title
 *				取得信件資料
 *****************************************************/
DoGetMailHead()
{
	int start, end, num, fd, i;
	struct fileheader fh;
	char mail_state, chdate[6], c;
	time_t date;

	start = Get_para_number(1);
	if (start < 1)
	{
		RespondProtocol(MAIL_NOT_EXIST);
		return;
	}

	end = Get_para_number(2);
	if (end < 1)
		end = start;
	else if (end < start)
	{
		RespondProtocol(SYNTAX_ERROR);
		return;
	}

	num = get_num_records(maildirect, FH_SIZE);	/* get mail count */

	if (start > num || end > num)
	{
		RespondProtocol(MAIL_NOT_EXIST);
		return;
	}

	if ((fd = open(maildirect, O_RDWR)) < 0)
	{
		RespondProtocol(WORK_ERROR);
		return;
	}

	if (lseek(fd, FH_SIZE * (start - 1), SEEK_SET) == -1)
	{
		RespondProtocol(WORK_ERROR);
		close(fd);
		return;
	}

	RespondProtocol(OK_CMD);
	net_cache_init();
	for (i = start; i <= end; i++)
	{
		if (read(fd, &fh, FH_SIZE) == FH_SIZE)
		{
			if (fh.accessed & FILE_DELE)
				mail_state = 'D';	/* deleted mail */
			else if (fh.accessed & FILE_READ)
				mail_state = 'R';	/* readed mail */
			else
				mail_state = 'N';	/* new mail */

			date = atol((fh.filename) + 2);
			strftime(chdate, 6, "%m/%d", localtime(&date));
			chk_str2(fh.owner);
			chk_str2(fh.title);

			if (curuser.ident == 7)
				c = fh.ident + '0';
			else
				c = '*';
			if (mail_state != 'D')
				net_cache_printf("%d\t%c\t%c\t%s\t%s\t%s\r\n", 
					i, mail_state, c, fh.owner, chdate, fh.title);
			else
				net_cache_printf("%d\t%c\t%c\t%s\t%s\r\n", 
					i, mail_state, c, fh.owner, chdate);
		}
		else
			break;
	}
	close(fd);
	net_cache_write(".\r\n", 3);	/* end */
	net_cache_refresh();
}