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

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

?? dialer.c

?? TCPIP協議包
?? C
字號:
/* Automatic line dialer for asynch ports running SLIP, PPP, etc.
 *
 */
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include "global.h"
#include "mbuf.h"
#include "timer.h"
#include "proc.h"
#include "iface.h"
#include "netuser.h"
#include "n8250.h"
#include "asy.h"
#include "tty.h"
#include "socket.h"
#include "cmdparse.h"
#include "devparam.h"
#include "files.h"
#include "main.h"
#include "trace.h"
#include "commands.h"
#include "dialer.h"

static int redial(struct iface *ifp,char *file);
static void dropline(void *);
static void dropit(int,void *,void *);
int dialer_kick(struct iface *ifp);
void sd_answer(int,void *,void *);

static int dodial_control(int argc,char *argv[],void *p);
static int dodial_send(int argc,char *argv[],void *p);
static int dodial_speed(int argc,char *argv[],void *p);
static int dodial_status(int argc,char *argv[],void *p);
static int dodial_wait(int argc,char *argv[],void *p);

static struct cmds Dial_cmds[] = {
	"",		donothing,	0, 0, "",
	"control",	dodial_control,	0, 2, "control up | down",
	"send",		dodial_send,	0, 2,
	"send \"string\" [<milliseconds>]",
	"speed",	dodial_speed,	0, 2, "speed <bps>",
	"status",	dodial_status, 0, 2, "status up | down",
	"wait",		dodial_wait,	0, 2,
	"wait <milliseconds> [ \"string\" [speed] ]",
	NULL,	NULL,		0, 0, "Unknown command",
};
/* Set up demand dialing on an asy link. Called from dodialer command
 * in iface.c.
 */
int
sd_init(ifp,timeout,argc,argv)
struct iface *ifp;
int32 timeout;
int argc;
char *argv[];
{
	struct asy *ap;
	struct asydialer *dialer;
	char *cp;

	if(ifp->dev >= ASY_MAX || Asy[ifp->dev].iface != ifp){
		/* "Can't happen" */
		printf("Interface %s not asy port\n",argv[1]);
		return 1;
	}
	ap = &Asy[ifp->dev];
	if(timeout != 0 && argc < 3){
		printf("Usage: dial <iface> <timeout> <raisefile> <dropfile> <ringfile>\n");
		printf("       dial <iface> 0\n");
		return 1;
	}
	if(!ap->rlsd){
		printf("Must set 'r' flag at attach time\n");
		return 1;
	}
	if(ifp->dstate != NULL){
		/* Get rid of the old dialer info */
		dialer = (struct asydialer *)ifp->dstate;
		stop_timer(&dialer->idle);
		if(dialer->actfile != NULL){
			free(dialer->actfile);
			dialer->actfile = NULL;
		}
		if(dialer->dropfile != NULL){
			free(dialer->dropfile);
			dialer->dropfile = NULL;
		}
		if(dialer->ansfile != NULL){
			free(dialer->ansfile);
			dialer->ansfile = NULL;
		}
		free(ifp->dstate);
		ifp->dstate = NULL;
	}
	killproc(ifp->supv);
	ifp->supv = NULL;

	dialer = (struct asydialer *)calloc(1,sizeof(struct asydialer));
	ifp->dstate = dialer;

	ifp->dtickle = dialer_kick;
	set_timer(&dialer->idle,timeout);
	dialer->idle.func = dropline;
	dialer->idle.arg = ifp;
	if(timeout != 0){
		dialer->actfile = strdup(argv[0]);
		dialer->dropfile = strdup(argv[1]);
		dialer->ansfile = strdup(argv[2]);
		cp = if_name(ifp," answerer");
		ifp->supv = newproc(cp,768,sd_answer,ifp->dev,ifp,NULL,0);
	}
	return 0;
}
/* Display status of asynch dialer. Called from dodialer command in
 * iface.c when invoked without full args
 */
int
sd_stat(ifp)
struct iface *ifp;
{
	struct asydialer *dialer = (struct asydialer *)ifp->dstate;
	struct asy *ap;

	if(dialer == NULL){
		printf("No dialer active on %s\n",ifp->name);
		return 1;
	}
	ap = &Asy[ifp->dev];
	printf("%s: %s,",ifp->name,(ap->msr & MSR_RLSD) ? "UP":"DOWN");
	printf(" idle timer %lu/%lu sec\n",read_timer(&dialer->idle)/1000L,
	  dur_timer(&dialer->idle)/1000L);
	if(dialer->actfile != NULL)
		printf("up script: %s\n",dialer->actfile);
	if(dialer->dropfile != NULL)
		printf("down script: %s\n",dialer->dropfile);
	if(dialer->ansfile != NULL)
		printf("answer script: %s\n",dialer->ansfile);
	printf("Calls originated %lu, Calls answered %lu\n",
		dialer->originates,dialer->answers);
	printf("Calls timed out %lu, carrier transitions %lu\n",
		dialer->localdrops,ap->cdchanges);
	return 0;
}
/* Called by interface output routine just before sending each packet */
int
dialer_kick(ifp)
struct iface *ifp;
{
	struct asy *asyp;
	struct asydialer *dialer;

