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

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

?? mailbox.c

?? TCPIP協議包
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* There are only two functions in this mailbox code that depend on the
 * underlying protocol, namely mbx_getname() and dochat(). All the other
 * functions can hopefully be used without modification on other stream
 * oriented protocols than AX.25 or NET/ROM.
 *
 */
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#ifdef	UNIX
#include <sys/types.h>
#include <sys/stat.h>
#endif

#include "global.h"
#include "config.h"
#include "timer.h"
#include "proc.h"
#include "socket.h"
#include "usock.h"
#include "session.h"
#include "smtp.h"
#include "dirutil.h"
#include "telnet.h"
#include "ftp.h"
#include "ftpserv.h"
#include "commands.h"
#include "netuser.h"
#include "files.h"
#include "bm.h"
#include "mailbox.h"
#include "ax25mail.h"
#include "nr4mail.h"
#include "cmdparse.h"

/*
#define MBDEBUG
*/

struct mbx *Mbox[NUMMBX];
static char *Motd = NULL;
static int Attended = TRUE;	/* default to attended mode */
unsigned Maxlet = BM_NLET;

char Noperm[] = "Permission denied.\n";
char Nosock[] = "Can't create socket\n";

static char Mbbanner[] = "[NET-H$]\nWelcome %s to the %s TCP/IP Mailbox (%s)\n%s";
static char Mbmenu[] = "Current msg# %d : A,B,C,D,E,F,G,H,I,J,K,L,N,R,S,T,U,V,W,Z,? >\n";
static char Longmenu1[] = "(?)help    (A)rea     (B)ye      (C)hat     (D)ownload (E)scape   (F)inger\n";
static char Longmenu2[] = "(G)ateway  (H)elp     (I)nfo     (J)heard   (K)ill     (L)ist     (N)etrom\n";
static char Longmenu3[] = "(R)ead     (S)end     (T)elnet   (U)pload   (V)erbose  (W)hat     (Z)ap\n";
static char Loginbanner[] = "\nKA9Q NOS (%s)\n\n";
static char Howtoend[] = "Terminate with /EX or ^Z in first column (^A aborts):\n";

static int doarea(int argc,char *argv[],void *p);
static int mbx_getname(struct mbx *m);

/************************************************************************/
/*			C O M M A N D S					*/
/************************************************************************/

static int doattend(int argc,char *argv[],void *p);
static int domaxmsg(int argc,char *argv[],void *p);
static int domotd(int argc,char *argv[],void *p);
static int dotimeout(int argc,char *argv[],void *p);

/* mbox subcommand table */
static struct cmds Mbtab[] = {
	"attend",	doattend,	0, 0, NULL,
#ifdef	AX25
	"kick",		dombkick,	0, 0, NULL,
#endif
	"maxmsg",	domaxmsg,	0, 0, NULL,
	"motd",		domotd,		0, 0, NULL,
	"status",	domboxdisplay,	0, 0, NULL,
#ifdef	AX25
	"timer",	dombtimer,	0, 0, NULL,
#endif
	"tiptimeout",	dotimeout,	0, 0, NULL,
	NULL,
};


int
dombox(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	if(argc == 1)
		return domboxdisplay(argc,argv,p);
	return subcmd(Mbtab,argc,argv,p);
}

/* if unattended mode is set, ax25, telnet and maybe other sessions will
 * be restricted.
 */
static int
doattend(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return setbool(&Attended,"Attended flag",argc,argv);
}

static int
domaxmsg(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return setuns(&Maxlet,"Maximum messages per area",argc,argv);
}

static int
domotd(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	if(argc > 2) {
		printf("Usage: mbox motd \"<your message>\"\n");
		return 0;
	}

	if(argc < 2) {
		if(Motd != NULL)
			puts(Motd);
	}
	else {
		if(Motd != NULL){
			free(Motd);
			Motd = NULL;	/* reset the pointer */
		}
		if(!strlen(argv[1]))
			return 0;		/* clearing the buffer */
		Motd = mallocw(strlen(argv[1])+5);/* allow for the EOL char */
		strcpy(Motd, argv[1]);
		strcat(Motd, "\n");		/* add the EOL char */
	}
	return 0;
}

