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

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

?? dhodbc.cpp

?? 用于處理證書請求,生成證書的CA服務器源碼,
?? CPP
字號:

#include "stdio.h"
#include "windows.h"
#include "winbase.h"
#include "dlodbc.h"
#include "caSocket.h"
#include "certextern.h"
#include "certglobal.h"
#include "certtools.h"

extern DBCONN dbconn[];
#define MUTEXTIMEOUT 5000

/***************************************************************
* 函數名:	GetHdNum
* 功能:	從全局變量中取得數據庫連接句柄
* 輸入參數:	無
* 輸出參數:	指向DWORD的指針,得到連接句柄
* 返回值:  	成功返回0,其他情況返回負數
* 程序員:	徐鋒			編程日期:2004/09/08
* 修改人員:				修改日期:
* 修改原因:
*****************************************************************/
int GetHdNum(DWORD *dwHdNum)
{

	int i;
	int	nSuc=0;
	DWORD dwWaitResult; 
	DWORD dwThreadId = GetCurrentThreadId();

    dwWaitResult = WaitForSingleObject( 
        hMutex,   // handle to mutex
        MUTEXTIMEOUT);   // five-second time-out interval

    switch (dwWaitResult) 
    {
        // The thread got mutex ownership.
        case WAIT_OBJECT_0: 
			/*
			for(i=0;i< MAXDBCONN;i++)
			if(dbconn[i].threadid == dwThreadId)
			{
				dbconn[i].status =1;
				*dwHdNum = i;
				nSuc = 1;
				break;;
			}
			else
				continue;

			if(nSuc == 1)
			{
				ReleaseMutex(hMutex);
				return 0;
			}
			*/
			for(i=0;i< MAXDBCONN;i++)
				if(dbconn[i].status == 0)
				{
					dbconn[i].threadid = dwThreadId;
					dbconn[i].status =1;
					*dwHdNum = i;
					nSuc = 1;
					break;
				}
				else
					continue;

			ReleaseMutex(hMutex);

			if(nSuc == 1)
				return 0;
			else
				return -1;

        case WAIT_TIMEOUT: 
            return -1; 

        // Got ownership of the abandoned mutex object.
        default: 
            return -1; 
    }

/*
	DWORD dwThreadId = GetCurrentThreadId();

	for(int i=0;i< MAXDBCONN;i++)
		if(dbconn[i].threadid == dwThreadId)
		{
			dbconn[i].status =1;
			*dwHdNum = i;
			return 0;
		}
		else
			continue;

	for(i=0;i< MAXDBCONN;i++)
		if(dbconn[i].status == 0)
		{
			dbconn[i].threadid = dwThreadId;
			dbconn[i].status =1;
			*dwHdNum = i;
			return 0;
		}
		else
			continue;

	return -1;
	*/

}


/***************************************************************
* 函數名:	FreeHdNum
* 功能:	從全局變量中釋放數據庫連接句柄
* 輸入參數:	無
* 輸出參數:	無
* 返回值:  	成功返回0,其他情況返回負數
* 程序員:	徐鋒			編程日期:2004/09/08
* 修改人員:				修改日期:
* 修改原因:
*****************************************************************/
int FreeHdNum()
{
	int i;
	int nSuc=0;
	DWORD dwWaitResult; 
	DWORD dwThreadId = GetCurrentThreadId();


	 dwWaitResult = WaitForSingleObject( 
        hMutex,   // handle to mutex
        MUTEXTIMEOUT);   // five-second time-out interval

	 switch (dwWaitResult) 
    {
        // The thread got mutex ownership.
        case WAIT_OBJECT_0: 
			for(i=0;i< MAXDBCONN;i++)
			{
				if(dbconn[i].threadid == dwThreadId)
				{
					dbconn[i].status = 0;
					dbconn[i].threadid = 0;
					nSuc = 1;
					break;
				}
				else
					continue;
			}
			ReleaseMutex(hMutex);

			if(nSuc == 1)
				return 0;
			else
				return -1;

        case WAIT_TIMEOUT: 
            return -1; 

        // Got ownership of the abandoned mutex object.
        case WAIT_ABANDONED: 
            return -1; 
    }
	
	/*
	for(i=0;i< MAXDBCONN;i++)
		if(dbconn[i].threadid == dwThreadId)
		{
			dbconn[i].status = 0;
			dbconn[i].threadid = 0;
			return 0;
		}
		else
			continue;

	return -1;
	*/
	 return -1;
}

