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

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

?? nntpcli.c

?? uCLinux下的一個TCP/IP協議棧源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *	Client routines for Network News Tranfer Protocol ala RFC977
 *
 *
 */
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <sys/timeb.h>
#include <ctype.h>
#include <string.h>  /* for strchr() */
#ifdef	__TURBOC__
#include <dir.h>
#endif
#include "global.h"
#include "timer.h"
#include "cmdparse.h"
#include "commands.h"
#include "socket.h"
#include "usock.h"
#include "netuser.h"
#include "proc.h"
#include "smtp.h"
#include "files.h"

#define NNTPMAXLEN	512

struct nntpservers {
	struct timer nntpcli_t;
	char *name;
	char *groups;
	int lowtime, hightime;  /* for connect window */
	struct nntpservers *next;
};

#define MAXGROUPDIRS 10

static struct grouploc {
	char *prefix;        /* e.g. comp, rec, net, talk, alt ... */
	char *directory;     /* directory where these groups should be */
	} groupdirs[MAXGROUPDIRS] = { NULL, NULL };

struct nntpservers *Nntpservers = NULL;
static char *Nntpgroups = NULL;
static unsigned short nntptrace = 1;

static char *validchars = "abcdefghijklmnopqrstuvwxyz0123456789-_";

static void nntptick(void *tp);
static void nntp_job(int i1,void *tp,void *v1);
static int gettxt(FILE *network,FILE *fp);
static int getreply(FILE *network);
static int getarticle(FILE *network,char *msgid);
static int dogroups(int argc,char *argv[],void *p);
static int doadds(int argc,char *argv[],void *p);
static int dodrops(int argc,char *argv[],void *p);
static int dokicks(int argc,char *argv[],void *p);
static int dolists(int argc,char *argv[],void *p);
static int donntrace(int argc,char *argv[],void *p);
static int dondir(int argc,char *argv[],void *p);

/* Tracing levels:
	0 - no tracing
	1 - serious errors reported
	2 - transient errors reported
	3 - session progress reported
	4 - actual received articles displayed
 */

static struct cmds Nntpcmds[] = {
	"addserver",	doadds,	0,	3,
	"nntp addserver <nntpserver> <interval>",
	"directory",	dondir,	0,	0,	NULL,
	"dropserver",	dodrops,	0,	2,
	"nntp dropserver <nntpserver>",
	"groups",	dogroups,	0,	0,	NULL,
	"kick",		dokicks,	0,	2,
	"nntp kick <nntpserver>",
	"listservers",	dolists,	0,	0,	NULL,
	"trace",	donntrace,	0,	0,	NULL,
	NULL,
};

int
donntp(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return subcmd(Nntpcmds,argc,argv,p);
}

static int
doadds(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct nntpservers *np;
	for(np = Nntpservers; np != NULL; np = np->next)
		if(stricmp(np->name,argv[1]) == 0)
			break;
	if (np == NULL) {
		np = (struct nntpservers *) callocw(1,sizeof(struct nntpservers));
		np->name = strdup(argv[1]);
		np->next = Nntpservers;
		Nntpservers = np;
		np->groups = NULL;
		np->lowtime = np->hightime = -1;
		np->nntpcli_t.func = nntptick;	/* what to call on timeout */
		np->nntpcli_t.arg = (void *)np;
	}
	if (argc > 3) {
		int i;
		if (np->groups == NULL) {
			np->groups = mallocw(NNTPMAXLEN);
			*np->groups = '\0';
		}
		for (i = 3; i < argc; ++i) {
			if (isdigit(*argv[i])) {
				int lh, ll, hh, hl;
				sscanf(argv[i], "%d:%d-%d:%d", &lh, &ll, &hh, &hl);
				np->lowtime = lh * 100 + ll;
				np->hightime = hh * 100 + hl;
			} else if ((strlen(np->groups)+strlen(argv[i])+2) >= NNTPMAXLEN)
				printf("Group list too long!  Group '%s' ignored!\n", argv[i]);
			else {  /* it's a group, and it fits... add it to list */
				if (*np->groups != '\0')
					strcat(np->groups, ",");
				strcat(np->groups, argv[i]);
			}
		}
		if (*np->groups == '\0') {	/* No groups specified? */
			free(np->groups);
			np->groups = NULL;
		}
	}
	/* set timer duration */
	set_timer(&np->nntpcli_t,atol(argv[2])*1000L);
	start_timer(&np->nntpcli_t);		/* and fire it up */
	return 0;
}