int
domboxdisplay(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	int i, j, len;
	struct mbx *m;
	struct sockaddr fsocket;
	static char *states[] = {"LOGIN","CMD","SUBJ","DATA","REVFWD",
				"TRYING","FORWARD"};

	printf("User       State    S#  Where\n");

	for (i = 0; i < NUMMBX; i++){
		if((m = Mbox[i]) != NULL){
			len = MAXSOCKSIZE;
			j = getpeername(fileno(m->user),&fsocket,&len);
			printf("%-11s%-9s%-4u%s\n",m->name,
			 states[m->state],fileno(m->user),
			 j != -1 ? psocket(&fsocket): "");
		}
	}
	return 0;
}

static int
dotimeout(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return setuns(&Tiptimeout,"Tip connection timeout",argc,argv);
}


/**********************************************************************/

void
listusers(network)
FILE *network;
{
	FILE *outsave;

	fprintf(network,"\nCurrent remote users:\n");
	outsave = stdout;
	stdout = network;
	domboxdisplay(0,NULL,NULL);
	stdout = outsave;
}

struct mbx *
newmbx()
{
	int i;
	struct mbx *m;

	for(i = 0; i < NUMMBX; i++){
		if(Mbox[i] == NULL){
			m = Mbox[i] = (struct mbx *)callocw(1,sizeof(struct mbx));
			m->mbnum = i;
			return m;
		}
	}
	/* If we get here, there are no free mailbox sessions */
	return NULL;
}

static int
mbx_getname(m)
struct mbx *m;
{
#ifdef	AX25
	char *cp;
#endif
	union sp sp;
	struct sockaddr tmp;
	char buf[MBXLINE];
	int len = MAXSOCKSIZE;
	int anony = 0;
	int oldmode;

	sp.sa = &tmp;
	sp.sa->sa_family = AF_LOCAL;	/* default to AF_LOCAL */
	getpeername(fileno(m->user),&tmp,&len);
	m->path = mallocw(MBXLINE);
	/* This is one of the two parts of the mbox code that depends on the
	 * underlying protocol. We have to figure out the name of the
	 * calling station. This is only practical when AX.25 or NET/ROM is
	 * used. Telnet users have to identify themselves by a login procedure.
	 */
	switch(sp.sa->sa_family){
#ifdef	AX25
	case AF_NETROM:
	case AF_AX25:
		/* NETROM and AX25 socket address structures are "compatible" */
		pax25(m->name,sp.ax->ax25_addr);
		cp = strchr(m->name,'-');
		if(cp != NULL)			/* get rid of SSID */
			*cp = '\0';
		/* SMTP wants the name to be in lower case */
		cp = m->name;
		while(*cp){
			if(isupper(*cp))
				*cp = tolower(*cp);
			++cp;
		}
		anony = 1;
		/* Try to find the privileges of this user from the userfile */
		if((m->privs = userlogin(m->name,buf,&m->path,MBXLINE,&anony)) == -1)
			if((m->privs = userlogin("bbs",buf,&m->path,MBXLINE,&anony)) == -1)
				if((m->privs = userlogin("anonymous",buf,&m->path,MBXLINE,
					 &anony)) == -1){
						m->privs = 0;
						free(m->path);
						m->path = NULL;
				}
		if(m->privs & EXCLUDED_CMD)
			return -1;
		return 0;
#endif
	case AF_LOCAL:
	case AF_INET:
		m->state = MBX_LOGIN;
		printf(Loginbanner,Hostname);
		for(;;){
			fputs("login: ",stdout);
			if(mbxrecvline(m->user,m->name,sizeof(m->name),-1) == EOF)
				return -1;
			if(*m->name == '\0')
				continue;
			printf("Password: %c%c%c",IAC,WILL,TN_ECHO);
			oldmode = fmode(m->user,STREAM_BINARY);
			if(mbxrecvline(m->user,buf,MBXLINE,-1) == EOF)
				return -1;
			printf("%c%c%c",IAC,WONT,TN_ECHO);
			fmode(m->user,oldmode);
			putchar('\n');
#ifdef	notdef
			/* This is needed if the password was send before the
			 * telnet no-echo options were received. We neeed to
			 * flush the eold sequence from the input buffers, sigh
			 */
			if(socklen(fileno(m->user),0))/* discard any remaining input */
				recv_mbuf(fileno(m->user),NULL,0,NULL,0);
#endif
			if((m->privs = userlogin(m->name,buf,&m->path,MBXLINE,&anony))
			 != -1){
				if(anony)
					logmsg(fileno(m->user),"MBOX login: %s Password: %s",m->name,buf);
				else
					logmsg(fileno(m->user),"MBOX login: %s",m->name);
				if(m->privs & EXCLUDED_CMD)
					return -1;
				return 0;
			}
			printf("Login incorrect\n");
			*m->name = '\0';	/* wipe any garbage */
		}
	}
	return 0;
}

