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

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

?? sslserversocket.cpp

?? 實現了數字證書的制作、SSL安全通訊、加解密操作等功能
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

	SOCKADDR_IN client;
	int iAddrSize=sizeof(client);

	m_pSocket = new CSslServerSocket();//用于連接

	m_pSocket->m_pList=m_pList;
	m_pSocket->m_pObSock=m_pObSock;//公用一個鏈表
	m_pSocket->m_type=m_type;
	m_pSocket->m_pConnection=m_pConnection;

	if(Accept(*m_pSocket,(SOCKADDR *)&client,&iAddrSize))
	{
		CString str;
		str.Format("客戶 %s TCP接入成功,等待握手......",inet_ntoa(client.sin_addr));
		m_pList->AddMsg(str,M_WARING);
		m_pSocket->m_Ssl = SSL_new (m_Ctx); 
		SSL_set_accept_state(m_pSocket->m_Ssl);
		sbio=BIO_new_socket(m_pSocket->m_hSocket,BIO_NOCLOSE);
		SSL_set_bio(m_pSocket->m_Ssl,sbio,sbio);
		
		for(;;)
		{
			if ((err = SSL_accept (m_pSocket->m_Ssl)) <= 0)
			{
				if (BIO_sock_should_retry(err))
				{
					continue;
				}
				int verify_error=SSL_get_verify_result(m_pSocket->m_Ssl);
				if (verify_error != X509_V_OK)//succeeded or no peer certificate was presented
				{
					sprintf(out,"verify error:%s\n",
						X509_verify_cert_error_string(verify_error));
					m_pList->AddMsg(out,M_ERROR);

				}
				else
				{
					m_pList->AddMsg("客戶端沒有證書,握手結束",M_WARING);
					m_pSocket->Close();
					delete m_pSocket;
					m_pSocket=NULL;
				}
				return ;
			}
			else
			{
				m_pSocket->AsyncSelect(FD_READ|FD_CLOSE);//選擇讀事件(OnReceive)
				str.Format("握手結束,客戶%s接入成功",inet_ntoa(client.sin_addr));
				GetPeerInfo(m_pSocket->m_Ssl,&m_CLIENTINFO);
				m_pList->AddMsg(str,M_WARING);
				m_pObSock->AddTail(m_pSocket);
				break;
			}
		}
		
	}	
	else
	{	
		m_pList->AddMsg("TCP連接失敗",M_ERROR);
		m_pSocket->Close();
		delete m_pSocket;
		m_pSocket=NULL;
	}					
	CAsyncSocket::OnAccept(nErrorCode);
}

void CSslServerSocket::OnClose(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
	CString clientIp;
	unsigned int port;
	POSITION pos;
	GetPeerName(clientIp,port);//得到用戶ip,port
	clientIp+="已經斷開連接!";
	clientIp="客戶"+clientIp;
	m_pList->AddMsg(clientIp,M_WARING);

	pos=m_pObSock->Find(this);
	if(pos) m_pObSock->RemoveAt(pos);//客戶端關閉

	if(m_Ssl!=NULL)
	{
		SSlShouDown();
	}
	delete this;
	CAsyncSocket::OnClose(nErrorCode);
}

int CSslServerSocket::SSlSend(char *buf, int len)
{
	if(m_Ssl==NULL)
		return -1;
	int k=0;//接收數量
	int offect=0;//偏移
	for(;0!=len;)//maximum record size of 16kB for SSLv3/TLSv1
	{
		k = SSL_write(m_Ssl,buf+offect,len);
		if (k <= 0)
		{
			if (BIO_sock_should_retry(k))
			{
				Sleep(100);
				continue;//重試
			}
			return k;//出錯
		}
		offect+=k;
		len-=k;
	}
	AsyncSelect(FD_READ|FD_CLOSE);
	return offect;
}

