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

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

?? easy-tls.c

?? 開源的ssl算法openssl,版本0.9.8H
?? C
?? 第 1 頁 / 共 3 頁
字號:
	int w = n >= 2;	/* loop over all (i, w) in {0,1}x{0,1} */	int fd;		if (i == 0 && w == 0)	    fd = read_select_1;	else if (i == 1 && w == 0)	    fd = read_select_2;	else if (i == 0 && w == 1)	    fd = write_select_1;	else {	    assert(i == 1 && w == 1);	    fd = write_select_2;	}		if (fd >= 0) {	    if (w == 0)		FD_SET(fd, &reads);	    else /* w == 1 */		FD_SET(fd, &writes);	}    }    if (seconds >= 0) {	timeout.tv_sec = seconds;	timeout.tv_usec = 0;	timeout_p = &timeout;    } else 	timeout_p = NULL;    DEBUG_MSG2("select no.", ++tls_select_count);    select(maxfd + 1, &reads, &writes, (fd_set *) NULL, timeout_p);    DEBUG_MSG("cont.");}/*****************************************************************************/#define TUNNELBUFSIZE (16*1024)struct tunnelbuf {    char buf[TUNNELBUFSIZE];    size_t len;    size_t offset;};static int tls_connect_attempt(SSL *, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref);static int tls_accept_attempt(SSL *, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref);static int tls_write_attempt(SSL *, struct tunnelbuf *, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref);static int tls_read_attempt(SSL *, struct tunnelbuf *, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref);static int write_attempt(int fd, struct tunnelbuf *, int *select, int *closed, int *progress);static int read_attempt(int fd, struct tunnelbuf *, int *select, int *closed, int *progress);static void write_info(SSL *ssl, int *info_fd){    if (*info_fd != -1) {	long v;	int v_ok;	struct tls_x509_name_string peer;	char infobuf[TLS_INFO_SIZE];	int r;	DEBUG_MSG("write_info");	v = SSL_get_verify_result(ssl);	v_ok = (v == X509_V_OK) ? 'A' : 'E'; /* Auth./Error */	{	    X509 *peercert;	    peercert = SSL_get_peer_certificate(ssl);	    tls_get_x509_subject_name_oneline(peercert, &peer);	    if (peercert != NULL)		X509_free(peercert);	}	if (peer.str[0] == '\0')	    v_ok = '0'; /* no cert at all */	else	    if (strchr(peer.str, '\n')) {		/* should not happen, but make sure */		*strchr(peer.str, '\n') = '\0';	    }	r = snprintf(infobuf, sizeof infobuf, "%c:%s\n%s\n", v_ok, X509_verify_cert_error_string(v), peer.str);	DEBUG_MSG2("snprintf", r);	if (r == -1 || r >= sizeof infobuf)	    r = sizeof infobuf - 1;	write(*info_fd, infobuf, r);	close (*info_fd);	*info_fd = -1;    }}/* tls_proxy expects that all fds are closed after return */static voidtls_proxy(int clear_fd, int tls_fd, int info_fd, SSL_CTX *ctx, int client_p){    struct tunnelbuf clear_to_tls, tls_to_clear;    SSL *ssl;    BIO *rbio, *wbio;    int closed, in_handshake;    const char *err_pref_1 = "", *err_pref_2 = "";    const char *err_def = NULL;    assert(clear_fd != -1);    assert(tls_fd != -1);    assert(clear_fd < FD_SETSIZE);    assert(tls_fd < FD_SETSIZE);    /* info_fd may be -1 */    assert(ctx != NULL);    tls_rand_seed_uniquely();    tls_socket_nonblocking(clear_fd);    DEBUG_MSG2("clear_fd", clear_fd);    tls_socket_nonblocking(tls_fd);    DEBUG_MSG2("tls_fd", tls_fd);    ssl = SSL_new(ctx);    if (ssl == NULL)	goto err;    DEBUG_MSG("SSL_new");    if (!SSL_set_fd(ssl, tls_fd))	goto err;    rbio = SSL_get_rbio(ssl);    wbio = SSL_get_wbio(ssl); /* should be the same, but who cares */    assert(rbio != NULL);    assert(wbio != NULL);    if (client_p)	SSL_set_connect_state(ssl);    else	SSL_set_accept_state(ssl);        closed = 0;    in_handshake = 1;    tls_to_clear.len = 0;    tls_to_clear.offset = 0;    clear_to_tls.len = 0;    clear_to_tls.offset = 0;    err_def = "I/O error";        /* loop finishes as soon as we detect that one side closed;     * when all (program and OS) buffers have enough space,     * the data from the last succesful read in each direction is transferred     * before close */    do {	int clear_read_select = 0, clear_write_select = 0,	    tls_read_select = 0, tls_write_select = 0,	    progress = 0;	int r;	unsigned long num_read = BIO_number_read(rbio),	    num_written = BIO_number_written(wbio);	DEBUG_MSG2("loop iteration", ++tls_loop_count);	if (in_handshake) {	    DEBUG_MSG("in_handshake");	    if (client_p)		r = tls_connect_attempt(ssl, &tls_write_select, &tls_read_select, &closed, &progress, &err_pref_1);	    else		r = tls_accept_attempt(ssl, &tls_write_select, &tls_read_select, &closed, &progress, &err_pref_1);	    if (r != 0) {		write_info(ssl, &info_fd);		goto err;	    }	    if (closed)		goto err_return;	    if (!SSL_in_init(ssl)) {		in_handshake = 0;		write_info(ssl, &info_fd);	    }	}		if (clear_to_tls.len != 0 && !in_handshake) {	    assert(!closed);	    	    r = tls_write_attempt(ssl, &clear_to_tls, &tls_write_select, &tls_read_select, &closed, &progress, &err_pref_1);	    if (r != 0)		goto err;	    if (closed) {		assert(progress);		tls_to_clear.offset = 0;		tls_to_clear.len = 0;	    }	}		if (tls_to_clear.len != 0) {	    assert(!closed);	    r = write_attempt(clear_fd, &tls_to_clear, &clear_write_select, &closed, &progress);	    if (r != 0)		goto err_return;	    if (closed) {		assert(progress);		clear_to_tls.offset = 0;		clear_to_tls.len = 0;	    }	}		if (!closed) {	    if (clear_to_tls.offset + clear_to_tls.len < sizeof clear_to_tls.buf) {		r = read_attempt(clear_fd, &clear_to_tls, &clear_read_select, &closed, &progress);		if (r != 0)		    goto err_return;		if (closed) {		    r = SSL_shutdown(ssl);		    DEBUG_MSG2("SSL_shutdown", r);		}	    }	}		if (!closed && !in_handshake) {	    if (tls_to_clear.offset + tls_to_clear.len < sizeof tls_to_clear.buf) {		r = tls_read_attempt(ssl, &tls_to_clear, &tls_write_select, &tls_read_select, &closed, &progress, &err_pref_1);		if (r != 0)		    goto err;		if (closed) {		    r = SSL_shutdown(ssl);		    DEBUG_MSG2("SSL_shutdown", r);		}	    }	}	if (!progress) {	    DEBUG_MSG("!progress?");	    if (num_read != BIO_number_read(rbio) || num_written != BIO_number_written(wbio))		progress = 1;	    if (!progress) {		DEBUG_MSG("!progress");		assert(clear_read_select || tls_read_select || clear_write_select || tls_write_select);		tls_sockets_select(clear_read_select ? clear_fd : -1, tls_read_select ? tls_fd : -1, clear_write_select ? clear_fd : -1, tls_write_select ? tls_fd : -1, -1);	    }	}    } while (!closed);    return; err:    tls_openssl_errors(err_pref_1, err_pref_2, err_def, tls_child_apparg); err_return:    return;}static inttls_get_error(SSL *ssl, int r, int *write_select, int *read_select, int *closed, int *progress){    int err = SSL_get_error(ssl, r);    if (err == SSL_ERROR_NONE) {	assert(r > 0);	*progress = 1;	return 0;    }    assert(r <= 0);    switch (err) {    case SSL_ERROR_ZERO_RETURN:	assert(r == 0);	*closed = 1;	*progress = 1;	return 0;    case SSL_ERROR_WANT_WRITE:	*write_select = 1;	return 0;	    case SSL_ERROR_WANT_READ:	*read_select = 1;	return 0;    }    return -1;}static inttls_connect_attempt(SSL *ssl, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref){    int n, r;    DEBUG_MSG("tls_connect_attempt");    n = SSL_connect(ssl);    DEBUG_MSG2("SSL_connect",n);    r = tls_get_error(ssl, n, write_select, read_select, closed, progress);    if (r == -1)	*err_pref = " during SSL_connect";    return r;}static inttls_accept_attempt(SSL *ssl, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref){    int n, r;    DEBUG_MSG("tls_accept_attempt");    n = SSL_accept(ssl);    DEBUG_MSG2("SSL_accept",n);    r = tls_get_error(ssl, n, write_select, read_select, closed, progress);    if (r == -1)	*err_pref = " during SSL_accept";    return r;}static inttls_write_attempt(SSL *ssl, struct tunnelbuf *buf, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref){    int n, r;    DEBUG_MSG("tls_write_attempt");    n = SSL_write(ssl, buf->buf + buf->offset, buf->len);    DEBUG_MSG2("SSL_write",n);    r = tls_get_error(ssl, n, write_select, read_select, closed, progress);    if (n > 0) {	buf->len -= n;	assert(buf->len >= 0);	if (buf->len == 0)	    buf->offset = 0;	else	    buf->offset += n;    }    if (r == -1)	*err_pref = " during SSL_write";    return r;}static inttls_read_attempt(SSL *ssl, struct tunnelbuf *buf, int *write_select, int *read_select, int *closed, int *progress, const char **err_pref){    int n, r;    size_t total;    DEBUG_MSG("tls_read_attempt");    total = buf->offset + buf->len;    assert(total < sizeof buf->buf);    n = SSL_read(ssl, buf->buf + total, (sizeof buf->buf) - total);    DEBUG_MSG2("SSL_read",n);    r = tls_get_error(ssl, n, write_select, read_select, closed, progress);    if (n > 0) {	buf->len += n;	assert(buf->offset + buf->len <= sizeof buf->buf);    }    if (r == -1)	*err_pref = " during SSL_read";    return r;}static intget_error(int r, int *select, int *closed, int *progress){    if (r >= 0) {	*progress = 1;	if (r == 0)	    *closed = 1;	return 0;    } else {	assert(r == -1);	if (errno == EAGAIN || errno == EWOULDBLOCK) {	    *select = 1;	    return 0;	} else if (errno == EPIPE) {	    *progress = 1;	    *closed = 1;	    return 0;	} else	    return -1;    }}static int write_attempt(int fd, struct tunnelbuf *buf, int *select, int *closed, int *progress){    int n, r;    DEBUG_MSG("write_attempt");    n = write(fd, buf->buf + buf->offset, buf->len);    DEBUG_MSG2("write",n);    r = get_error(n, select, closed, progress);    if (n > 0) {	buf->len -= n;	assert(buf->len >= 0);	if (buf->len == 0)	    buf->offset = 0;	else	    buf->offset += n;    }    if (r == -1)	tls_errprintf(1, tls_child_apparg, "write error: %s\n", strerror(errno));    return r;}    static intread_attempt(int fd, struct tunnelbuf *buf, int *select, int *closed, int *progress){    int n, r;    size_t total;    DEBUG_MSG("read_attempt");    total = buf->offset + buf->len;    assert(total < sizeof buf->buf);    n = read(fd, buf->buf + total, (sizeof buf->buf) - total);    DEBUG_MSG2("read",n);    r = get_error(n, select, closed, progress);    if (n > 0) {	buf->len += n;	assert(buf->offset + buf->len <= sizeof buf->buf);    }    if (r == -1)	tls_errprintf(1, tls_child_apparg, "read error: %s\n", strerror(errno));    return r;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久先锋资源网| 成人av网址在线观看| 欧美三级资源在线| 2020国产精品自拍| 亚洲与欧洲av电影| 欧美三级电影网| 亚洲va欧美va人人爽| 欧美综合天天夜夜久久| 亚洲免费在线看| 色婷婷精品大在线视频| 亚洲美女在线国产| av不卡一区二区三区| 国产精品蜜臀在线观看| 成人免费高清视频| 中文字幕一区二区三区不卡在线| 欧美日韩视频在线观看一区二区三区| 成人av电影在线观看| 国产亚洲精品bt天堂精选| 国产精品一二三| 亚洲国产精品99久久久久久久久| 亚洲另类在线制服丝袜| 99国产欧美久久久精品| 亚洲综合一区二区精品导航| 在线精品视频免费观看| 亚洲另类在线制服丝袜| 欧美男人的天堂一二区| 日韩av午夜在线观看| 精品精品欲导航| 成人在线一区二区三区| 久久久99久久精品欧美| av成人动漫在线观看| 亚洲精品成人在线| 在线观看91av| 国产精品自在欧美一区| 国产精品乱人伦| 欧美日韩在线观看一区二区| 日日摸夜夜添夜夜添国产精品| 成人激情av网| 亚洲尤物视频在线| 欧美成人三级电影在线| av不卡在线观看| 日本美女一区二区三区视频| 国产亚洲综合色| 福利一区福利二区| 一区二区三区在线观看视频| 欧美日韩国产片| 国产一区二区在线影院| 一区二区三区在线视频观看58| 成人在线视频首页| 午夜伦欧美伦电影理论片| 欧美精品一区二区三区四区| 91丨porny丨最新| 蜜臀av在线播放一区二区三区| 色激情天天射综合网| 麻豆精品新av中文字幕| 久久这里只有精品视频网| 在线视频亚洲一区| 丁香五精品蜜臀久久久久99网站 | 国产一区二三区好的| 国产精品乱人伦中文| 日韩一级成人av| 一本色道久久综合精品竹菊| 精品在线播放免费| 一区二区三区四区蜜桃| 久久久午夜精品| 欧美精品在线一区二区| 成人网男人的天堂| 蜜桃视频第一区免费观看| 一区二区三区四区精品在线视频| 成人免费毛片片v| 日韩av一级片| 亚洲一区电影777| 中文字幕一区二区三区不卡| 26uuu成人网一区二区三区| 国产成人综合视频| 琪琪一区二区三区| 视频在线观看一区| 亚洲v日本v欧美v久久精品| 亚洲免费av观看| 国产精品国产三级国产a| 精品国产区一区| 日韩片之四级片| 91精品国产色综合久久ai换脸 | 成人的网站免费观看| 一区二区三区毛片| 亚洲欧美中日韩| 国产精品麻豆99久久久久久| 国产偷国产偷亚洲高清人白洁| 成人av午夜影院| eeuss国产一区二区三区| 一本到一区二区三区| 久久亚洲一级片| 日韩欧美国产麻豆| 日韩一级成人av| 日韩美女视频一区二区在线观看| 亚洲人一二三区| 中文字幕制服丝袜一区二区三区| 色综合天天综合网天天狠天天| 亚洲在线中文字幕| 中文av字幕一区| 国产精品全国免费观看高清| 国产精品的网站| 亚洲日本va午夜在线影院| 亚洲裸体xxx| 亚洲乱码国产乱码精品精可以看| 91精品国产综合久久小美女| 欧美日韩国产系列| 日韩一区二区视频在线观看| 日韩精品中文字幕在线一区| 日韩午夜精品视频| 久久九九影视网| 国产精品久久久久久久浪潮网站 | 蜜桃精品视频在线观看| 日本午夜精品视频在线观看| 日日摸夜夜添夜夜添亚洲女人| 久久女同性恋中文字幕| 欧美激情在线观看视频免费| 亚洲欧美在线观看| 亚洲成人午夜电影| 麻豆91在线观看| 成人午夜免费电影| 欧美午夜精品一区| 欧美成人三级在线| 91麻豆精品91久久久久同性| 91精品国产免费| 中文字幕日韩一区| 韩国欧美国产1区| 欧美日韩免费电影| 国产精品美女久久久久久 | 国产精品一区二区久久不卡| 99在线精品免费| 欧美成人三级在线| 亚洲国产精品久久人人爱| 国产69精品久久久久777| 678五月天丁香亚洲综合网| 中文在线资源观看网站视频免费不卡 | 欧美日韩高清一区二区不卡| 国产人成亚洲第一网站在线播放| 欧美变态凌虐bdsm| 亚洲人成亚洲人成在线观看图片 | 日韩av中文字幕一区二区| 成人高清在线视频| 日韩精品一区二| 天天操天天色综合| 91福利国产精品| 国产精品美女久久久久久久久久久 | 精品一区二区综合| 欧美狂野另类xxxxoooo| 亚洲摸摸操操av| 99视频国产精品| 欧美经典一区二区| 免费一级片91| 欧美一级一区二区| 婷婷综合另类小说色区| 色美美综合视频| 亚洲精品亚洲人成人网| 成人app下载| 欧美高清在线精品一区| 国产一区二区三区免费观看| 欧美日本视频在线| 亚洲一线二线三线久久久| 91视频.com| 亚洲男人的天堂在线观看| 97精品国产97久久久久久久久久久久| 99久久99久久免费精品蜜臀| 国产欧美一区二区三区沐欲| 麻豆成人免费电影| 日韩美一区二区三区| 韩国三级中文字幕hd久久精品| 97久久久精品综合88久久| 国产精品欧美综合在线| 岛国精品在线播放| 国产精品色哟哟网站| 成人免费毛片aaaaa**| 国产精品青草久久| 色综合天天综合色综合av| 亚洲精品久久嫩草网站秘色| 色婷婷亚洲婷婷| 午夜激情综合网| 精品国产一区二区三区四区四| 国产精品灌醉下药二区| av电影在线观看一区| 国产精品麻豆一区二区 | 亚洲欧美日韩成人高清在线一区| 水蜜桃久久夜色精品一区的特点| 激情偷乱视频一区二区三区| 亚洲精品在线观看网站| 国产一区二区电影| 国产精品免费视频网站| 日本高清无吗v一区| 日韩不卡一区二区| 久久婷婷国产综合精品青草| 成人国产电影网| 亚欧色一区w666天堂| 欧美一级国产精品| 国产大片一区二区| 亚洲免费看黄网站| 欧美哺乳videos| 91小宝寻花一区二区三区| 亚洲午夜久久久久|