/***************************************************************
* 函數名:	DBGetSetSerial
* 功能:	從數據庫CA_SERIAL表中讀取系列號,并將系列號加一寫入
* 輸入參數:	指向DWORD的指針
* 輸出參數:	指向DWORD的指針,得到系列號
* 返回值:  	成功返回0,其他情況返回負數
* 程序員:	徐鋒			編程日期:2004/09/08
* 修改人員:				修改日期:
* 修改原因:
*****************************************************************/
int DBGetSetSerial(DWORD* dwSerialNum)
{
	SQLHDBC hdbc;
	DWORD		dwHdNum=0;
	DWORD		dwSerial;
	int	nRtn = 0;
	SQLCHAR	sql[40]="";  
	SQLHSTMT statement; 

	char	szSerial[9];
	SQLCHAR *datavalue=NULL;
	SQLINTEGER datalen;

	while(1)
	{
		nRtn = GetHdNum(&dwHdNum);
		if(nRtn != 0)	//沒有空閑
		{
			nRtn = -5001;
			break;
		}
		hdbc = (void *)dbconn[dwHdNum].handle;

		//get Serial
		statement = CreateStatement(hdbc,0,0); 
		strcpy((char *)sql,"select * from CA_SERIAL");
		nRtn = ExecSQL(statement,sql,strlen((char *)sql));   	
	//	SQLFetchScroll(statement,SQL_FETCH_FIRST,0);
		if(nRtn > 0)                                                                                      
			while(NextCursor(statement) == 1)	//成功移動   
			{		
				datavalue = getData(statement,1,datalen);		                                                                               
			}             
		FreeStatement(statement); 
		if(datavalue == NULL)
		{
			nRtn = -5002;	//從數據庫中讀證書系列號失敗
			break;			
		}
		dwSerial=atoi((char *)datavalue);
		*dwSerialNum = dwSerial;

		//update Serial
		dwSerial++;
		memset(szSerial,0,sizeof(szSerial));
		sprintf(szSerial,"%d",dwSerial);
		statement = CreateStatement(hdbc,0,0); 
		sprintf((char *)sql,"update CA_SERIAL set SERIAL='%s'",szSerial);
		nRtn = ExecSQL(statement,sql,strlen((char *)sql));                                         
		if(nRtn < 0) 
		{
			nRtn = -5011;
			break;
		}
		break;
	}	//end while

	if(datavalue) free(datavalue);
	FreeStatement(statement); 

	FreeHdNum();

	return 0;
}