static int
dodrops(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct nntpservers *np, *npprev = NULL;
	for(np = Nntpservers; np != NULL; npprev = np, np = np->next)
		if(stricmp(np->name,argv[1]) == 0) {
			stop_timer(&np->nntpcli_t);
			free(np->name);
			if (np->groups)
				free(np->groups);
			if(npprev != NULL)
				npprev->next = np->next;
			else
				Nntpservers = np->next;
			free(np);
			return 0;
	}
	printf("No such server enabled.\n");
	return 0;
}

static int
dolists(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct nntpservers *np;
	for(np = Nntpservers; np != NULL; np = np->next) {
		char tbuf[80];
		if (np->lowtime != -1 && np->hightime != -1)
			sprintf(tbuf, " -- %02d:%02d-%02d:%02d", np->lowtime/100, np->lowtime%100, np->hightime/100, np->hightime%100);
		else
			tbuf[0] = '\0';
		printf("%-32s (%lu/%lu%s) %s\n", np->name,
			read_timer(&np->nntpcli_t) /1000L,
			dur_timer(&np->nntpcli_t) /1000L,
			tbuf, np->groups ? np->groups : "");
	}
	return 0;
}

static int donntrace(argc, argv, p)
int argc;
char *argv[];
void *p;
{
	return setshort(&nntptrace,"NNTP tracing",argc,argv);
}
	
static char *News_spool = NULL;
static int np_all = 0;  /* non-zero if Newsdir is a malloc'ed space */

static int dondir(argc, argv, p)
int argc;
char *argv[];
void *p;
{
	if (argc < 2) {
		int i;
		printf("spool: %s\n", News_spool ? News_spool : Mailspool);
		printf("control: %s\n", Newsdir);
		for (i = 0; i < MAXGROUPDIRS; ++i)
			if (groupdirs[i].prefix)
				printf("%-10.10s %s\n", groupdirs[i].prefix, groupdirs[i].directory);
	} else {
		char *p;
		if ((p = strchr(argv[1], '=')) != NULL) {  /* set a groupdir */
			int i;
			*p++ = '\0';
			for (i = 0; i < MAXGROUPDIRS; ++i)
				if (groupdirs[i].prefix)
					if (!strnicmp(groupdirs[i].prefix, argv[1], strlen(argv[1]))) {
						if (groupdirs[i].directory) {
							free(groupdirs[i].directory);
							groupdirs[i].directory = NULL;
							}
						if (*p == '\0') {
							free(groupdirs[i].prefix);
							groupdirs[i].prefix = NULL;
						} else
							groupdirs[i].directory = strdup(p);
						return 0;
					}
			if (*p == '\0')  /* trashing a group that's not there */
				return 0;
			for (i = 0; i < MAXGROUPDIRS; ++i){
				if (groupdirs[i].prefix == NULL) {
					groupdirs[i].prefix = strdup(argv[1]);
					if (groupdirs[i].directory) {
						free(groupdirs[i].directory);
						groupdirs[i].directory = NULL;
					}
					groupdirs[i].directory = strdup(p);
					return 0;
				}
			}
			printf("Directory table full\n");
		}
		else {  /* no '=', so just set default */
			if (News_spool)
				free(News_spool);
			News_spool = strdup(argv[1]);
		}
		if (argc > 2) {  /* they specified a newsdir as well */
			if (np_all)
				free(Newsdir);
			Newsdir = strdup(argv[2]);
			np_all = 1;
		}
	}
	return 0;
}
	
static int
dokicks(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct nntpservers *np;
	for(np = Nntpservers; np != NULL; np = np->next)
		if(stricmp(np->name,argv[1]) == 0) {
			/* If the timer is not running, the timeout function has
			* already been called and we don't want to call it again.
			*/
			if(run_timer(&np->nntpcli_t)) {
				stop_timer(&np->nntpcli_t);
				nntptick((void *)np);
			}
			return 0;
	}
	printf("No such server enabled.\n");
	return 0;
}