/* Incoming mailbox session */
void
mbx_incom(s,t,p)
int s;
void *t;
void *p;
{
	struct mbx *m;
	struct usock *up;
	char *buf[3];
	int rval;
	FILE *network;

	sockowner(s,Curproc);	/* We own it now */
	if(p == NULL)
		network = fdopen(s,"r+t");
	else
		network = (FILE *)p;
	
	/* Secede from the parent's sockets, and use the network socket that
	 * was passed to us for both input and output. The reference
	 * count on this socket will still be 1; this allows the domboxbye()
	 * command to work by closing that socket with a single call.
	 * If we return, the socket will be closed automatically.
	 */
	fclose(stdin);
	stdin = fdup(network);
	fclose(stdout);
	stdout = fdup(network);

	logmsg(fileno(network),"open MBOX");
	if((m = newmbx()) == NULL){
		printf("Too many mailbox sessions\n");
		return;
	}
	m->user = network;
	m->escape = 24;		/* default escape character is Ctrl-X */
	m->type = (int) t;
	/* get the name of the remote station */
	if(mbx_getname(m) == -1) {
		exitbbs(m);
		return;
	}

	m->state = MBX_CMD;	/* start in command state */

	/* Now say hi */
	printf(Mbbanner,m->name,Hostname,Version,
		Motd != NULL ? Motd : "");
	/* Enable our local message area */
	buf[1] = m->name;
	doarea(2,buf,m);
	printf(Mbmenu,m->current);
	while(mbxrecvline(network,m->line,MBXLINE,-1) != EOF){
		if((rval = mbx_parse(m)) == -2)
			break;
		if(rval == 1)
			printf("Bad syntax.\n");
		if(!(m->sid & MBX_SID) && isnewprivmail(m) > 0L)
			printf("You have new mail.\n");
		scanmail(m);
		printf((m->sid & MBX_SID) ? ">\n" : Mbmenu, m->current);
		m->state = MBX_CMD;
	}
	exitbbs(m);
	/* nasty hack! we may have screwed up reference count */
	/* by invoking newproc("smtp_send",....); Fudge it!   */
	if((up = itop(fileno(stdout))) != NULL)
		up->refcnt = 1;
	fclose(stdout);
}

void
exitbbs(m)
struct mbx *m;
{
	closenotes(m);
	free(m->to);
	free(m->tofrom);
	free(m->origto);
	free(m->tomsgid);
	free(m->path);
	free(m->mbox);
	Mbox[m->mbnum] = NULL;
	free(m);
}

/**********************************************************************/

static int dochat(int argc,char *argv[],void *p);
static int dodownload(int argc,char *argv[],void *p);
static int dombupload(int argc,char *argv[],void *p);
static int dowhat(int argc,char *argv[],void *p);
static int dozap(int argc,char *argv[],void *p);
static int dosend(int argc,char *argv[],void *p);
static int dosid(int argc,char *argv[],void *p);
static int dosysop(int argc,char *argv[],void *p);
static int dostars(int argc,char *argv[],void *p);
static int dombhelp(int argc,char *argv[],void *p);
static int dombtelnet(int argc,char *argv[],void *p);
static int dombfinger(int argc,char *argv[],void *p);
static void gw_alarm(void *p);
static void gw_input(int s,void *notused,void *p);
static void gw_superv(int null,void *proc,void *p);
static int mbx_to(int argc,char *argv[],void *p);
static int mbx_data(struct mbx *m,struct list *cclist,char *extra);
static int msgidcheck(char *string);
static int uuencode(FILE *infile,FILE *outfile,char *infilename);

