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

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

?? pjsua_app.c

?? 基于sip協議的網絡電話源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* $Id: pjsua_app.c 1271 2007-05-14 16:37:47Z bennylp $ *//*  * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include <pjsua-lib/pjsua.h>#define THIS_FILE	"pjsua.c"#define NO_LIMIT	(int)0x7FFFFFFF//#define STEREO_DEMO/* Call specific data */struct call_data{    pj_timer_entry	    timer;};/* Pjsua application data */static struct app_config{    pjsua_config	    cfg;    pjsua_logging_config    log_cfg;    pjsua_media_config	    media_cfg;    pj_bool_t		    no_refersub;    pj_bool_t		    no_tcp;    pj_bool_t		    no_udp;    pj_bool_t		    use_tls;    pjsua_transport_config  udp_cfg;    pjsua_transport_config  rtp_cfg;    unsigned		    acc_cnt;    pjsua_acc_config	    acc_cfg[PJSUA_MAX_ACC];    unsigned		    buddy_cnt;    pjsua_buddy_config	    buddy_cfg[PJSUA_MAX_BUDDIES];    struct call_data	    call_data[PJSUA_MAX_CALLS];    pj_pool_t		   *pool;    /* Compatibility with older pjsua */    unsigned		    codec_cnt;    pj_str_t		    codec_arg[32];    pj_bool_t		    null_audio;    unsigned		    wav_count;    pj_str_t		    wav_files[32];    unsigned		    tone_count;    pjmedia_tone_desc	    tones[32];    pjsua_conf_port_id	    tone_slots[32];    pjsua_player_id	    wav_id;    pjsua_conf_port_id	    wav_port;    pj_bool_t		    auto_play;    pj_bool_t		    auto_loop;    pj_bool_t		    auto_conf;    pj_str_t		    rec_file;    pj_bool_t		    auto_rec;    pjsua_recorder_id	    rec_id;    pjsua_conf_port_id	    rec_port;    unsigned		    ptime;    unsigned		    auto_answer;    unsigned		    duration;#ifdef STEREO_DEMO    pjmedia_snd_port	   *snd;#endif    float		    mic_level,			    speaker_level;    int			    capture_dev, playback_dev;} app_config;//static pjsua_acc_id	current_acc;#define current_acc	pjsua_acc_get_default()static pjsua_call_id	current_call = PJSUA_INVALID_ID;static pj_str_t		uri_arg;#ifdef STEREO_DEMOstatic void stereo_demo();#endifpj_status_t app_destroy(void);/***************************************************************************** * Configuration manipulation *//* Show usage */static void usage(void){    puts  ("Usage:");    puts  ("  pjsua [options] [SIP URL to call]");    puts  ("");    puts  ("General options:");    puts  ("  --config-file=file  Read the config/arguments from file.");    puts  ("  --help              Display this help screen");    puts  ("  --version           Display version info");    puts  ("");    puts  ("Logging options:");    puts  ("  --log-file=fname    Log to filename (default stderr)");    puts  ("  --log-level=N       Set log max level to N (0(none) to 6(trace)) (default=5)");    puts  ("  --app-log-level=N   Set log max level for stdout display (default=4)");    puts  ("");    puts  ("SIP Account options:");    puts  ("  --registrar=url     Set the URL of registrar server");    puts  ("  --id=url            Set the URL of local ID (used in From header)");    puts  ("  --contact=url       Optionally override the Contact information");    puts  ("  --proxy=url         Optional URL of proxy server to visit");    puts  ("                      May be specified multiple times");    puts  ("  --reg-timeout=SEC   Optional registration interval (default 55)");    puts  ("  --realm=string      Set realm");    puts  ("  --username=string   Set authentication username");    puts  ("  --password=string   Set authentication password");    puts  ("  --publish           Send presence PUBLISH for this account");    puts  ("  --next-cred         Add another credentials");    puts  ("");    puts  ("SIP Account Control:");    puts  ("  --next-account      Add more account");    puts  ("");    puts  ("Transport Options:");    puts  ("  --local-port=port   Set TCP/UDP port. This implicitly enables both ");    puts  ("                      TCP and UDP transports on the specified port, unless");    puts  ("                      if TCP or UDP is disabled.");    puts  ("  --ip-addr=IP        Use the specifed address as SIP and RTP addresses.");    puts  ("                      (Hint: the IP may be the public IP of the NAT/router)");    puts  ("  --no-tcp            Disable TCP transport.");    puts  ("  --no-udp            Disable UDP transport.");    puts  ("  --nameserver=NS     Add the specified nameserver to enable SRV resolution");    puts  ("                      This option can be specified multiple times.");    puts  ("  --outbound=url      Set the URL of global outbound proxy server");    puts  ("                      May be specified multiple times");    puts  ("  --use-stun1=FORMAT  where FORMAT=host[:port]");    puts  ("  --use-stun2=FORMAT  Resolve local IP with the specified STUN servers");    puts  ("");    puts  ("TLS Options:");    puts  ("  --use-tls           Enable TLS transport (default=no)");    puts  ("  --tls-ca-file       Specify TLS CA file (default=none)");    puts  ("  --tls-cert-file     Specify TLS certificate file (default=none)");    puts  ("  --tls-privkey-file  Specify TLS private key file (default=none)");    puts  ("  --tls-password      Specify TLS password to private key file (default=none)");    puts  ("  --tls-verify-server Verify server's certificate (default=no)");    puts  ("  --tls-verify-client Verify client's certificate (default=no)");    puts  ("  --tls-neg-timeout   Specify TLS negotiation timeout (default=no)");    puts  ("");    puts  ("Media Options:");    puts  ("  --add-codec=name    Manually add codec (default is to enable all)");    puts  ("  --clock-rate=N      Override sound device clock rate");    puts  ("  --null-audio        Use NULL audio device");    puts  ("  --play-file=file    Register WAV file in conference bridge.");    puts  ("                      This can be specified multiple times.");    puts  ("  --play-tone=FORMAT  Register tone to the conference bridge.");    puts  ("                      FORMAT is 'F1,F2,ON,OFF', where F1,F2 are");    puts  ("                      frequencies, and ON,OFF=on/off duration in msec.");    puts  ("                      This can be specified multiple times.");    puts  ("  --auto-play         Automatically play the file (to incoming calls only)");    puts  ("  --auto-loop         Automatically loop incoming RTP to outgoing RTP");    puts  ("  --auto-conf         Automatically put calls in conference with others");    puts  ("  --rec-file=file     Open file recorder (extension can be .wav or .mp3");    puts  ("  --auto-rec          Automatically record conversation");    puts  ("  --rtp-port=N        Base port to try for RTP (default=4000)");    puts  ("  --quality=N         Specify media quality (0-10, default=6)");    puts  ("  --ptime=MSEC        Override codec ptime to MSEC (default=specific)");    puts  ("  --no-vad            Disable VAD/silence detector (default=vad enabled)");    puts  ("  --ec-tail=MSEC      Set echo canceller tail length (default=256)");    puts  ("  --ilbc-mode=MODE    Set iLBC codec mode (20 or 30, default is 20)");    puts  ("  --rx-drop-pct=PCT   Drop PCT percent of RX RTP (for pkt lost sim, default: 0)");    puts  ("  --tx-drop-pct=PCT   Drop PCT percent of TX RTP (for pkt lost sim, default: 0)");    puts  ("  --capture-dev=id    Audio capture device ID (default=-1)");    puts  ("  --playback-dev=id   Audio playback device ID (default=-1)");    puts  ("");    puts  ("Buddy List (can be more than one):");    puts  ("  --add-buddy url     Add the specified URL to the buddy list.");    puts  ("");    puts  ("User Agent options:");    puts  ("  --auto-answer=code  Automatically answer incoming calls with code (e.g. 200)");    puts  ("  --max-calls=N       Maximum number of concurrent calls (default:4, max:255)");    puts  ("  --thread-cnt=N      Number of worker threads (default:1)");    puts  ("  --duration=SEC      Set maximum call duration (default:no limit)");    puts  ("  --norefersub        Suppress event subscription when transfering calls");    puts  ("");    puts  ("When URL is specified, pjsua will immediately initiate call to that URL");    puts  ("");    fflush(stdout);}/* Set default config. */static void default_config(struct app_config *cfg){    char tmp[80];    unsigned i;    pjsua_config_default(&cfg->cfg);    pj_ansi_sprintf(tmp, "PJSUA v%s/%s", PJ_VERSION, PJ_OS_NAME);    pj_strdup2_with_null(app_config.pool, &cfg->cfg.user_agent, tmp);    pjsua_logging_config_default(&cfg->log_cfg);    pjsua_media_config_default(&cfg->media_cfg);    pjsua_transport_config_default(&cfg->udp_cfg);    cfg->udp_cfg.port = 5060;    pjsua_transport_config_default(&cfg->rtp_cfg);    cfg->rtp_cfg.port = 4000;    cfg->duration = NO_LIMIT;    cfg->wav_id = PJSUA_INVALID_ID;    cfg->rec_id = PJSUA_INVALID_ID;    cfg->wav_port = PJSUA_INVALID_ID;    cfg->rec_port = PJSUA_INVALID_ID;    cfg->mic_level = cfg->speaker_level = 1.0;    cfg->capture_dev = PJSUA_INVALID_ID;    cfg->playback_dev = PJSUA_INVALID_ID;    for (i=0; i<PJ_ARRAY_SIZE(cfg->acc_cfg); ++i)	pjsua_acc_config_default(&cfg->acc_cfg[i]);    for (i=0; i<PJ_ARRAY_SIZE(cfg->buddy_cfg); ++i)	pjsua_buddy_config_default(&cfg->buddy_cfg[i]);}/* * Read command arguments from config file. */static int read_config_file(pj_pool_t *pool, const char *filename, 			    int *app_argc, char ***app_argv){    int i;    FILE *fhnd;    char line[200];    int argc = 0;    char **argv;    enum { MAX_ARGS = 64 };    /* Allocate MAX_ARGS+1 (argv needs to be terminated with NULL argument) */    argv = pj_pool_calloc(pool, MAX_ARGS+1, sizeof(char*));    argv[argc++] = *app_argv[0];    /* Open config file. */    fhnd = fopen(filename, "rt");    if (!fhnd) {	PJ_LOG(1,(THIS_FILE, "Unable to open config file %s", filename));	fflush(stdout);	return -1;    }    /* Scan tokens in the file. */    while (argc < MAX_ARGS && !feof(fhnd)) {	char *token, *p = line;	if (fgets(line, sizeof(line), fhnd) == NULL) break;	for (token = strtok(p, " \t\r\n"); argc < MAX_ARGS; 	     token = strtok(NULL, " \t\r\n"))	{	    int token_len;	    	    if (!token) break;	    if (*token == '#') break;	    token_len = strlen(token);	    if (!token_len)		continue;	    argv[argc] = pj_pool_alloc(pool, token_len+1);	    pj_memcpy(argv[argc], token, token_len+1);	    ++argc;	}    }    /* Copy arguments from command line */    for (i=1; i<*app_argc && argc < MAX_ARGS; ++i)	argv[argc++] = (*app_argv)[i];    if (argc == MAX_ARGS && (i!=*app_argc || !feof(fhnd))) {	PJ_LOG(1,(THIS_FILE, 		  "Too many arguments specified in cmd line/config file"));	fflush(stdout);	fclose(fhnd);	return -1;    }    fclose(fhnd);    /* Assign the new command line back to the original command line. */    *app_argc = argc;    *app_argv = argv;    return 0;}static int my_atoi(const char *cs){    pj_str_t s;    return pj_strtoul(pj_cstr(&s, cs));}/* Parse arguments. */static pj_status_t parse_args(int argc, char *argv[],			      struct app_config *cfg,			      pj_str_t *uri_to_call){    int c;    int option_index;    enum { OPT_CONFIG_FILE=127, OPT_LOG_FILE, OPT_LOG_LEVEL, OPT_APP_LOG_LEVEL, 	   OPT_HELP, OPT_VERSION, OPT_NULL_AUDIO, 	   OPT_LOCAL_PORT, OPT_IP_ADDR, OPT_PROXY, OPT_OUTBOUND_PROXY, 	   OPT_REGISTRAR, OPT_REG_TIMEOUT, OPT_PUBLISH, OPT_ID, OPT_CONTACT,	   OPT_REALM, OPT_USERNAME, OPT_PASSWORD,	   OPT_NAMESERVER, OPT_USE_STUN1, OPT_USE_STUN2, 	   OPT_ADD_BUDDY, OPT_OFFER_X_MS_MSG, OPT_NO_PRESENCE,	   OPT_AUTO_ANSWER, OPT_AUTO_HANGUP, OPT_AUTO_PLAY, OPT_AUTO_LOOP,	   OPT_AUTO_CONF, OPT_CLOCK_RATE,	   OPT_PLAY_FILE, OPT_PLAY_TONE, OPT_RTP_PORT, OPT_ADD_CODEC, 	   OPT_ILBC_MODE, OPT_REC_FILE, OPT_AUTO_REC,	   OPT_COMPLEXITY, OPT_QUALITY, OPT_PTIME, OPT_NO_VAD,	   OPT_RX_DROP_PCT, OPT_TX_DROP_PCT, OPT_EC_TAIL,	   OPT_NEXT_ACCOUNT, OPT_NEXT_CRED, OPT_MAX_CALLS, 	   OPT_DURATION, OPT_NO_TCP, OPT_NO_UDP, OPT_THREAD_CNT,	   OPT_NOREFERSUB,	   OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_CERT_FILE, OPT_TLS_PRIV_FILE,	   OPT_TLS_PASSWORD, OPT_TLS_VERIFY_SERVER, OPT_TLS_VERIFY_CLIENT,	   OPT_TLS_NEG_TIMEOUT,	   OPT_CAPTURE_DEV, OPT_PLAYBACK_DEV,    };    struct pj_getopt_option long_options[] = {	{ "config-file",1, 0, OPT_CONFIG_FILE},	{ "log-file",	1, 0, OPT_LOG_FILE},	{ "log-level",	1, 0, OPT_LOG_LEVEL},	{ "app-log-level",1,0,OPT_APP_LOG_LEVEL},	{ "help",	0, 0, OPT_HELP},	{ "version",	0, 0, OPT_VERSION},	{ "clock-rate",	1, 0, OPT_CLOCK_RATE},	{ "null-audio", 0, 0, OPT_NULL_AUDIO},	{ "local-port", 1, 0, OPT_LOCAL_PORT},	{ "ip-addr",	1, 0, OPT_IP_ADDR},	{ "no-tcp",     0, 0, OPT_NO_TCP},	{ "no-udp",     0, 0, OPT_NO_UDP},	{ "norefersub", 0, 0, OPT_NOREFERSUB},	{ "proxy",	1, 0, OPT_PROXY},	{ "outbound",	1, 0, OPT_OUTBOUND_PROXY},	{ "registrar",	1, 0, OPT_REGISTRAR},	{ "reg-timeout",1, 0, OPT_REG_TIMEOUT},	{ "publish",    0, 0, OPT_PUBLISH},	{ "id",		1, 0, OPT_ID},	{ "contact",	1, 0, OPT_CONTACT},	{ "realm",	1, 0, OPT_REALM},	{ "username",	1, 0, OPT_USERNAME},	{ "password",	1, 0, OPT_PASSWORD},	{ "nameserver", 1, 0, OPT_NAMESERVER},	{ "use-stun1",  1, 0, OPT_USE_STUN1},	{ "use-stun2",  1, 0, OPT_USE_STUN2},	{ "add-buddy",  1, 0, OPT_ADD_BUDDY},	{ "offer-x-ms-msg",0,0,OPT_OFFER_X_MS_MSG},	{ "no-presence", 0, 0, OPT_NO_PRESENCE},	{ "auto-answer",1, 0, OPT_AUTO_ANSWER},	{ "auto-hangup",1, 0, OPT_AUTO_HANGUP},	{ "auto-play",  0, 0, OPT_AUTO_PLAY},	{ "auto-rec",   0, 0, OPT_AUTO_REC},	{ "auto-loop",  0, 0, OPT_AUTO_LOOP},	{ "auto-conf",  0, 0, OPT_AUTO_CONF},	{ "play-file",  1, 0, OPT_PLAY_FILE},	{ "play-tone",  1, 0, OPT_PLAY_TONE},	{ "rec-file",   1, 0, OPT_REC_FILE},	{ "rtp-port",	1, 0, OPT_RTP_PORT},	{ "add-codec",  1, 0, OPT_ADD_CODEC},	{ "complexity",	1, 0, OPT_COMPLEXITY},	{ "quality",	1, 0, OPT_QUALITY},	{ "ptime",      1, 0, OPT_PTIME},	{ "no-vad",     0, 0, OPT_NO_VAD},	{ "ec-tail",    1, 0, OPT_EC_TAIL},	{ "ilbc-mode",	1, 0, OPT_ILBC_MODE},	{ "rx-drop-pct",1, 0, OPT_RX_DROP_PCT},	{ "tx-drop-pct",1, 0, OPT_TX_DROP_PCT},	{ "next-account",0,0, OPT_NEXT_ACCOUNT},	{ "next-cred",	0, 0, OPT_NEXT_CRED},	{ "max-calls",	1, 0, OPT_MAX_CALLS},	{ "duration",	1, 0, OPT_DURATION},	{ "thread-cnt",	1, 0, OPT_THREAD_CNT},	{ "use-tls",	0, 0, OPT_USE_TLS}, 	{ "tls-ca-file",1, 0, OPT_TLS_CA_FILE},	{ "tls-cert-file",1,0, OPT_TLS_CERT_FILE}, 	{ "tls-privkey-file",1,0, OPT_TLS_PRIV_FILE},	{ "tls-password",1,0, OPT_TLS_PASSWORD},	{ "tls-verify-server", 0, 0, OPT_TLS_VERIFY_SERVER},	{ "tls-verify-client", 0, 0, OPT_TLS_VERIFY_CLIENT},	{ "tls-neg-timeout", 1, 0, OPT_TLS_NEG_TIMEOUT},	{ "capture-dev",    1, 0, OPT_CAPTURE_DEV},	{ "playback-dev",   1, 0, OPT_PLAYBACK_DEV},	{ NULL, 0, 0, 0}    };    pj_status_t status;    pjsua_acc_config *cur_acc;    char *config_file = NULL;    unsigned i;    /* Run pj_getopt once to see if user specifies config file to read. */     pj_optind = 0;    while ((c=pj_getopt_long(argc, argv, "", long_options, 			     &option_index)) != -1)     {	switch (c) {	case OPT_CONFIG_FILE:	    config_file = pj_optarg;	    break;	}	if (config_file)	    break;    }    if (config_file) {	status = read_config_file(app_config.pool, config_file, &argc, &argv);	if (status != 0)	    return status;    }    cfg->acc_cnt = 0;    cur_acc = &cfg->acc_cfg[0];    /* Reinitialize and re-run pj_getopt again, possibly with new arguments     * read from config file.     */    pj_optind = 0;    while((c=pj_getopt_long(argc,argv, "", long_options,&option_index))!=-1) {	char *p;	pj_str_t tmp;	long lval;	switch (c) {	case OPT_CONFIG_FILE:	    /* Ignore as this has been processed before */	    break;		case OPT_LOG_FILE:	    cfg->log_cfg.log_filename = pj_str(pj_optarg);	    break;	case OPT_LOG_LEVEL:	    c = pj_strtoul(pj_cstr(&tmp, pj_optarg));	    if (c < 0 || c > 6) {		PJ_LOG(1,(THIS_FILE, 			  "Error: expecting integer value 0-6 "			  "for --log-level"));		return PJ_EINVAL;	    }	    cfg->log_cfg.level = c;	    pj_log_set_level( c );	    break;	case OPT_APP_LOG_LEVEL:	    cfg->log_cfg.console_level = pj_strtoul(pj_cstr(&tmp, pj_optarg));	    if (cfg->log_cfg.console_level < 0 || cfg->log_cfg.console_level > 6) {		PJ_LOG(1,(THIS_FILE, 			  "Error: expecting integer value 0-6 "			  "for --app-log-level"));		return PJ_EINVAL;	    }	    break;	case OPT_HELP:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜视频福利| 欧美三级三级三级爽爽爽| 欧美最猛性xxxxx直播| 欧美变态口味重另类| 亚洲精品午夜久久久| 国产传媒久久文化传媒| 91精品午夜视频| 亚洲一区二区三区视频在线播放 | 精品国产乱码久久久久久1区2区 | 国产精品久线在线观看| 美女在线观看视频一区二区| 欧美日韩精品一二三区| 亚洲欧美日韩久久| eeuss鲁片一区二区三区 | 日韩欧美成人一区二区| 亚洲小说春色综合另类电影| 成人a区在线观看| 欧美经典一区二区三区| 久久99久久久欧美国产| 日韩欧美激情一区| 天堂av在线一区| 欧美精品一卡两卡| 亚洲国产精品视频| 欧美日本韩国一区二区三区视频| 亚洲亚洲精品在线观看| 欧美亚洲综合色| 一区二区三区电影在线播| 成人97人人超碰人人99| 日本一区二区动态图| 成人白浆超碰人人人人| 国产精品嫩草久久久久| 99久久精品国产毛片| 中文字幕一区二区在线观看| caoporm超碰国产精品| 亚洲欧美日韩国产中文在线| 一本一道综合狠狠老| 亚洲一区在线观看视频| 欧美女孩性生活视频| 久久精品噜噜噜成人av农村| 日韩精品一区在线| 懂色av一区二区夜夜嗨| 综合电影一区二区三区| 日本道免费精品一区二区三区| 亚洲第一久久影院| 日韩一区二区免费高清| 国产毛片精品国产一区二区三区| 国产精品三级久久久久三级| 色婷婷av久久久久久久| 奇米一区二区三区av| 久久―日本道色综合久久 | 国产精品一线二线三线| 亚洲国产成人一区二区三区| 91久久精品一区二区二区| 午夜国产不卡在线观看视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美不卡视频一区| 久久久久久**毛片大全| 成人av在线资源| 天天色综合成人网| 久久久国产午夜精品| 一本在线高清不卡dvd| 青椒成人免费视频| 国产精品国产馆在线真实露脸| 欧美在线视频你懂得| 国产一区二区看久久| 亚洲欧洲日韩在线| 欧美成人午夜电影| 91成人在线免费观看| 精品一区二区三区香蕉蜜桃 | 久久久噜噜噜久噜久久综合| 91小视频在线观看| 激情综合色播五月| 一区二区三区免费观看| 亚洲精品一区二区三区99 | 色悠久久久久综合欧美99| 久久不见久久见免费视频1| 亚洲另类色综合网站| 久久综合色播五月| 欧美日韩一区二区三区四区五区| 国产伦理精品不卡| 美女视频黄频大全不卡视频在线播放| 国产精品久久久久久久久免费樱桃 | 久久97超碰色| 亚洲第一久久影院| 亚洲人成精品久久久久| 久久久久久久久久久电影| 欧美视频在线播放| 91免费在线播放| 国产suv精品一区二区6| 秋霞av亚洲一区二区三| 亚洲精品videosex极品| 国产精品久久网站| 国产午夜精品一区二区三区嫩草| 日韩一区二区在线看| 91 com成人网| 欧美日韩成人综合天天影院 | av综合在线播放| 国产精品一线二线三线| 久久精品国产精品青草| 婷婷成人综合网| 午夜视频在线观看一区| 亚洲电影在线免费观看| 一区二区三区中文免费| 亚洲精品国产无套在线观 | 国产精品久久久久久久岛一牛影视| 精品国产乱码久久久久久久| 日韩精品一区二区三区swag| 欧美理论电影在线| 4438成人网| 欧美成人精精品一区二区频| 日韩一级精品视频在线观看| 欧美精品在欧美一区二区少妇| 欧美日韩国产影片| 欧美一区二区网站| 精品少妇一区二区三区在线播放| 精品国产91亚洲一区二区三区婷婷 | 91麻豆精品久久久久蜜臀| 91麻豆精品国产91久久久久久久久| 欧美欧美午夜aⅴ在线观看| 欧美精品成人一区二区三区四区| 91精品国产品国语在线不卡| 91精品视频网| 久久久亚洲精品一区二区三区| wwwwxxxxx欧美| 国产精品欧美综合在线| 亚洲伦理在线免费看| 污片在线观看一区二区| 久久精品999| 成人一区二区在线观看| 色94色欧美sute亚洲线路二| 欧美日韩免费不卡视频一区二区三区| 欧美精品丝袜久久久中文字幕| 日韩欧美国产电影| 亚洲国产精品激情在线观看| 一区二区三区蜜桃网| 免费成人av在线| 国产成人精品亚洲777人妖| 91年精品国产| 日韩精品中文字幕在线一区| 国产精品色一区二区三区| 亚洲高清免费视频| 国产jizzjizz一区二区| 欧美性受xxxx黑人xyx| 日韩欧美一区二区久久婷婷| 中文乱码免费一区二区| 午夜精品福利一区二区三区蜜桃| 国产麻豆精品视频| 欧洲视频一区二区| 久久九九99视频| 亚洲国产精品麻豆| 国产999精品久久| 在线日韩国产精品| 久久久美女艺术照精彩视频福利播放| 亚洲欧洲中文日韩久久av乱码| 麻豆成人av在线| 91久久一区二区| 久久久久久久久免费| 亚洲一区二区精品3399| 国产suv精品一区二区三区| 欧美日韩国产片| 国产精品无人区| 久久精品72免费观看| 欧美在线免费视屏| 中文字幕巨乱亚洲| 精品一区二区免费视频| 欧美综合在线视频| 中文字幕在线一区| 国产一区啦啦啦在线观看| 欧美卡1卡2卡| 亚洲综合丁香婷婷六月香| 成人看片黄a免费看在线| 欧美v亚洲v综合ⅴ国产v| 丝袜亚洲另类欧美| 在线看日本不卡| 亚洲日本免费电影| 国产99久久久国产精品潘金网站| 欧美一区二区在线视频| 香蕉成人伊视频在线观看| 在线视频欧美精品| 亚洲色欲色欲www| 成人性生交大片免费| 久久久久成人黄色影片| 韩国精品在线观看| 精品久久久久久综合日本欧美 | 艳妇臀荡乳欲伦亚洲一区| 成人黄色小视频在线观看| 久久影院电视剧免费观看| 久久精品国产免费| 欧美白人最猛性xxxxx69交| 日韩激情视频在线观看| 欧美日韩国产免费一区二区| 亚洲综合视频网| 欧美三级蜜桃2在线观看| 亚洲地区一二三色| 欧美日韩日日骚| 天天综合色天天综合| 91精品国产全国免费观看| 麻豆一区二区三区| 久久女同精品一区二区| 国产九九视频一区二区三区|