	dialer = (struct asydialer *)ifp->dstate;
	asyp = &Asy[ifp->dev];
	stop_timer(&dialer->idle);
	if(asyp->rlsd && !(asyp->msr & MSR_RLSD)
	 && dialer->actfile != NULL){
		/* Line down, try a redial */
		dialer->originates++;
		if(redial(ifp,dialer->actfile) != 0 
		 || !(asyp->msr & MSR_RLSD)){
			/* Redial failed, drop line and return failure */
			dialer->localdrops++;
			redial(ifp,dialer->dropfile);
			return -1;
		}
	}
	start_timer(&dialer->idle);
	return 0;
}

/* Called when idle line timer expires -- executes script to drop line */
static void
dropline(p)
void *p;
{
	/* Fork this off to prevent wedging the timer task */
	newproc("dropit",1024,dropit,0,p,NULL,0);
}

static void
dropit(i,p,u)
int i;
void *p;
void *u;
{
	struct iface *ifp = p;
	struct asy *ap;
	struct asydialer *dialer;

	dialer = (struct asydialer *)ifp->dstate;
	ap = &Asy[ifp->dev];
	if(ap->msr & MSR_RLSD){
		dialer->localdrops++;
		redial(ifp,dialer->dropfile);	/* Drop only if still up */
	}
}

void
sd_answer(dev,p1,p2)
int dev;
void *p1,*p2;
{
	struct iface *ifp;
	struct asydialer *dialer;
	struct asy *asyp;

	ifp = (struct iface *)p1;
	asyp = &Asy[dev];
	dialer = (struct asydialer *)ifp->dstate;
	if(dialer == NULL)
		return;	/* Can't happen */
	for(;;){
		while((asyp->msr & MSR_TERI) == 0)
			kwait(&asyp->msr);
		asyp->msr &= ~MSR_TERI;
		dialer->answers++;
		redial(ifp,dialer->ansfile);
	}
}

/* execute dialer commands
 * returns: -1 fatal error, 0 OK, 1 try again
 */
static int
redial(ifp,file)
struct iface *ifp;
char *file;
{
	char *inbuf;
	FILE *fp;
	int (*rawsave)(struct iface *,struct mbuf **);
	int result = 0;

	if((fp = fopen(file,READ_TEXT)) == NULL){
		if(ifp->trace & (IF_TRACE_IN|IF_TRACE_OUT))
			tprintf(ifp,"redial: can't read %s\n",file);
		return -1;
	}
	/* Save output handler and temporarily redirect output to null */
	if(ifp->raw == bitbucket){
		if(ifp->trace & (IF_TRACE_IN|IF_TRACE_OUT))
			tprintf(ifp,"redial: tip or dialer already active on %s\n",ifp->name);

		return -1;
	}

	if(ifp->trace & (IF_TRACE_IN|IF_TRACE_OUT))
		tprintf(ifp,"Commands to %s:\n",ifp->name);

	/* Save output handler and temporarily redirect output to null */
	rawsave = ifp->raw;
	ifp->raw = bitbucket;

	/* Suspend the packet input driver. Note that the transmit driver
	 * is left running since we use it to send buffers to the line.
	 */
	suspend(ifp->rxproc);

	inbuf = mallocw(BUFSIZ);
	while(fgets(inbuf,BUFSIZ,fp) != NULL){
		rip(inbuf);
		logmsg(-1,"%s dialer: %s",ifp->name,inbuf);
		if(ifp->trace & (IF_TRACE_IN|IF_TRACE_OUT))
			tprintf(ifp,"%s\n",inbuf);
		if((result = cmdparse(Dial_cmds,inbuf,ifp)) != 0){
			break;
		}
	}
	free(inbuf);
	fclose(fp);

	if(result == 0){
		ifp->lastsent = ifp->lastrecv = secclock();
	}
	ifp->raw = rawsave;
	resume(ifp->rxproc);
	if(ifp->trace & (IF_TRACE_IN|IF_TRACE_OUT))
		tprintf(ifp,"\nDial %s complete\n",ifp->name);

	return result;
}


static int
dodial_control(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct iface *ifp = p;
	int param;
	int32 arg = 0;

	if(ifp->ioctl == NULL)
		return -1;

	if((param = devparam(argv[1])) == -1) 
		return -1;

	if(argc > 2)
		arg = atol(argv[2]);
	(*ifp->ioctl)(ifp,param,TRUE,arg);
	return 0;
}


