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

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

?? ssl.c

?? OpenVPN is a robust and highly flexible tunneling application that uses all of the encryption, authe
?? C
?? 第 1 頁 / 共 5 頁
字號:
	    }	  /* Reliable buffer to outgoing TCP/UDP (send up to CONTROL_SEND_ACK_MAX ACKs	     for previously received packets) */	  if (!to_link->len && reliable_can_send (ks->send_reliable))	    {	      int opcode;	      struct buffer b;	      buf = reliable_send (ks->send_reliable, &opcode);	      ASSERT (buf);	      b = *buf;	      INCR_SENT;	      write_control_auth (session, ks, &b, to_link_addr, opcode,				  CONTROL_SEND_ACK_MAX, true);	      *to_link = b;	      active = true;	      state_change = true;	      msg (D_TLS_DEBUG, "Reliable -> TCP/UDP");	      break;	    }#ifndef TLS_AGGREGATE_ACK	  /* Send 1 or more ACKs (each received control packet gets one ACK) */	  if (!to_link->len && !reliable_ack_empty (ks->rec_ack))	    {	      buf = &ks->ack_write_buf;	      ASSERT (buf_init (buf, FRAME_HEADROOM (&multi->opt.frame)));	      write_control_auth (session, ks, buf, to_link_addr, P_ACK_V1,				  RELIABLE_ACK_SIZE, false);	      *to_link = *buf;	      active = true;	      state_change = true;	      msg (D_TLS_DEBUG, "Dedicated ACK -> TCP/UDP");	      break;	    }#endif	  /* Write incoming ciphertext to TLS object */	  buf = reliable_get_buf_sequenced (ks->rec_reliable);	  if (buf)	    {	      int status = 0;	      if (buf->len)		{		  status = key_state_write_ciphertext (multi, ks, buf);		  if (status == -1)		    {		      msg (D_TLS_ERRORS,			   "TLS Error: Incoming Ciphertext -> TLS object write error");		      goto error;		    }		}	      else		{		  status = 1;		}	      if (status == 1)		{		  reliable_mark_deleted (ks->rec_reliable, buf, true);		  state_change = true;		  msg (D_TLS_DEBUG, "Incoming Ciphertext -> TLS");		}	    }	  /* Read incoming plaintext from TLS object */	  buf = &ks->plaintext_read_buf;	  if (!buf->len)	    {	      int status;	      ASSERT (buf_init (buf, 0));	      status = key_state_read_plaintext (multi, ks, buf, PLAINTEXT_BUFFER_SIZE);	      update_time ();	      if (status == -1)		{		  msg (D_TLS_ERRORS, "TLS Error: TLS object -> incoming plaintext read error");		  goto error;		}	      if (status == 1)		{		  state_change = true;		  msg (D_TLS_DEBUG, "TLS -> Incoming Plaintext");		}	    }	  /* Send Key */	  buf = &ks->plaintext_write_buf;	  if (!buf->len && ((ks->state == S_START && !session->opt->server) ||			    (ks->state == S_GOT_KEY && session->opt->server)))	    {	      const int optlen = strlen (session->opt->local_options) + 1;	      if (session->opt->key_method == 1)		{		  struct key key;		  ASSERT (buf_init (buf, 0));		  generate_key_random (&key, &session->opt->key_type);		  if (!check_key (&key, &session->opt->key_type))		    {		      msg (D_TLS_ERRORS, "TLS Error: Bad encrypting key generated");		      goto error;		    }		  write_key (&key, &session->opt->key_type, buf);		  init_key_ctx (&ks->key.encrypt, &key, &session->opt->key_type,				DO_ENCRYPT, "Data Channel Encrypt");		  CLEAR (key);		  /* send local options string */		  ASSERT (buf_write (buf, session->opt->local_options, optlen));		}	      else		{		  ASSERT (session->opt->key_method == 2);		  ASSERT (buf_init (buf, 0));		  /* write a uin32 0 */		  ASSERT (buf_write_u32 (buf, 0));		  /* write key_method + flags */		  ASSERT (buf_write_u8 (buf, (session->opt->key_method & KEY_METHOD_MASK)					| (session->opt->pass_config_info ? TLS_PASS_CONFIG_INFO : 0)));		  /* write key source material */		  key_source2_randomize_write (ks->key_src, buf, session->opt->server);		  /* write options string */		  ASSERT (optlen >= 0 && optlen < 65536);		  ASSERT (buf_write_u16 (buf, optlen));		  ASSERT (buf_write (buf, session->opt->local_options, optlen));		  if (session->opt->server)		    {		      if (!generate_key_expansion (&ks->key,						   &session->opt->key_type,						   ks->key_src,						   &ks->session_id_remote,						   &session->session_id,						   true))			goto error;		      		      CLEAR (*ks->key_src);		    }		}	      state_change = true;	      msg (D_TLS_DEBUG_MED, "STATE S_SENT_KEY");	      ks->state = S_SENT_KEY;	    }	  /* Receive Key */	  buf = &ks->plaintext_read_buf;	  if (buf->len	      && ((ks->state == S_SENT_KEY && !session->opt->server)		  || (ks->state == S_START && session->opt->server)))	    {	      if (session->opt->key_method == 1)		{		  int status;		  struct key key;		  status = read_key (&key, &session->opt->key_type, buf);		  if (status == -1)		    {		      msg (D_TLS_ERRORS,			   "TLS Error: Error reading data channel key from plaintext buffer");		      goto error;		    }		  if (!check_key (&key, &session->opt->key_type))		    {		      msg (D_TLS_ERRORS, "TLS Error: Bad decrypting key received from peer");		      goto error;		    }		  ASSERT (buf->len > 0);		  /* compare received remote options string		     with our locally computed options string */		  if (!session->opt->disable_occ &&		      !options_cmp_equal (BPTR (buf),					  session->opt->remote_options, buf->len))		    {		      options_warning (BPTR (buf),				       session->opt->remote_options, buf->len);		    }		  buf_clear (buf);		  if (status == 1)		    {		      init_key_ctx (&ks->key.decrypt, &key, &session->opt->key_type,				    DO_DECRYPT, "Data Channel Decrypt");		    }		  CLEAR (key);		  if (status == 0)		    goto error;		}	      else		{		  int key_method_flags;		  int status;		  int optlen;		  ASSERT (session->opt->key_method >= 2);		  status = 0;		  		  /* discard leading uint32 */		  ASSERT (buf_advance (buf, 4));		  /* get key method */		  key_method_flags = buf_read_u8 (buf);		  if ((key_method_flags & KEY_METHOD_MASK) != 2)		    {		      msg (D_TLS_ERRORS,			   "TLS ERROR: Unknown key_method/flags=%d received from remote host",			   key_method_flags);		      goto error;		    }		  /* verify TLS_PASS_CONFIG_INFO consistency between peers */		  if (((key_method_flags & TLS_PASS_CONFIG_INFO) != 0) 		      ^ (session->opt->pass_config_info == true))		    {		      msg (D_TLS_ERRORS, "TLS ERROR: Inconsistent options between peers regarding configuration info exchange over the control channel");		      goto error;		    }		  		  /* get key source material (not actual keys yet) */		  if (!key_source2_read (ks->key_src, buf, session->opt->server))		    {		      msg (D_TLS_ERRORS, "TLS Error: Error reading remote data channel key source entropy from plaintext buffer");		      goto error;		    }		  /* get options */		  optlen = buf_read_u16 (buf);		  if (optlen < 0 || optlen >= 65536)		    {		      msg (D_TLS_ERRORS, "TLS Error: Bad options string length: %d", optlen);		      goto error;		    }		  if (BLEN(buf) < optlen)		    {		      msg (D_TLS_ERRORS, "TLS Error: Options string truncation");		      goto error;		    }		  /* check options consistency */		  if (!session->opt->disable_occ &&		      !options_cmp_equal (BPTR (buf),					  session->opt->remote_options, buf->len))		    {		      options_warning (BPTR (buf),				       session->opt->remote_options, buf->len);		    }		  buf_clear (buf);		  if (!session->opt->server)		    {		      if (!generate_key_expansion (&ks->key,						   &session->opt->key_type,						   ks->key_src,						   &session->session_id,						   &ks->session_id_remote,						   false))			goto error;		      		      CLEAR (*ks->key_src);		    }		}	      state_change = true;	      msg (D_TLS_DEBUG_MED, "STATE S_GOT_KEY");	      ks->state = S_GOT_KEY;	    }	  /* Write outgoing plaintext to TLS object */	  buf = &ks->plaintext_write_buf;	  if (buf->len)	    {	      int status = key_state_write_plaintext (multi, ks, buf);	      if (status == -1)		{		  msg (D_TLS_ERRORS,		       "TLS ERROR: Outgoing Plaintext -> TLS object write error");		  goto error;		}	      if (status == 1)		{		  state_change = true;		  msg (D_TLS_DEBUG, "Outgoing Plaintext -> TLS");		}	    }	  /* Outgoing Ciphertext to reliable buffer */	  if (ks->state >= S_START)	    {	      buf = reliable_get_buf_output_sequenced (ks->send_reliable);	      if (buf)		{		  int status = key_state_read_ciphertext (multi, ks, buf, PAYLOAD_SIZE_DYNAMIC (&multi->opt.frame));		  if (status == -1)		    {		      msg (D_TLS_ERRORS,			   "TLS Error: Ciphertext -> reliable TCP/UDP transport read error");		      goto error;		    }		  if (status == 1)		    {		      reliable_mark_active_outgoing (ks->send_reliable, buf, P_CONTROL_V1);		      INCR_GENERATED;		      state_change = true;		      msg (D_TLS_DEBUG, "Outgoing Ciphertext -> Reliable");		    }		}	    }	}      //mutex_cycle (multi->mutex);    }  while (state_change);  update_time ();#ifdef TLS_AGGREGATE_ACK  /* Send 1 or more ACKs (each received control packet gets one ACK) */  if (!to_link->len && !reliable_ack_empty (ks->rec_ack))    {      buf = &ks->ack_write_buf;      ASSERT (buf_init (buf, FRAME_HEADROOM (&multi->opt.frame)));      write_control_auth (session, ks, buf, to_link_addr, P_ACK_V1,			  RELIABLE_ACK_SIZE, false);      *to_link = *buf;      active = true;      state_change = true;      msg (D_TLS_DEBUG, "Dedicated ACK -> TCP/UDP");    }#endif  /* When should we wake up again? */  {    if (ks->state >= S_INITIAL)      {	compute_earliest_wakeup (wakeup,	  reliable_send_timeout (ks->send_reliable));		if (ks->must_negotiate)	  compute_earliest_wakeup (wakeup, ks->must_negotiate - now);      }    if (ks->established && session->opt->renegotiate_seconds)      compute_earliest_wakeup (wakeup,        ks->established + session->opt->renegotiate_seconds - now);    /* prevent event-loop spinning by setting minimum wakeup of 1 second */    if (*wakeup <= 0)      {	*wakeup = 1;	/* if we had something to send to remote, but to_link was busy,	   let caller know we need to be called again soon */	active = true;      }    msg (D_TLS_DEBUG, "TLS: tls_process: timeout set to %d", *wakeup);    gc_free (&gc);    return active;  }error:  ks->state = S_ERROR;  msg (D_TLS_ERRORS, "TLS Error: TLS handshake failed");  INCR_ERROR;  gc_free (&gc);  return false;}#undef ks#undef ks_lame/* * Called at the top of the event loop in openvpn.c. * * Basically decides if we should call tls_process for * the active or untrusted sessions. */booltls_multi_process (struct tls_multi *multi,		   struct buffer *to_link,		   struct sockaddr_in *to_link_addr,		   struct link_socket_info *to_link_socket_info,		   interval_t *wakeup){  struct gc_arena gc = gc_new ();  int i;  bool active = false;  /*   * Process each session object having state of S_INITIAL or greater,   * and which has a defined remote IP addr.   */  for (i = 0; i < TM_SIZE; ++i)    {      struct tls_session *session = &multi->session[i];      struct key_state *ks = &session->key[KS_PRIMARY];      struct key_state *ks_lame = &session->key[KS_LAME_DUCK];      /* set initial remote address */      if (i == TM_ACTIVE && ks->state == S_INITIAL &&	  addr_defined (&to_link_socket_info->lsa->actual))	ks->remote_addr = to_link_socket_info->lsa->actual;      msg (D_TLS_DEBUG,	   "TLS: tls_multi_process: i=%d state=%s, mysid=%s, stored-sid=%s, stored-ip=%s",	   i,	   state_name (ks->state),	   session_id_print (&session->session_id, &gc),	   session_id_print (&ks->session_id_remote, &gc),	   print_sockaddr (&ks->remote_addr, &gc));      if (ks->state >= S_INITIAL && addr_defined (&ks->remote_addr))	{	  update_time ();	  if (tls_process (multi, session, to_link, to_link_addr,			   to_link_socket_info, wakeup))	    active = true;	  /*	   * If tls_process hits an error:	   * (1) If the session has an unexpired lame duck key, preserve it.	   * (2) Reinitialize the session.	   */	  if (ks->state == S_ERROR)	    {	      ++multi->n_errors;	      if (i == TM_ACTIVE		  && ks_lame->state >= S_ACTIVE		  && !multi->opt.single_session)		move_session (multi, TM_LAME_DUCK, TM_ACTIVE, true);	      else		reset_session (multi, session);	    }	}      //mutex_cycle (multi->mutex);    }  update_time ();  /*   * If lame duck session expires, kill it.   */  if (lame_duck_must_die (&multi->session[TM_LAME_DUCK], wakeup)) {    tls_session_free (&multi->session[TM_LAME_DUCK], true);    msg (D_TLS_DEBUG_LOW, "TLS: tls_multi_process: killed expiring key");  }  /*   * If untrusted session achieves TLS authentication,   * move it to active session, usurping any prior session.   */  if (DECRYPT_KEY_ENABLED (multi, &multi->session[TM_UNTRUSTED].key[KS_PRIMARY])) {    move_session (multi, TM_ACTIVE, TM_UNTRUSTED, true);    msg (D_TLS_DEBUG_LOW, "TLS: tls_multi_process: untrusted session promoted to trusted");  }  gc_free (&gc);  return active;}/* * Send a payload over the TLS control channel. * Called externally. */booltls_send_payload (struct tls_multi *multi,		  const struct buffer *buf){  struct tls_session *session;  struct key_state *ks;  bool ret = false;  ASSERT (multi);  session = &multi->session[TM_ACTIVE];  ks = &session->key[KS_PRIMARY];  if (ks->state >= S_ACTIVE && !BLEN (&ks->plaintext_write_buf))    {      if (buf_copy (&ks->plaintext_write_buf, buf))	ret = true;    }  return ret;}booltls_rec_payload (struct tls_multi *multi,		 struct buffer *buf){  struct tls_session *session;  struct key_state *ks;  bool ret = false;  ASSERT (multi);  session = &multi->ses

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久蜜臀粉嫩 | 懂色av噜噜一区二区三区av| 久久综合成人精品亚洲另类欧美 | 尤物视频一区二区| 福利91精品一区二区三区| 国产丝袜欧美中文另类| 欧洲在线/亚洲| 久久99国产精品久久99果冻传媒| 亚洲激情成人在线| 欧美三级中文字幕| 国产精品综合av一区二区国产馆| 亚洲图片激情小说| 一区二区高清视频在线观看| 欧美性大战久久| 国产乱码字幕精品高清av| 亚洲精品中文在线影院| 久久久精品综合| 91首页免费视频| 国产精品77777| 奇米一区二区三区av| 中文字幕在线不卡一区二区三区 | 国产麻豆精品视频| 亚洲午夜久久久久中文字幕久| 精品成人一区二区三区四区| 亚洲精品综合在线| 欧美一区二区视频在线观看| 成人a免费在线看| 国产永久精品大片wwwapp| 亚洲午夜精品一区二区三区他趣| 欧美一区欧美二区| 欧美伦理视频网站| 国产91精品久久久久久久网曝门| 日韩视频免费直播| 欧美日韩亚洲综合在线 | 中文字幕一区二区三区不卡在线 | 欧美人体做爰大胆视频| 欧美福利一区二区| 久久综合精品国产一区二区三区 | 亚洲一级片在线观看| 亚洲国产精品嫩草影院| 成人综合婷婷国产精品久久蜜臀| 欧美色老头old∨ideo| 在线不卡一区二区| 国产精品素人一区二区| 亚洲精品免费播放| 国产永久精品大片wwwapp| 成人av在线播放网站| 欧美一级理论性理论a| 国产精品久久久久久一区二区三区| 午夜伊人狠狠久久| 成人午夜电影小说| 免费在线观看一区| 色婷婷综合久久久久中文| 日韩一级二级三级精品视频| 国产日本欧洲亚洲| 五月开心婷婷久久| 在线观看国产精品网站| 亚洲欧洲日韩综合一区二区| 免费观看在线色综合| 亚洲综合偷拍欧美一区色| 国产.精品.日韩.另类.中文.在线.播放| 欧美日韩亚洲综合一区二区三区| 国产精品沙发午睡系列990531| 亚洲6080在线| 欧美三级中文字| 亚洲成人精品一区| a在线欧美一区| 亚洲精品伦理在线| 亚洲婷婷在线视频| 久久综合999| 亚洲男同1069视频| 日韩国产在线观看一区| 99视频超级精品| 久久久久久久久久久久久女国产乱 | 亚洲大片精品永久免费| av日韩在线网站| 中文字幕日韩av资源站| 在线观看91精品国产入口| 丝袜美腿亚洲一区| 精品久久久久久久久久久久久久久 | 日本亚洲视频在线| 欧美大片一区二区| av不卡在线观看| 国产精品久久久久久久浪潮网站| 91麻豆免费观看| 美女视频黄免费的久久| 国产免费成人在线视频| 欧美性感一区二区三区| 国产精品夜夜爽| 亚洲欧美激情插 | 成人毛片在线观看| 一区二区三区美女| 欧美va在线播放| 91在线高清观看| 毛片av一区二区三区| 91色porny蝌蚪| 国产精品一二二区| 免费在线观看成人| 免费在线观看一区二区三区| 不卡的电影网站| 韩国精品久久久| 国产成人在线观看| 亚洲一区二区三区免费视频| 久久久久国产精品麻豆| www国产亚洲精品久久麻豆| 欧美一级片在线看| 91精品免费在线| 亚洲精品一区二区精华| 欧美高清hd18日本| 17c精品麻豆一区二区免费| 国内一区二区在线| 99精品黄色片免费大全| 日韩免费视频一区二区| 久久免费看少妇高潮| 最新成人av在线| 日韩国产精品大片| 亚洲1区2区3区视频| 亚洲综合免费观看高清完整版在线| 欧美性一区二区| 国产电影一区在线| 成人av网站在线观看免费| 国产69精品久久777的优势| 国产一区 二区| 91网站在线观看视频| 日韩色在线观看| 亚洲欧美怡红院| 日韩精品高清不卡| av一区二区三区黑人| 欧美高清视频一二三区| 国产精品成人免费在线| 日本不卡在线视频| 欧美午夜片在线看| 久久一二三国产| 日本伊人色综合网| 欧美日韩精品久久久| 亚洲欧洲性图库| 国产v综合v亚洲欧| 欧美一级艳片视频免费观看| 一区二区三区久久久| 成人动漫精品一区二区| 亚洲精品在线网站| 美女久久久精品| 欧美自拍偷拍一区| 国产精品第五页| 成人激情开心网| 国产精品卡一卡二卡三| 国产91精品欧美| 亚洲欧美色图小说| 成人av手机在线观看| 欧美日韩国产不卡| 日韩成人一区二区三区在线观看| 国产高清成人在线| 欧美日韩一区二区不卡| 久久综合色鬼综合色| 国产乱一区二区| 欧美激情自拍偷拍| 精品一区二区精品| xfplay精品久久| 丁香激情综合国产| 亚洲一卡二卡三卡四卡五卡| av综合在线播放| 亚洲一区二区三区视频在线| 欧美挠脚心视频网站| 久久99热国产| 一区视频在线播放| 99久久精品费精品国产一区二区| 国产精品亲子伦对白| 欧美最新大片在线看| 国产综合久久久久影院| 国产乱码精品一区二区三区忘忧草 | 日韩三级免费观看| 精品国产一区二区三区不卡| 久久99精品久久久久久国产越南| 精品成人私密视频| 色综合久久久久久久久| 另类调教123区| 伊人性伊人情综合网| 26uuu国产在线精品一区二区| 成人午夜在线播放| 日韩成人午夜精品| 亚洲午夜久久久久| 国产精品久久午夜| 欧美日本在线观看| 91久久精品一区二区三| 成人免费电影视频| 国产乱码字幕精品高清av| 亚洲日本免费电影| 国产欧美1区2区3区| 日韩精品一区二区三区四区 | 6080yy午夜一二三区久久| 成人污视频在线观看| 精品一区二区久久久| 蜜桃免费网站一区二区三区| 日韩和欧美一区二区三区| 亚洲一区二区三区在线看| 久久蜜桃一区二区| 亚洲精品一区二区三区四区高清 | 成人不卡免费av| 国产精品一区久久久久| 成人午夜av影视|