/***************************************************************
* 函數名:	DBInsertCertReq
* 功能:	插入一條記錄到數據庫CA_CERTREQ表.
* 輸入參數:	指向ISUCERT的指針,系列號
* 輸出參數:	無
* 返回值:  	成功返回0,其他情況返回負數
* 程序員:	徐鋒			編程日期:2004/09/08
* 修改人員:				修改日期:
* 修改原因:
*****************************************************************/
int DBInsertCertReq(ISUCERT* p,DWORD dwSerialNum)
{
	SQLHDBC hdbc;
	DWORD		dwHdNum=0;
	int	nRtn = 0;
	SQLCHAR	sqlcommand[5000]="";	
	SQLCHAR	sqlform[500]=""; 

	SQLCHAR szCertReq[200]="FORMACC,TELNUM,CITY,COMPANY,COUNTRY,DEPARTMENT,EMAIL,NAME,P10,PROVINCE,KEYSERIAL,X509NAME,APPLYSTATUS,APPLYDAY,CERTSERIAL";
	SQLCHAR	x509Name[300];
	SQLCHAR szStatus[4]="0";
	SQLCHAR szTime[20]="1234";
	SQLCHAR	szSerial[9]="";
	SQLHSTMT statement; 

while(1)
	{
		nRtn = GetHdNum(&dwHdNum);
		if(nRtn != 0)	//沒有空閑
		{
			nRtn = -5011;
			break;
		}
		hdbc = (void *)dbconn[dwHdNum].handle;
		statement = CreateStatement(hdbc,0,0); 

		ReadTime(szTime,sizeof(szTime));

		sprintf((char *)szSerial,"%d",dwSerialNum);
		sprintf((char *)x509Name,"CN = %s,OU = %s,O = %s,L = %s,S = %s,C = %s,E = %s",\
			p->name,p->company,p->department,p->city,p->prov,p->country,p->email);

		strcpy((char *)sqlform,"insert into CA_CERTREQ(%s)\
		values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')");

		sprintf((char *)sqlcommand,(char *)sqlform,\
			szCertReq,p->account,p->cellno,p->city,p->company,p->country,\
			p->department,p->email,p->name,p->pkcs10,p->prov,p->ukserial,\
			x509Name,szStatus,szTime,szSerial);

		nRtn = ExecSQL(statement,sqlcommand,strlen((char *)sqlcommand));                                         
		if(nRtn < 0) 
		{
			nRtn = -5015;
			break;
		}
		else
			nRtn = 0;
		break;
	}	//end while

	FreeStatement(statement); 
	FreeHdNum();

	return nRtn;
}