static int
dodial_send(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct iface *ifp = p;
	struct mbuf *bp;

	if(argc > 2){
		/* Send characters with inter-character delay
		 * (for dealing with prehistoric Micom switches that
		 * can't take back-to-back characters...yes, they
		 * still exist.)
		 */
		char *cp;
		int32 cdelay = atol(argv[2]);

		for(cp = argv[1];*cp != '\0';cp++){
			asy_write(ifp->dev,(uint8 *)cp,1);
			ppause(cdelay);
		}
	} else {
		if (ifp->trace & IF_TRACE_RAW)
			raw_dump( ifp, IF_TRACE_OUT, bp );
		asy_write(ifp->dev,(uint8 *)argv[1],strlen(argv[1]));
	}
	return 0;
}


static int
dodial_speed(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct iface *ifp = p;

	if ( argc < 2 ) {
		if(ifp->trace & (IF_TRACE_IN|IF_TRACE_OUT))
			tprintf(ifp,"current speed = %u bps\n", Asy[ifp->dev].speed);
		return 0;
	}
	return asy_speed(ifp->dev,(uint16)atol(argv[1]));
}


static int
dodial_status(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct iface *ifp = p;
	int param;

	if(ifp->iostatus == NULL)
		return -1;

	if((param = devparam(argv[1])) == -1)
		return -1;

	(*ifp->iostatus)(ifp,param,atol(argv[2]));
	return 0;
}