static struct cmds Mbcmds[] = {
	"",		doreadnext,	0, 0, NULL,
	"area",		doarea,		0, 0, NULL,
	"send",		dosend,		0, 0, NULL,
	"read",		doreadmsg,	0, 2, "R numbers",
	"verbose",	doreadmsg,	0, 2, "V numbers",
#ifdef	AX25
	"jheard",	doaxheard,	0, 0, NULL,
#endif
	"kill",		dodelmsg,	0, 2, "K numbers",
	"list",		dolistnotes,	0, 0, NULL,
	"escape",	dombescape,	0, 0, NULL,
	"download",	dodownload,	0, 2, "D[U] filename",
	"upload",	dombupload,	0, 2, "U filename",
	"what",		dowhat,		0, 0, NULL,
	"zap",		dozap,		0, 2, "Z filename",
#ifdef AX25
	"gateway",	dogateway,	0, 3, "G interface callsigns",
#endif
	"telnet",	dombtelnet,	0, 2, "T hostname",
	"finger",	dombfinger,	0, 0, NULL,
#ifdef	NETROM
	"netrom",	dombnetrom,	0, 0, NULL,
#endif
	"chat",		dochat,		0, 0, NULL,
	"bye",		domboxbye,	0, 0, NULL,
	"help",		dombhelp,	0, 0, NULL,
	"info",		dombhelp,	0, 0, NULL,
	"?",		dombhelp,	0, 0, NULL,
	"[",		dosid,		0, 0, NULL,
#ifdef	AX25
	"f>",		dorevfwd,	0, 0, NULL,
#endif
	"@",		dosysop,	0, 0, NULL,
	"***",		dostars,	0, 0, NULL,
	NULL,	NULL,		0, 0, "Huh?",
};

/* "twocmds" defines the MBL/RLI two-letter commands, eg. "SB", "SP" and so on.
 * They have to be treated specially since cmdparse() wants a space between
 * the actual command and its arguments.
 * "SP FOO" is converted to "s  foo" and the second command letter is saved
 * in m->stype. Longer commands like "SEND" are unaffected, except for
 * commands starting with "[", i.e. the SID, since we don't know what it will
 * look like.
 */
static char twocmds[] = "slrd[";	/* S,L,R,D are two-letter commands */
int
mbx_parse(m)
struct mbx *m;
{
	char *cp;
	int i;
	char *newargv[2];
	/* Translate entire buffer to lower case */
	for (cp = m->line; *cp != '\0'; ++cp)
		if(isupper(*cp))
			*cp = tolower(*cp);
	/* Skip any spaces at the begining */
	for(cp = m->line;isspace(*cp);++cp)
		;
	m->stype = ' ';
	if(*cp != '\0' && *(cp+1) != '\0')
	for(i=0; i<strlen(twocmds); ++i){
		if(*cp == twocmds[i] && (isspace(*(cp+2)) || *(cp+2) == '\0'
		 || *cp == '[')){
			if(islower(*(++cp)))
				m->stype = toupper(*cp); /* Save the second character */
			else
				m->stype = *cp;
			*cp = ' ';
			break;
		}
	}
	/* See if the input line consists solely of digits */
	cp = m->line;
	for(cp = m->line;isspace(*cp);++cp)
		;
	newargv[1] = cp;
	for(;*cp != '\0' && isdigit(*cp);++cp)
		;
	if(*cp == '\0' && strlen(newargv[1]) > 0) {
		newargv[0] = "read";
		return doreadmsg(2,newargv,(void *)m);
	}
	else
		return cmdparse(Mbcmds,m->line,(void *)m);
}

/* This works like recvline(), but telnet options are answered and the
 * terminating newline character is not put into the buffer. If the
 * incoming character equals the value of escape, any queued input is
 * flushed and -2 returned.
 */