static int
dogroups(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	int i;
	if(argc < 2) {
		if(Nntpgroups == NULL || (Nntpgroups != NULL && strcmp(Nntpgroups,"*") == 0))
			printf("All groups are currently enabled.\n");
		else
			printf("Currently enabled newsgroups:\n%s\n",Nntpgroups);
		return 0;
	}
	if(Nntpgroups == NULL)
		Nntpgroups = mallocw(NNTPMAXLEN);
	*Nntpgroups = '\0';
	for(i=1; i < argc; ++i) {
		if(i > 1)
			strcat(Nntpgroups,",");
		strcat(Nntpgroups,argv[i]);
	}
	return 0;
}

/* This is the routine that gets called every so often to connect to
 * NNTP servers.
 */
static void
nntptick(tp)
void *tp;
{
	newproc("NNTP client", 3072, nntp_job, 0, tp, NULL,0);
}

static void
nntp_job(i1,tp,v1)
int i1;
void *tp, *v1;
{
	FILE *fp, *tmpf;
	int s = -1, i;
	FILE *network;
/*	long pos; */
	struct tm *ltm;
	time_t t;
	int now;
	struct nntpservers *np = (struct nntpservers *) tp;
	struct sockaddr_in fsocket;
	char tbuf[NNTPMAXLEN], buf[NNTPMAXLEN], *cp, *lastdate = NULL;
	if (nntptrace >= 3)
		printf("NNTP daemon entered, target = %s\n",np->name);
	if(availmem() != 0){
		if (nntptrace >= 2)
			printf("NNTP daemon quit -- low memory\n");
		/* Memory is tight, don't do anything */
		start_timer(&np->nntpcli_t);
		return;
	}

	time(&t);	/* more portable than gettime() */
	ltm = localtime(&t);
	now = ltm->tm_hour * 100 + ltm->tm_min;
	if (np->lowtime < np->hightime) {  /* doesn't cross midnight */
		if (now < np->lowtime || now >= np->hightime) {
			if (nntptrace >= 3)
				printf("NNTP window to '%s' not open\n", np->name);
			start_timer(&np->nntpcli_t);
			return;
		}
	} else {
		if (now < np->lowtime && now >= np->hightime) {
			if (nntptrace >= 3)
				printf("NNTP window to '%s' not open\n", np->name);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本免费在线视频不卡一不卡二| 国产亚洲午夜高清国产拍精品 | 97se狠狠狠综合亚洲狠狠| 日韩精品电影在线| 丝袜亚洲精品中文字幕一区| 亚洲一区二区3| 亚洲成人免费在线观看| 亚洲国产一区在线观看| 亚洲国产一区在线观看| 视频在线观看一区二区三区| 亚洲第一福利视频在线| 日韩专区一卡二卡| 精品一区二区三区蜜桃| 欧美一区二区三区日韩| 国产精品理论在线观看| 在线看日韩精品电影| 久久狠狠亚洲综合| 无吗不卡中文字幕| 久久精品国产免费看久久精品| 婷婷亚洲久悠悠色悠在线播放| 亚洲国产一二三| 久久99热99| 国产成人综合在线| 91九色最新地址| 91精选在线观看| 精品国一区二区三区| 国产精品国产馆在线真实露脸| 亚洲欧美日韩成人高清在线一区| 日韩欧美一区二区不卡| 亚洲天堂免费在线观看视频| 午夜视频在线观看一区二区 | 精品少妇一区二区三区在线播放| 欧美一区二区大片| 亚洲国产精品二十页| 亚洲精品国产品国语在线app| 全国精品久久少妇| av中文字幕在线不卡| 欧美精品一卡二卡| 国产精品午夜久久| 丝袜美腿亚洲一区二区图片| 国产成人综合视频| 欧美人妖巨大在线| 国产精品女主播在线观看| 亚洲午夜三级在线| 成人禁用看黄a在线| 欧美一区二区三区日韩视频| 亚洲婷婷国产精品电影人久久| 亚洲高清在线视频| 成人美女视频在线看| 欧美日本在线观看| 亚洲欧美另类图片小说| 国产一本一道久久香蕉| 欧美日韩免费不卡视频一区二区三区| 国产欧美日韩综合| 奇米影视在线99精品| 91香蕉国产在线观看软件| 精品国产91亚洲一区二区三区婷婷| 亚洲免费成人av| 国产成人午夜精品影院观看视频 | 在线精品国精品国产尤物884a | 国产福利一区二区三区视频| 欧美日韩一区二区三区四区 | 亚洲国产美国国产综合一区二区| 狠狠色综合日日| 911国产精品| 亚洲另类中文字| 成人av手机在线观看| 国产日韩精品久久久| 久久超级碰视频| 日韩欧美成人午夜| 午夜精品国产更新| 欧美撒尿777hd撒尿| 夜夜精品视频一区二区| 91在线观看视频| 中文字幕亚洲不卡| 国产91精品精华液一区二区三区 | 精品成人一区二区三区四区| 视频在线在亚洲| 日韩欧美在线123| 美女视频黄 久久| 欧美电视剧在线观看完整版| 蜜臀精品久久久久久蜜臀| 欧美一区二区三区在线电影| 日本一区中文字幕| 日韩久久精品一区| 韩国成人在线视频| 国产欧美一区二区三区网站| 成人午夜伦理影院| 亚洲色图丝袜美腿| 欧美精品日韩精品| 蜜臀av性久久久久蜜臀aⅴ| 久久网站最新地址| av在线不卡免费看| 亚洲chinese男男1069| 欧美一区二区三区人| 国产精品一区二区在线播放| 国产精品天天摸av网| 欧美伊人精品成人久久综合97| 日韩激情视频网站| 久久久久国产免费免费 | 日韩在线观看一区二区| 欧美草草影院在线视频| 国产高清亚洲一区| 亚洲一区二区三区视频在线| 日韩欧美国产综合一区 | 亚洲高清视频的网址| 日韩欧美国产不卡| 成人app在线| 午夜精品福利一区二区三区蜜桃| 精品人伦一区二区色婷婷| 成人激情小说网站| 石原莉奈在线亚洲二区| 久久综合成人精品亚洲另类欧美 | 国产一区二区三区黄视频| 一区免费观看视频| 欧美肥妇free| 99久久精品国产导航| 七七婷婷婷婷精品国产| 国产精品第五页| 精品国产免费人成在线观看| 色综合久久综合| 国产尤物一区二区在线| 亚洲五月六月丁香激情| 中文字幕成人网| 日韩欧美高清在线| 欧美日韩国产影片| 成人精品免费网站| 精品在线观看视频| 亚洲制服欧美中文字幕中文字幕| 国产亚洲欧美中文| 日韩一区二区在线播放| 在线免费不卡电影| 91小视频免费观看| 国产69精品一区二区亚洲孕妇| 久久精品久久久精品美女| 亚洲va欧美va天堂v国产综合| 国产精品九色蝌蚪自拍| 久久综合丝袜日本网| 日韩欧美综合在线| 欧美日韩国产大片| 欧洲生活片亚洲生活在线观看| 国产乱对白刺激视频不卡| 日韩精品乱码免费| 午夜国产精品一区| 一区二区三区在线视频免费观看| 国产精品日产欧美久久久久| 久久无码av三级| 久久精品视频在线看| 欧美精品一区二区三| 欧美成人在线直播| 欧美一二三四区在线| 91精品黄色片免费大全| 欧美日韩精品一区二区| 在线中文字幕不卡| 欧美在线免费视屏| 在线观看91视频| 欧美视频在线一区二区三区| 99re视频精品| 91美女视频网站| 色中色一区二区| 色婷婷久久久综合中文字幕| 在线亚洲精品福利网址导航| 色婷婷精品大在线视频| 欧美在线|欧美| 欧美日韩高清一区二区| 这里只有精品视频在线观看| 欧美老女人在线| 91精品久久久久久久91蜜桃| 精品不卡在线视频| 中文字幕乱码久久午夜不卡| 亚洲素人一区二区| 亚洲成人高清在线| 精品午夜久久福利影院| 国产高清无密码一区二区三区| av激情成人网| 欧美日韩视频在线一区二区| 欧美电影免费观看高清完整版在| 久久久久久一二三区| 国产精品视频九色porn| 一区二区在线观看免费| 视频精品一区二区| 国产精品1024久久| 97久久精品人人爽人人爽蜜臀| 欧美日韩中文字幕一区| 欧美刺激午夜性久久久久久久| 欧美国产视频在线| 亚洲一区二区三区四区中文字幕| 久久国产精品一区二区| 成人毛片老司机大片| 欧美日韩精品一区二区三区四区| 精品日韩欧美在线| 亚洲三级视频在线观看| 日本视频一区二区三区| 成人综合婷婷国产精品久久 | 91视频在线看| 欧美妇女性影城| 中文字幕免费不卡| 老司机免费视频一区二区| 91丨porny丨国产入口| 久久这里只有精品首页|