int CSslServerSocket::SSlReceive(char *buf, int len)
{
	int k=0;
	do
	{
		for(;;)
		{
			k = SSL_read(m_Ssl,buf,len);
			if (k <= 0)
			{
				if (BIO_sock_should_retry(k))
				{
					Sleep(100);
					continue;//重試
				}
				return k;//錯誤退出
			}
			break;//成功
		}
	}while (SSL_pending(m_Ssl));

	return k;
}


void CSslServerSocket::DisplayError(_com_error &e)
{
	CString msgText;
	_bstr_t bstrSource(e.Source());
	_bstr_t bstrDescription(e.Description());
	
	msgText.Format("連接數據庫錯誤\n錯誤代碼 = %08lx\n", e.Error());
	msgText += " Msg: ";
	msgText += e.ErrorMessage();
	msgText += "\n 來源: ";
	msgText += bstrSource;
	msgText += "\n 內容: ";
	msgText += bstrDescription;
	m_pList->AddMsg(msgText,M_ERROR);

}

void CSslServerSocket::OnReceive(int nErrorCode) //與客戶端交互
{
	// TODO: Add your specialized code here and/or call the base class
	if(m_type==0)//www
	{
		char buf[1024]={0};
		SSlReceive(buf,1024);
		AsyncSelect(FD_WRITE|FD_CLOSE);
	}
	else//ra
	{
		stuCA CA;//接收用結構
		if(SSlReceive((char *)&CA,sizeof(stuCA))<=0)//對方已經關閉
			return;
		stuRA RA;//用于發送的結構
		
		_variant_t Affected;//影響行數
		_RecordsetPtr m_pRecordset;
		m_pRecordset.CreateInstance(_uuidof(Recordset));
		
		switch(CA.Type)
		{
		case Input://錄入證書
			{
				stuCERT sCERT;
				CString strSQL;
				if(SSlReceive((char * )&sCERT,sizeof(sCERT))<0)//接收客戶信息
					return;
				char * p=(char *)&sCERT;
				VARIANT varBLOB;
				SAFEARRAY FAR *psa; 
				SAFEARRAYBOUND rgsabound[1];
				SYSTEMTIME tm;
				GetLocalTime(&tm);
				CString time;
				time.Format("%d-%d-%d", tm.wYear,tm.wMonth,tm.wDay);
				
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}		
					m_pRecordset->Open("CERTLIST",_variant_t((IDispatch*)m_pConnection,true),
						adOpenDynamic,adLockOptimistic,adCmdTable);//打開表
					
					m_pRecordset->AddNew(); ///添加新記錄
					rgsabound[0].lLbound = 0;
					rgsabound[0].cElements = sizeof(stuCERT);
					psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///創建SAFEARRAY對象
					for (long i =0;i<sizeof(stuCERT); i++)
					{
						SafeArrayPutElement (psa, &i, p++); ///保存二進制數據
					}
					// 由于Variant沒有SafeArray的構造函數,所以手工設置Variant的數據類型和值。
					varBLOB.vt = VT_ARRAY | VT_UI1;
					varBLOB.parray = psa; 
					m_pRecordset->Fields->GetItem("USERINFO")->AppendChunk(varBLOB); ///加入數據
					SafeArrayDestroy(psa);
					m_pRecordset->Fields->GetItem("INPUTTIME")->PutValue(_variant_t(time));
					_variant_t UserID=m_pRecordset->Fields->GetItem("ID")->Value;//得到id
					m_pRecordset->Update(); //更新
					RA.ID=UserID.lVal;//ID
					RA.Type=Input;//操作類型
					RA.State=TRUE;//操作狀態
					SSlSend((char *)&RA,sizeof(RA));
				}
				catch (_com_error &e)
				{
					DisplayError(e);
					RA.Type=Input;//操作類型
					RA.State=FALSE;//操作狀態
					SSlSend((char *)&RA,sizeof(RA));
				}
				break;
			}
		case FInputD://待審核
		case FAuditD://待制作
		case FMadeD://有效
		case FRevokeD://無效
			{
				try
				{
					if (m_pConnection == NULL)
					{
						return;
					}				
					m_pRecordset->Open((_bstr_t)CA.SQL,(IDispatch*)m_pConnection,adOpenStatic,//靜態游標
						adLockOptimistic,adCmdText); 
					m_Rcount=m_pRecordset->RecordCount;//紀錄條數--靜態游標有效
					if(!m_pRecordset->adoEOF)//存在紀錄
					{
						for(int index=0;!m_pRecordset->adoEOF;m_pRecordset->MoveNext(),index++)//遍歷所有記錄
						{
							//得到用戶ID,個體信息
							_variant_t	varBLOB;
							varBLOB = m_pRecordset->Fields->GetItem("USERINFO")->GetChunk(sizeof(RA.SUBJECT));
							if(varBLOB.vt == (VT_ARRAY | VT_UI1))
							{
								char *pBuf = NULL;
								SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
								memcpy(&RA.SUBJECT,pBuf,sizeof(RA.SUBJECT));//個體信息
								SafeArrayUnaccessData(varBLOB.parray);
							}
							
							_variant_t UserID=m_pRecordset->Fields->GetItem("ID")->Value;
							RA.ID=UserID.lVal;//ID
							
							switch(CA.Type)
							{
							case FInputD://查詢代審核
								{
									_bstr_t InputTime=m_pRecordset->Fields->GetItem("INPUTTIME")->Value;
									CString Input=InputTime.copy();
									strcpy(RA.Time,Input);//操作時間
									RA.Type=FInputD;//操作類型
									RA.State=TRUE;//操作狀態
									if(index==0)//第一次發送總紀錄數
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=1;//KeyL=1 -->總紀錄數
									}
									if(index==m_Rcount-1)//最后一條紀錄(一條紀錄時候m_Rcount=1)
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=-1;
									}
									if(index!=0&&index!=m_Rcount-1)
									{
										RA.CertL=index;//其余發送紀錄數
										RA.KeyL=0;
									}
									break;
									
								}
							case FAuditD://查詢代制作
								{
									_bstr_t AuditTime=m_pRecordset->Fields->GetItem("AUDITIME")->Value;
									CString Audit=AuditTime.copy();
									strcpy(RA.Time,Audit);//操作時間
									RA.Type=FAuditD;//操作類型
									RA.State=TRUE;//操作狀態
									if(index==0)//第一次發送總紀錄數
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=1;//KeyL=1 -->總紀錄數
									}
									if(index==m_Rcount-1)//最后一條紀錄(一條紀錄時候m_Rcount=1)
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=-1;
									}
									if(index!=0&&index!=m_Rcount-1)
									{
										RA.CertL=index;//其余發送紀錄數
										RA.KeyL=0;
									}
									break;
									
								}
							case FMadeD://查詢已經制作
								{
									_bstr_t MadeTime=m_pRecordset->Fields->GetItem("MADETIME")->Value;
									CString Made=MadeTime.copy();
									strcpy(RA.Time,Made);//操作時間
									RA.Type=FMadeD;//操作類型
									RA.State=TRUE;//操作狀態
									if(index==0)//第一次發送總紀錄數
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=1;//KeyL=1 -->總紀錄數
									}
									if(index==m_Rcount-1)//最后一條紀錄(一條紀錄時候m_Rcount=1)
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=-1;
									}
									if(index!=0&&index!=m_Rcount-1)
									{
										RA.CertL=index;//其余發送紀錄數
										RA.KeyL=0;
									}
									break;
									
								}
							case FRevokeD: //查詢已經作廢
								{
									_bstr_t DelTime=m_pRecordset->Fields->GetItem("REVOKETIME")->Value;
									CString Del=DelTime.copy();
									strcpy(RA.Time,Del);//操作時間
									RA.Type=FRevokeD;//操作類型
									RA.State=TRUE;//操作狀態
									if(index==0)//第一次發送總紀錄數
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=1;//KeyL=1 -->總紀錄數
									}
									if(index==m_Rcount-1)//最后一條紀錄(一條紀錄時候m_Rcount=1)
									{
										RA.CertL=m_Rcount;//總紀錄數
										RA.KeyL=-1;
									}
									if(index!=0&&index!=m_Rcount-1)
									{
										RA.CertL=index;//其余發送紀錄數
										RA.KeyL=0;
									}
									break;
								}
							default:
								{
									m_pList->AddMsg("未知命令",M_ERROR);
									break;
								}
							}
							if(SSlSend((char *)&RA,sizeof(RA))<=0)//發送
								break;
					}
				}
				else//紀錄為0
				{
					switch(CA.Type)
					{
					case FInputD://查詢代審核
						{
							RA.Type=FInputD;//操作類型
							RA.State=TRUE;//操作狀態
							RA.KeyL=1;
							break;
						}
					case FAuditD://查詢代制作
						{
							RA.Type=FAuditD;//操作類型
							RA.State=TRUE;//操作狀態
							RA.KeyL=1;
							break;
						}
					case FMadeD://查詢已經制作
						{
							RA.Type=FMadeD;//操作類型
							RA.State=TRUE;//操作狀態
							RA.KeyL=1;
							break;
						}
					case FRevokeD://查詢已經作廢
						{
							RA.Type=FRevokeD;//操作類型
							RA.State=TRUE;//操作狀態
							RA.KeyL=1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品伦理在线| 国产精品一区二区不卡| 国产综合久久久久久久久久久久 | 精品国产亚洲在线| 综合中文字幕亚洲| 国产一区二区免费看| 欧美日韩国产精选| 亚洲精品成人精品456| 粉嫩一区二区三区在线看| 欧美大黄免费观看| 天天av天天翘天天综合网 | 国产精品一区二区三区乱码| 色欧美88888久久久久久影院| 久久久久久综合| 久久97超碰色| 日韩欧美国产wwwww| 亚洲国产你懂的| 日本二三区不卡| 成人欧美一区二区三区| 国产不卡高清在线观看视频| 欧美成人vps| 免费在线观看一区| 欧美岛国在线观看| 精彩视频一区二区| 欧美va亚洲va香蕉在线| 日本女人一区二区三区| 91精品国产丝袜白色高跟鞋| 天堂成人免费av电影一区| 欧美日韩一区二区欧美激情 | 国产欧美一区二区在线| 国产精品一区二区男女羞羞无遮挡| 欧美一区二区高清| 精品一区二区三区久久久| 精品999久久久| 国产麻豆欧美日韩一区| 中文字幕二三区不卡| 成人av小说网| 一区二区三区资源| 欧美视频一区二区三区| 偷拍一区二区三区| 精品va天堂亚洲国产| 国产一区二区三区日韩| 国产精品久久久久影院| 91香蕉国产在线观看软件| 亚洲精品伦理在线| 在线成人小视频| 九一久久久久久| 欧美激情一区二区三区不卡| 97久久人人超碰| 午夜精品久久久久久久久久| 日韩女优视频免费观看| 国产成都精品91一区二区三| 自拍偷在线精品自拍偷无码专区| 欧美性色欧美a在线播放| 日本视频一区二区三区| 久久久久国产一区二区三区四区| 成人国产精品免费网站| 亚洲欧美激情插| 6080日韩午夜伦伦午夜伦| 精品一区二区综合| 亚洲人成小说网站色在线| 91精品国产欧美日韩| 国产999精品久久久久久绿帽| 国产精品毛片久久久久久| 欧美猛男超大videosgay| 韩国毛片一区二区三区| 亚洲综合一区在线| 欧美不卡一区二区| 91亚洲男人天堂| 韩国三级电影一区二区| 一二三四区精品视频| 久久综合久久久久88| 色94色欧美sute亚洲线路一久| 蜜桃精品在线观看| 亚洲欧洲av色图| 精品美女一区二区三区| 91视频观看视频| 国产一区二区电影| 亚洲国产色一区| 一区在线播放视频| 精品成人免费观看| 欧美日韩成人在线一区| 成人动漫一区二区| 精品一区二区免费看| 一区二区三区不卡在线观看| 久久久久国产精品免费免费搜索| 欧美三级资源在线| 97久久精品人人做人人爽50路| 精品午夜一区二区三区在线观看| 一区二区不卡在线播放| 国产精品美女一区二区三区| 欧美电影免费观看完整版| 欧美午夜精品一区| 色偷偷久久人人79超碰人人澡 | 色噜噜久久综合| 国产成a人无v码亚洲福利| 蜜臀av一区二区在线免费观看 | 亚洲天堂免费看| 国产日韩欧美高清在线| 精品国产亚洲一区二区三区在线观看| 精品视频资源站| 欧美性生交片4| 欧美中文字幕亚洲一区二区va在线 | 欧美高清在线一区| 精品国产电影一区二区| 日韩欧美视频在线| 日韩一区二区三区电影| 欧美日本韩国一区二区三区视频| 色成人在线视频| 色菇凉天天综合网| 欧日韩精品视频| 欧美三区在线视频| 欧美一区二区在线播放| 337p亚洲精品色噜噜噜| 制服视频三区第一页精品| 欧美一区二区视频在线观看 | 欧美手机在线视频| 欧美在线观看一二区| 欧美三级乱人伦电影| 在线观看www91| 欧美二区在线观看| 日韩午夜精品视频| 2014亚洲片线观看视频免费| 久久九九影视网| 最新国产成人在线观看| 亚洲国产另类av| 捆绑调教一区二区三区| 国产成人综合自拍| 99精品视频一区| 欧美精品在线一区二区三区| 日韩视频中午一区| 国产精品久久久久久久久快鸭| 国产精品午夜免费| 一区二区三区在线播放| 日韩**一区毛片| 国产成人av福利| 91福利在线免费观看| 欧美大片日本大片免费观看| 国产精品无圣光一区二区| 亚洲精品欧美激情| 国内一区二区在线| 91丝袜美腿高跟国产极品老师 | 亚洲欧美偷拍另类a∨色屁股| 亚洲一区二区影院| 国内精品视频一区二区三区八戒| 不卡的av电影| 欧美一级片在线看| 综合色中文字幕| 毛片不卡一区二区| 91视频在线看| 精品电影一区二区三区| 亚洲视频在线一区二区| 免费成人在线影院| 91国产免费看| 欧美激情一区在线观看| 日韩av中文字幕一区二区三区| 成人黄色小视频| 日韩三级精品电影久久久| 自拍偷拍国产精品| 国产在线一区观看| 欧美日本国产一区| 综合电影一区二区三区 | 欧美国产日韩亚洲一区| 视频一区二区欧美| 日本精品一区二区三区高清| 亚洲精品在线电影| 日韩精品免费视频人成| 99精品视频中文字幕| 久久久天堂av| 蜜臀av性久久久久蜜臀aⅴ| 色婷婷综合在线| 欧美国产日韩一二三区| 激情伊人五月天久久综合| 欧美日韩久久久一区| 中文字幕视频一区| 粉嫩久久99精品久久久久久夜 | 国产美女在线精品| 欧美一区二区大片| 婷婷综合五月天| 在线观看av不卡| 亚洲日本成人在线观看| 国产经典欧美精品| 亚洲精品一区二区三区福利| 亚洲mv在线观看| 欧美色图激情小说| 亚洲国产精品久久久久婷婷884 | 日韩你懂的在线观看| 首页综合国产亚洲丝袜| 欧美三级蜜桃2在线观看| 中文字幕在线不卡一区二区三区 | 欧美色电影在线| 亚洲国产裸拍裸体视频在线观看乱了| 99麻豆久久久国产精品免费优播| 久久日韩精品一区二区五区| 久草在线在线精品观看| 欧美精品一区二| 精品无人码麻豆乱码1区2区| 精品国产乱码91久久久久久网站| 美国三级日本三级久久99 | 亚洲午夜精品久久久久久久久|