int
mbxrecvline(network,buf,len,escape)
FILE *network;
char *buf;
int len;
int escape;
{
	int c, cnt = 0, opt;
	if(buf == NULL)
		return 0;
	fflush(stdout);
	while((c = getc(network)) != EOF){
		if(c == IAC){		/* Telnet command escape */
			if((c = getc(network)) == EOF)
				break;
			if(c > 250 && c < 255 && (opt = getc(network)) != EOF){
#ifdef	foo
				switch(c){
				case WILL:
					printf("%c%c%c",IAC,DONT,opt);
					break;
				case WONT:
					printf("%c%c%c",IAC,DONT,opt);
					break;
				case DO:
					printf("%c%c%c",IAC,WONT,opt);
					break;
				case DONT:
					printf("%c%c%c",IAC,WONT,opt);
				}
#endif
/* to be fixed 			fflush(stdout);*/
				continue;
			}
			if(c != IAC && (c = fgetc(network)) == EOF)
				break;
		}
		/* ordinary character */
		if(c == '\r' || c == '\n')
			break;
		if(c == escape){
			if(socklen(fileno(network),0)) /* discard any remaining input */
				recv_mbuf(fileno(network),NULL,0,NULL,0);
			cnt = -2;
			break;
		}
		*buf++ = c;
		++cnt;
		if(cnt == len - 1)
			break;
	}
	if(c == EOF && cnt == 0)
		return -1;
	*buf = '\0';
	return cnt;
}