/***************************************************************
* 函數名:	DBInsertCert
* 功能:	插入一條記錄到數據庫CA_CERT表.
* 輸入參數:	系列號,指向證書內容的指針,證書內容長度
* 輸出參數:	無
* 返回值:  	成功返回0,其他情況返回負數
* 程序員:	徐鋒			編程日期:2004/09/08
* 修改人員:				修改日期:
* 修改原因:
*****************************************************************/
int DBInsertCert(DWORD dwSerialNum,BYTE* pbCert,DWORD cbSize)
{
	
	SQLHDBC hdbc;
	DWORD		dwHdNum=0;
	int	nRtn = 0;

	SQLCHAR szCertReq[200]="ENVACC,KEYSERIAL,FORMACC,TELNUM,X509NAME,NAME,EMAIL,COMPANY,DEPARTMENT,CITY,PROVINCE,COUNTRY,APPLYSTATUS,APPLYDAY,P10,CERTSERIAL";

	char	ENVACC[24];
	char	KEYSERIAL[24];
	char	FORMACC[24];
	char	TELNUM[16];
	char	X509NAME[300];
	char	NAME[24];
	char	EMAIL[128];
	char	COMPANY[64];
	char	DEPARTMENT[64];
	char	CITY[4];
	char	PROVINCE[4];
	char	COUNTRY[4];
	char	APPLYSTATUS[4];
	char	APPLYDAY[20];
	char	P10[4000];
	char	CERTSERIAL[12];

	SQLCHAR	sqlcommand[9000]="";	
	SQLCHAR	sqlform[500]=""; 
	SQLCHAR sqlselect[50]="";
	SQLCHAR sqlinsert[50]="";

	SQLCHAR szStatus[4]="0";
	SQLCHAR szTime[20]="";
	SQLCHAR	szSerial[9]="";
	SQLHSTMT statement; 

	SQLCHAR	szCert[MAXCERTLEN]="";

	SQLSMALLINT ColumnCnt;
	char *datavalue=NULL;
	SQLINTEGER datalen;

	while(1)
	{
		nRtn = GetHdNum(&dwHdNum);
		if(nRtn != 0)	//沒有空閑
		{
			nRtn = -5021;
			break;
		}
		hdbc = (void *)dbconn[dwHdNum].handle;
		statement = CreateStatement(hdbc,0,0); 
		
		sprintf((char *)szSerial,"%d",dwSerialNum);
		sprintf((char *)sqlselect,"select %s from CA_CERTREQ where CERTSERIAL='%s'",szCertReq,szSerial);
		
		nRtn = ExecSQL(statement,sqlselect,strlen((char *)sqlselect));   	
		if(nRtn > 0) 
		{
		//	sprintf((char *)sqlinsert,"insert into CA_CERT(CERTSERIAL) values('%s')", szSerial);
			while(NextCursor(statement) == 1)	//成功移動
			{
				ColumnCnt = GetColumnCount(statement);
				for(SQLSMALLINT i=1;i<=ColumnCnt;i++)
				{
					datavalue = (char *)getData(statement, i, datalen);
					switch(i)
					{
							case 1:
						strcpy(ENVACC			,datavalue);
						break;
							case 2:
						strcpy(KEYSERIAL  ,datavalue);
						break;
							case 3:
						strcpy(FORMACC    ,datavalue);
						break;
							case 4:
						strcpy(TELNUM    	,datavalue);
						break;
							case 5:
						strcpy(X509NAME  	,datavalue);
						break;
							case 6:
						strcpy(NAME    		,datavalue);
						break;
							case 7:
						strcpy(EMAIL    	,datavalue);
						break;
							case 8:
						strcpy(COMPANY    ,datavalue);
						break;
							case 9:
						strcpy(DEPARTMENT ,datavalue);
						break;
							case 10:
						strcpy(CITY    		,datavalue);
						break;
							case 11:
						strcpy(PROVINCE   ,datavalue);
						break;
							case 12:
						strcpy(COUNTRY    ,datavalue);
						break;
							case 13:
						strcpy(APPLYSTATUS,datavalue);
						break;
							case 14:
						strcpy(APPLYDAY   ,datavalue);
						break;
							case 15:
						strcpy(P10    		,datavalue);
						break;
							case 16:
						strcpy(CERTSERIAL ,datavalue); 
						break;
							default:
						break;
					}
		
				}

			};	//end while
		}

		FreeStatement(statement); 

		ReadTime(szTime,sizeof(szTime));

		XFBase64encode(pbCert,cbSize,szCert,0);
		strcpy((char *)sqlform,"insert into CA_CERT(%s,CERT,CERTISSUEDAY)\
		values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')");

		sprintf((char *)sqlcommand,(char *)sqlform,\
										szCertReq	,\
										ENVACC     	,\
										KEYSERIAL  	,\
										FORMACC    	,\
										TELNUM     	,\
										X509NAME   	,\
										NAME       	,\
										EMAIL      	,\
										COMPANY    	,\
										DEPARTMENT 	,\
										CITY       	,\
										PROVINCE   	,\
										COUNTRY    	,\
										APPLYSTATUS	,\
										APPLYDAY	,\
										P10			,\
										CERTSERIAL 	,\
										szCert		,\
										szTime	);


		statement = CreateStatement(hdbc,0,0);
		nRtn = ExecSQL(statement,sqlcommand,strlen((char *)sqlcommand));                                         
		if(nRtn < 0) 
		{
			nRtn = -5025;
			break;
		}
		break;
	}	//end while1

	FreeStatement(statement); 
	FreeHdNum();

	return nRtn;
	

}