static int
dodial_wait(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct iface *ifp = p;
	register int c = -1;
	char *cp;

	kalarm(atol(argv[1]));

	if(argc == 2){
		while((c = get_asy(ifp->dev)) != -1 && errno != EALARM){
			if(ifp->trace & IF_TRACE_IN){
				fputc(c,ifp->trfp);
				fflush(ifp->trfp);
			}
		}
		kalarm(0L);
		return 0;
	}
	/* argc > 2 */
	cp = argv[2];

	while(*cp != '\0' && (c = get_asy(ifp->dev)) != -1){
		if(ifp->trace & IF_TRACE_IN){
			fputc(c,ifp->trfp);
			fflush(ifp->trfp);
		}
		if(*cp++ != c){
			cp = argv[2];
		}
	}
	if(argc > 3){
		uint16 speed = 0;

		if(stricmp(argv[3], "speed") != 0)
			return -1;

		while((c = get_asy(ifp->dev)) != -1){
			if(ifp->trace & IF_TRACE_IN){
				fputc(c,ifp->trfp);
				fflush(ifp->trfp);
			}
			if(isdigit(c)){
				speed *= 10;
				speed += c - '0';
			} else {
				kalarm(0L);
				return asy_speed(ifp->dev,speed);
			}
		}
	}
	kalarm(0L);
	return (c == -1);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线资源网| 欧美日韩精品是欧美日韩精品| 日韩欧美一级片| 国产原创一区二区三区| 国产日韩精品久久久| 欧美自拍偷拍一区| 极品少妇xxxx精品少妇| 一区av在线播放| 精品88久久久久88久久久| 制服丝袜在线91| 国产乱子轮精品视频| 国产麻豆精品在线| 一级日本不卡的影视| 日本一区二区综合亚洲| 欧美偷拍一区二区| 色婷婷综合久久| 99综合影院在线| 国产成人综合亚洲网站| 国产在线精品一区二区| 亚洲国产精品久久人人爱蜜臀| 国产精品久久久久影院老司| 欧美r级在线观看| 日韩午夜激情电影| 日韩一区二区三区三四区视频在线观看| 国产成人免费视频精品含羞草妖精| 午夜精品一区二区三区三上悠亚| 亚洲精品亚洲人成人网在线播放| 国产欧美精品一区二区色综合朱莉 | ...av二区三区久久精品| 欧美国产日产图区| 国产精品乱码一区二区三区软件| 中文av一区特黄| 亚洲人成精品久久久久| 亚洲国产成人av网| 国产一区激情在线| 高清shemale亚洲人妖| 91亚洲精品久久久蜜桃| 欧美日韩在线三级| 欧美精品一区二区三区久久久| 久久精品视频一区二区| 亚洲色图丝袜美腿| 日韩高清在线一区| 国产精品原创巨作av| 日本韩国精品一区二区在线观看| 欧美精三区欧美精三区| 久久亚洲精精品中文字幕早川悠里| 国产欧美日韩亚州综合| 亚洲精品你懂的| 成人激情免费视频| 欧美一级精品在线| 亚洲女子a中天字幕| 久久99精品久久久久久| 欧美日韩国产综合一区二区三区| 26uuu国产在线精品一区二区| 亚洲午夜电影在线观看| 99久久综合99久久综合网站| 日韩精品一区二区三区视频播放 | 亚洲亚洲人成综合网络| 岛国精品在线播放| 精品久久久久香蕉网| 天天色 色综合| 欧美日韩一区 二区 三区 久久精品| 国产精品婷婷午夜在线观看| 美女免费视频一区| 26uuu亚洲| 国产精品一区二区不卡| wwwwxxxxx欧美| 成人一二三区视频| 亚洲欧洲日韩在线| 91麻豆精品秘密| 亚洲成人一二三| 欧美日韩在线综合| 青青草国产精品97视觉盛宴| 91精品福利在线一区二区三区| 天天av天天翘天天综合网色鬼国产| 欧美日韩精品欧美日韩精品一 | 日本色综合中文字幕| 日韩美女视频在线| 99在线精品免费| 麻豆国产精品一区二区三区| 亚洲国产精品成人综合| 欧美三电影在线| 狠狠网亚洲精品| 亚洲最新在线观看| 欧美成人伊人久久综合网| 99国产麻豆精品| 美女久久久精品| 亚洲老妇xxxxxx| 精品精品国产高清一毛片一天堂| 成人av网址在线观看| 三级久久三级久久| 综合分类小说区另类春色亚洲小说欧美 | 色爱区综合激月婷婷| 老司机午夜精品| 夜夜爽夜夜爽精品视频| 国产偷国产偷精品高清尤物| 在线成人av网站| youjizz国产精品| 另类小说一区二区三区| 亚洲一本大道在线| 亚洲欧美日韩久久| 国产无人区一区二区三区| 2024国产精品| 精品999久久久| 欧美一区二区日韩| 欧美日韩国产在线播放网站| 91猫先生在线| 94-欧美-setu| 99国产精品久久久久| av一二三不卡影片| 91在线国产福利| 成a人片亚洲日本久久| 9色porny自拍视频一区二区| 丁香六月综合激情| 99精品视频一区| 欧美中文字幕一区| 在线不卡中文字幕| 精品成a人在线观看| 国产精品婷婷午夜在线观看| 国产精品色在线| 亚洲国产三级在线| 国产精品综合视频| 在线视频欧美区| 日韩视频免费观看高清完整版在线观看 | 国产情人综合久久777777| 亚洲在线免费播放| 国产一区二区主播在线| 在线观看日韩毛片| 国产午夜亚洲精品羞羞网站| 亚洲欧美电影一区二区| 久草精品在线观看| 91亚洲精品乱码久久久久久蜜桃| 欧美中文字幕一区二区三区亚洲| 精品久久久久久久久久久久久久久| 久久久久99精品一区| 奇米色一区二区| 91麻豆精品国产| 亚洲美女区一区| 国产91对白在线观看九色| 91麻豆精品国产91久久久久| 中文字幕一区二区视频| 国产综合久久久久久鬼色| 正在播放亚洲一区| 亚洲综合视频网| 一本色道久久综合亚洲精品按摩| 国产欧美一二三区| 国模一区二区三区白浆| 日韩一区二区精品| 日韩精品亚洲专区| 777a∨成人精品桃花网| 香蕉久久夜色精品国产使用方法| 色婷婷一区二区| 亚洲国产精品久久久久婷婷884 | www.亚洲免费av| 亚洲线精品一区二区三区| 久久香蕉国产线看观看99| 91蝌蚪porny成人天涯| 夜夜爽夜夜爽精品视频| 在线观看亚洲精品| 麻豆精品一区二区三区| 久久亚洲一级片| 成人av集中营| 亚洲成人综合视频| 久久麻豆一区二区| 国产成人啪午夜精品网站男同| 中文字幕av一区二区三区高 | 91视频xxxx| 日韩成人免费看| 中文字幕一区视频| 日韩欧美综合一区| 91啪在线观看| 精品亚洲成av人在线观看| 亚洲精品精品亚洲| 亚洲欧洲日本在线| 欧美经典一区二区三区| 精品国产一区久久| 欧美日韩高清一区| 色婷婷综合久久久中文字幕| 国产激情一区二区三区四区 | 一区二区三区美女| 久久网这里都是精品| 日韩一区二区免费在线观看| 91国模大尺度私拍在线视频| 白白色亚洲国产精品| 国产激情91久久精品导航| 男男gaygay亚洲| 石原莉奈一区二区三区在线观看| 亚洲最色的网站| 婷婷国产v国产偷v亚洲高清| 日本特黄久久久高潮 | 丁香激情综合五月| 最新高清无码专区| 日韩女同互慰一区二区| 国产精品成人免费| 日韩国产欧美三级| 91伊人久久大香线蕉| 日韩欧美第一区| 日韩中文字幕区一区有砖一区 | 国产伦精一区二区三区| 成人免费视频caoporn|