int
domboxbye(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct mbx *m;

	m = (struct mbx *)p;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区在线播放 | 亚洲婷婷在线视频| 一区二区三区欧美久久| 久久99久久久欧美国产| 色综合久久久久久久| 精品国产乱码久久久久久久| 亚洲视频在线一区| 国产精品亚洲专一区二区三区| 欧美无人高清视频在线观看| 国产偷国产偷亚洲高清人白洁| 日韩综合在线视频| 一本一道久久a久久精品| 国产日韩欧美制服另类| 日韩高清一区在线| 欧美亚洲图片小说| 亚洲欧洲日产国产综合网| 国产又黄又大久久| 欧美一卡2卡3卡4卡| 亚洲高清一区二区三区| 91成人在线观看喷潮| 中文在线一区二区 | 精品国产免费视频| 日韩中文字幕不卡| 精品婷婷伊人一区三区三| 亚洲视频一区二区在线| 成人黄色网址在线观看| 国产视频在线观看一区二区三区| 青草av.久久免费一区| 欧美日本视频在线| 午夜视频在线观看一区二区| 91免费国产在线观看| 最新中文字幕一区二区三区| 久久99国产乱子伦精品免费| 欧美哺乳videos| 经典三级在线一区| 久久久蜜桃精品| 国产一区二区在线看| 日韩你懂的在线观看| 久久成人免费电影| 国产午夜精品一区二区三区四区| 国产精品一区二区久激情瑜伽| 2021久久国产精品不只是精品| 美脚の诱脚舐め脚责91| 欧美成人欧美edvon| 国产麻豆午夜三级精品| 中文字幕av不卡| 色婷婷综合久久久久中文一区二区| 中文字幕一区在线观看| 色噜噜偷拍精品综合在线| 亚洲曰韩产成在线| 欧美一区在线视频| 国产一区二区调教| 中文字幕在线不卡一区 | 国产成人a级片| 中文字幕精品一区二区三区精品| 波多野洁衣一区| 中文字幕巨乱亚洲| 日本韩国一区二区| 美日韩一区二区三区| 久久老女人爱爱| 99精品久久只有精品| 亚洲主播在线观看| 精品88久久久久88久久久| 成人黄色小视频在线观看| 亚洲一区二区精品视频| 日韩欧美一级片| av一区二区不卡| 五月天中文字幕一区二区| 精品三级av在线| 91免费观看视频| 毛片av一区二区三区| 亚洲国产高清在线观看视频| 欧美在线一二三| 国产毛片精品一区| 午夜在线成人av| 国产精品免费aⅴ片在线观看| 欧美午夜电影网| 国产69精品久久久久毛片| 亚洲va在线va天堂| 国产精品天美传媒沈樵| 欧美一区二区三区啪啪| 99久久综合国产精品| 日本vs亚洲vs韩国一区三区 | 宅男在线国产精品| 国产高清亚洲一区| 视频在线观看一区| 亚洲视频资源在线| 久久久国产一区二区三区四区小说 | 精品中文av资源站在线观看| 亚洲免费资源在线播放| 久久久久久久精| 欧美一三区三区四区免费在线看| 99re免费视频精品全部| 国产精品66部| 蜜臀av在线播放一区二区三区| 亚洲免费在线观看| 中文字幕一区二区三区精华液| 日韩欧美国产午夜精品| 欧美理论电影在线| 欧美综合亚洲图片综合区| 成人av动漫网站| 国产精品亚洲午夜一区二区三区| 日本va欧美va瓶| 亚洲成人精品一区| 亚洲一区在线观看网站| 一区二区三区在线视频播放| 中文字幕精品一区二区精品绿巨人| 精品sm捆绑视频| 亚洲精品一区二区三区福利 | 亚洲一区二区三区美女| 日韩一区在线播放| 中文字幕一区二区三区精华液| 久久久久国产免费免费| 久久久久国产精品麻豆ai换脸 | 麻豆国产欧美日韩综合精品二区| 亚洲一区中文日韩| 亚洲国产欧美日韩另类综合| 亚洲成人一区二区| 图片区小说区区亚洲影院| 亚洲影院久久精品| 午夜精品福利视频网站| 日韩高清不卡一区| 蜜桃久久精品一区二区| 精品一区二区三区在线视频| 老司机精品视频一区二区三区| 免费三级欧美电影| 国产主播一区二区| 国产91精品精华液一区二区三区 | 午夜电影一区二区三区| 天天操天天色综合| 免费观看一级特黄欧美大片| 老鸭窝一区二区久久精品| 韩国v欧美v亚洲v日本v| 国产99久久久国产精品| 99久久er热在这里只有精品66| 99re这里只有精品6| 欧美亚洲综合久久| 日韩欧美国产成人一区二区| 久久久久99精品一区| 亚洲欧美一区二区不卡| 午夜精品久久久久| 国产精品一区二区久久精品爱涩 | 国产农村妇女精品| 亚洲激情六月丁香| 蜜桃精品视频在线观看| 国产白丝网站精品污在线入口| 9人人澡人人爽人人精品| 欧美专区在线观看一区| 日韩一区二区视频| 欧美激情一区二区| 亚洲成a人在线观看| 国产精品综合一区二区| 99精品1区2区| 欧美mv日韩mv国产网站app| 国产精品日产欧美久久久久| 亚洲一区视频在线| 国产精品456露脸| 欧美午夜电影网| 国产欧美日韩激情| 日韩一区欧美二区| 成人污视频在线观看| 91精品啪在线观看国产60岁| 国产精品伦理一区二区| 日本午夜精品视频在线观看| 国产成人免费视频网站高清观看视频| 色先锋aa成人| 国产视频911| 日本午夜精品视频在线观看| 95精品视频在线| 日韩精品一区二区三区四区| 亚洲一区自拍偷拍| 成人黄色免费短视频| 欧美mv和日韩mv国产网站| 亚洲影视资源网| 91影视在线播放| 久久精品亚洲国产奇米99| 男女视频一区二区| 欧美亚洲免费在线一区| 中文字幕亚洲一区二区av在线 | 成人av影视在线观看| 欧美一区二区三区系列电影| 亚洲欧美色一区| 成人app下载| 国产性做久久久久久| 麻豆91在线播放免费| 欧美日韩中文字幕一区| 亚洲精品国久久99热| 成人亚洲精品久久久久软件| 欧美精品一区二区三区蜜桃视频| 午夜精品一区在线观看| 在线视频观看一区| 椎名由奈av一区二区三区| 成人一级视频在线观看| 久久精品亚洲国产奇米99| 寂寞少妇一区二区三区| 日韩欧美国产三级| 激情五月婷婷综合网| 精品国产乱码久久久久久免费| 日韩精品电影在线观看| 欧美精品乱码久久久久久|