int DBGetCertUseSerial(LPSTR szSerial,LPSTR pUserCert,DWORD pBufLen)
{
	SQLHDBC hdbc;
	SQLHSTMT statement; 
	DWORD		dwHdNum=0;
	int	nRtn = 0;

//	SQLSMALLINT ColumnCnt;
	char *datavalue=NULL;
	SQLINTEGER datalen;

	SQLCHAR	sqlform[100]="select CERT from CA_CERT where CERTSERIAL = '%s'"; 
	SQLCHAR	sqlcommand[200];

	sprintf((char *)sqlcommand,(char *)sqlform,szSerial);


	while(1)
	{
		nRtn = GetHdNum(&dwHdNum);
		if(nRtn != 0)	//沒有空閑
		{
			nRtn = -5031;
			break;
		}
		hdbc = (void *)dbconn[dwHdNum].handle;

		statement = CreateStatement(hdbc,0,0);
		nRtn = ExecSQL(statement,sqlcommand,strlen((char *)sqlcommand));   	
		if(nRtn > 0)                                                                                      
		while(NextCursor(statement) == 1)	//成功移動   
		{		
			datavalue = (char *)getData(statement,1,datalen);		                                                                               
		}

		if(pBufLen > (DWORD)datalen)
		{
			strcpy(pUserCert,datavalue);
			nRtn = datalen;
		}
		break;
	}

	if(datavalue) free(datavalue);
	FreeStatement(statement); 
	FreeHdNum();
	return nRtn;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久99精品久久久久宅男 | 日韩午夜小视频| 成人高清在线视频| 国产在线播精品第三| 久久99久久久久| 精品在线一区二区| 麻豆一区二区三| 韩国成人精品a∨在线观看| 欧美aaa在线| 另类专区欧美蜜桃臀第一页| 久久精品国产精品亚洲精品| 久久99久国产精品黄毛片色诱| 精品一区二区三区久久久| 精品亚洲国产成人av制服丝袜| 国内久久精品视频| 国产一区二区毛片| 高清在线不卡av| 91麻豆福利精品推荐| 色噜噜狠狠色综合欧洲selulu| 欧美怡红院视频| 日韩视频一区二区三区在线播放| 日韩欧美一区二区免费| 久久欧美一区二区| 椎名由奈av一区二区三区| 一区二区三区精品久久久| 午夜一区二区三区视频| 蜜桃视频一区二区三区| 国产成人精品综合在线观看| 色8久久精品久久久久久蜜| 欧美在线啊v一区| 日韩欧美高清一区| 国产精品色一区二区三区| 亚洲免费观看高清完整| 天堂影院一区二区| 成人综合在线观看| 亚洲一区欧美一区| 日韩高清在线观看| 狠狠网亚洲精品| 不卡的av电影在线观看| 欧美在线观看视频一区二区| 精品久久久久久久久久久久久久久| 中文字幕免费不卡| 亚洲va天堂va国产va久| 国产成人免费视频精品含羞草妖精| 91福利视频网站| 久久女同互慰一区二区三区| 亚洲超碰精品一区二区| 国产美女在线观看一区| 91成人在线免费观看| 久久久久久久电影| 天涯成人国产亚洲精品一区av| 国产馆精品极品| 制服丝袜国产精品| 亚洲三级久久久| 国产成a人亚洲| 精品三级在线观看| 亚洲图片欧美综合| 99久久99久久免费精品蜜臀| 国产欧美日韩在线| 午夜精品视频一区| 日本乱人伦一区| 国产精品美女视频| 久久不见久久见中文字幕免费| 欧美人与z0zoxxxx视频| 成人免费在线观看入口| 国产露脸91国语对白| 6080午夜不卡| 亚洲成av人片在线观看| 色婷婷综合久久久久中文 | 日韩av高清在线观看| 色悠悠久久综合| 中文字幕亚洲在| av在线综合网| 国产精品久久久久影院亚瑟| 国产成人av电影在线播放| 精品成人a区在线观看| 日本中文字幕一区二区视频| 欧美老女人第四色| 性做久久久久久久久| 欧美日韩亚洲高清一区二区| 亚洲成a人v欧美综合天堂下载 | 欧洲视频一区二区| 亚洲激情第一区| 欧洲一区在线电影| 亚洲一区二三区| 欧美精品自拍偷拍| 蜜桃传媒麻豆第一区在线观看| 欧美一级搡bbbb搡bbbb| 美女在线视频一区| 26uuu精品一区二区| 粉嫩在线一区二区三区视频| 亚洲你懂的在线视频| 欧美日韩另类国产亚洲欧美一级| 日韩国产成人精品| 欧美精品一区二区三区久久久| 国产精品一二二区| 中文字幕一区二区三区视频| 欧美在线制服丝袜| 日韩极品在线观看| 国产偷国产偷精品高清尤物| 91福利区一区二区三区| 蜜臀久久99精品久久久画质超高清| 精品久久久久香蕉网| 北条麻妃国产九九精品视频| 偷偷要91色婷婷| 久久免费偷拍视频| 99国产精品视频免费观看| 亚洲综合清纯丝袜自拍| 日韩久久精品一区| 99久久伊人久久99| 日日夜夜精品视频天天综合网| 久久久欧美精品sm网站| 一本色道综合亚洲| 七七婷婷婷婷精品国产| 国产精品不卡一区| 91精品国产综合久久福利软件 | 夜夜精品浪潮av一区二区三区| 88在线观看91蜜桃国自产| 成人永久看片免费视频天堂| 首页国产丝袜综合| 欧美国产禁国产网站cc| 欧美日韩www| 99久久精品国产导航| 日本va欧美va瓶| 亚洲欧美日韩国产一区二区三区 | 欧美精品一区二区三区一线天视频| aaa亚洲精品| 国产成人自拍高清视频在线免费播放| 樱花草国产18久久久久| 国产午夜精品理论片a级大结局| 欧美绝品在线观看成人午夜影视| 福利一区二区在线| 日本不卡123| 日韩精品色哟哟| 亚洲午夜在线电影| 国产精品对白交换视频| 久久美女艺术照精彩视频福利播放 | 国产日韩av一区| 欧美不卡123| 欧美一级生活片| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲国产精品一区二区久久| 国产精品久久综合| 久久久国产一区二区三区四区小说 | 99久久综合99久久综合网站| 国产一区二区三区综合| 免费在线成人网| 热久久免费视频| 日韩成人dvd| 免费在线观看一区二区三区| 日韩成人av影视| 男女性色大片免费观看一区二区| 五月婷婷激情综合| 午夜精品福利视频网站| 亚洲国产精品麻豆| 午夜伦欧美伦电影理论片| 亚洲成av人片一区二区| 亚洲mv在线观看| 日韩国产精品久久久久久亚洲| 亚洲va天堂va国产va久| 首页国产欧美日韩丝袜| 久久精品久久精品| 国产主播一区二区三区| 国产成人啪免费观看软件| 丁香天五香天堂综合| 91一区一区三区| 欧美日韩高清影院| 日韩欧美亚洲一区二区| 国产亚洲美州欧州综合国| 中文字幕精品在线不卡| 亚洲女人****多毛耸耸8| 天天综合日日夜夜精品| 国产一区二区视频在线| 99国产精品视频免费观看| 日本久久一区二区三区| 777奇米成人网| 国产嫩草影院久久久久| 亚洲综合丝袜美腿| 捆绑调教一区二区三区| 成人国产免费视频| 欧洲国内综合视频| 日韩视频中午一区| 亚洲国产精品成人综合| 亚洲影院久久精品| 国产真实乱偷精品视频免| 91一区一区三区| 精品va天堂亚洲国产| 国产精品电影一区二区三区| 日韩高清欧美激情| 国产乱色国产精品免费视频| 在线免费观看日本一区| 91精品国产品国语在线不卡| 国产精品丝袜在线| 视频一区免费在线观看| 成人精品国产一区二区4080| 91精品国产色综合久久| 亚洲欧美一区二区三区孕妇| 麻豆国产一区二区| 欧洲日韩一区二区三区| 国产日韩欧美在线一区|