📄 caccess.cpp
字号:
// CAccess.cpp : implementation file
//
/*-----------------------------------------------
类定义:CAccess
代码编写:
------------------------------------------------*/
#include "stdafx.h"
#include "CAccess.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//初始化静态成员变量
CAccessDoc* CAccess::pDoc=NULL;
CMainFrame* CAccess::pMainFrame=NULL;
CDatabaseQuery* CAccess::pDatabase=NULL;
int CAccess::ActiveConnect=0;
int CAccess::ServerConnect=0;
int CAccess::ClientConnect=0;
CString CAccess::EntitlementIP="127.0.0.1";
CString CAccess::AuthorityIP="127.0.0.1";
CString CAccess::SessionMSIP="127.0.0.1";
CString CAccess::DbSource="qxgl";
CString CAccess::DbUser="administrator";
CString CAccess::DbPass="";
int CAccess::AuthorityPort=0;
int CAccess::EntitlementPort=0;
int CAccess::SessionMSPort=0;
int CAccess::AccessPort=0;
BYTE CAccess::LogType=NAMEPASS;
int CAccess::ClientWaitTime=1;
CAccess::CAccess()
{
m_LogTag='\0';
m_pUrl=NULL;
m_pLogInfo=NULL;
m_pCookie=NULL;
m_AuthTag='\0';
m_EntitleTag='\0';
m_pSid=NULL;
m_pMenu=NULL;
m_pUserName=NULL;
m_pPassWord=NULL;
m_pRole=NULL;
m_CreateSidTag='\0';
m_RevokeSidTag='\0';
m_ErrorCode=0;
m_LogInfoLength=0;
m_Timer=0;
m_pClientSocket=NULL;
m_pSrvSocket=NULL;
}
void CAccess::SrvPInitial(CSrvSocket*pCSrvSocket)
{
//初始化临界区
InitializeCriticalSection(&CriticalSection);
if(m_pSrvSocket!=NULL)
{
::MessageBox(AfxGetApp()->m_pMainWnd->m_hWnd,\
"CAccess对象初始化失败!(对象已经初始化)",\
"CAccess Initial",MB_OK|MB_ICONSTOP);
return;
}
m_pSrvSocket=pCSrvSocket;
}
CSrvSocket* CAccess::GetSrvP()
{
return m_pSrvSocket;
}
CClientSocket* CAccess::GetClientP()
{
return m_pClientSocket;
}
void CAccess::FreeClientP()
{
//临界区开始
EnterCriticalSection(&CriticalSection);
if(m_pClientSocket!=NULL)
{
delete m_pClientSocket;
m_pClientSocket=NULL;
}
//离开临界区
LeaveCriticalSection(&CriticalSection);
}
void CAccess::DeleteClientPointer()
{
CString PeerIP;
UINT PeerPort;
m_pClientSocket->GetPeerAdd(PeerIP,PeerPort);
//释放指针m_pClientSocket
FreeClientP();
//销毁定时器
StopTimer();
//写日志信息
CString add="超时,Access与"+PeerIP;
add+=":";
CString port;
port.Format("%d",PeerPort);
add+=port;
add+="断开连接";
pDoc->SetConnectInfo(add);
//写状态条
ActiveConnect--;
ClientConnect--;
pMainFrame->DisplayConInfo(ActiveConnect,ClientConnect,ServerConnect);
m_ErrorCode=2;
RuntimeWithAccess255();
}
void CAccess::BuildTimer()
{
LPVOID p=this;
UINT a=(UINT)p;
UINT timer=SetTimer(AfxGetMainWnd()->m_hWnd,a,1000*ClientWaitTime,CAccess::TimerProc);
if(a!=timer)
{
pDoc->SetConnectInfo("CAccess::BuildTimer()定时器设置不成功");
return;
}
else
m_Timer=timer;
}
void CAccess::StopTimer()
{
if(m_Timer!=0)
{
KillTimer(AfxGetMainWnd()->m_hWnd,m_Timer);
m_Timer=0;
}
}
void CAccess::SetConnectAdd(CString add)
{
m_CAdd=add;
}
CString CAccess::GetConnectAdd()
{
return m_CAdd;
}
void CAccess::Destroy()
{
m_pSrvSocket=NULL;
m_LogTag='\0';
if(m_pUrl!=NULL)delete m_pUrl;
if(m_pLogInfo!=NULL)delete m_pLogInfo;
if(m_pCookie!=NULL)delete m_pCookie;
m_AuthTag='\0';
m_EntitleTag='\0';
if(m_pSid!=NULL)delete m_pSid;
if(m_pUserName!=NULL)delete m_pUserName;
if(m_pPassWord!=NULL)delete m_pPassWord;
if(m_pRole!=NULL)delete m_pRole;
m_CreateSidTag='\0';
m_RevokeSidTag='\0';
m_CAdd.Empty();
FreeClientP();
}
CAccess::~CAccess()
{
//删除临界区变量
DeleteCriticalSection(&CriticalSection);
}
//读出数据包中内容
int CAccess::PackageRead(char* pRecvBuffer,int BufferSize)
{
int Sender;
int Recver;
int Type;
int ItemLength=0;
int length=0;
char* pTemp;
CString Error;
//取得发送者,接收者和包类型信息
bool result=GetSenderRecverType(pRecvBuffer,BufferSize,&Sender,&Recver,&Type);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
return -1;
}
if(Recver==MOD_ACCESS)
{
switch(Sender)
{
case MOD_RUNTIME:
switch(Type)
{
case PKG_RAc0:
RuntimeWithAccess01();
break;
case PKG_RAc2:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc2_LOGTYPE,&m_LogTag);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
/* result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc2_URL,&ItemLength);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
m_pUrl=new char[ItemLength+1];
pTemp=m_pUrl;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc2_URL,m_pUrl);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
*/
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc2_LOGINFO,&m_LogInfoLength);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
if(m_LogTag==NAMEPASS) //用户名/密码方式
{
length=m_LogInfoLength&(0x00ff);
length+=((m_LogInfoLength&(0xff00))>>8);
m_pLogInfo=new char[length+1];
pTemp=m_pLogInfo;
pTemp+=length;
*pTemp='\0';
}
if(m_LogTag==CERT) //证书方式
{
m_pLogInfo=new char[m_LogInfoLength+1];
pTemp=m_pLogInfo;
pTemp+=m_LogInfoLength;
*pTemp='\0';
}
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc2_LOGINFO,m_pLogInfo);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
RuntimeWithAccess2();
break;
case PKG_RAc4:
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc4_COOKIE,&ItemLength);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
m_pCookie=new char[ItemLength+1];
pTemp=m_pCookie;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc4_COOKIE,m_pCookie);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc4_ROLE,&ItemLength);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
m_pRole=new char[ItemLength+1];
pTemp=m_pRole;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc4_ROLE,m_pRole);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc4_URL,&ItemLength);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
m_pUrl=new char[ItemLength+1];
pTemp=m_pUrl;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc4_URL,m_pUrl);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
RuntimeWithAccess4();
break;
case PKG_RAc6:
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_RAc6_COOKIE,&ItemLength);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
m_pCookie=new char[ItemLength+1];
pTemp=m_pCookie;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_RAc6_COOKIE,m_pCookie);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=10;
RuntimeWithAccess255();
return -1;
}
RuntimeWithAccess6();
break;
}
break;
case MOD_ENTITLEMENT:
switch(Type)
{
case PKG_EAc1:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_EAc1_ENTITLETAG,&m_EntitleTag);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=11;
RuntimeWithAccess255();
return -1;
}
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_EAc1_URL,&ItemLength);
m_pUrl=new char[ItemLength+1];
pTemp=m_pUrl;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_EAc1_URL,m_pUrl);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=11;
RuntimeWithAccess255();
return -1;
}
EntitlementWithAccess1();
break;
case PKG_EAc255:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_EAc255_ERRORCODE,(char*)(&m_ErrorCode));
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=11;
RuntimeWithAccess255();
return -1;
}
EntitlementWithAccess255();
break;
}
break;
case MOD_AUTHORITY:
switch(Type)
{
case PKG_AuAc1:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_AuAc1_AUTHTAG,&m_AuthTag);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=13;
RuntimeWithAccess255();
return -1;
}
if(((BYTE)m_AuthTag)==ACK)
{
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_AuAc1_SID,&ItemLength);
m_pCookie=new char[ItemLength+1];
pTemp=m_pCookie;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_AuAc1_SID,m_pCookie);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=13;
RuntimeWithAccess255();
return -1;
}
}
AuthorityWithAccess1();
break;
case PKG_AuAc255:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_AuAc255_ERRORCODE,(char*)(&m_ErrorCode));
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=13;
RuntimeWithAccess255();
return -1;
}
AuthorityWithAccess255();
break;
}
break;
case MOD_SESSIONMS:
switch(Type)
{
case PKG_SAc1:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc1_CREATESID,&m_CreateSidTag);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=12;
RuntimeWithAccess255();
return -1;
}
if(((BYTE)m_CreateSidTag)==ACK)
{
result=GetDataItemLength(pRecvBuffer,BufferSize,DATA_SAc1_SID,&ItemLength);
m_pSid=new char[ItemLength+1];
pTemp=m_pSid;
pTemp+=ItemLength;
*pTemp='\0';
result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc1_SID,m_pSid);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=12;
RuntimeWithAccess255();
return -1;
}
}
SessionMSWithAccess1();
break;
case PKG_SAc3:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc3_REVOKESID,&m_RevokeSidTag);
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=12;
RuntimeWithAccess255();
return -1;
}
SessionMSWithAccess3();
break;
case PKG_SAc255:
result=GetDataItem(pRecvBuffer,BufferSize,DATA_SAc255_ERRORCODE,(char*)(&m_ErrorCode));
if(result==0)
{
Error=GetLastErrorStr();
Error="CAccess::PackageRead:"+Error;
pDoc->SetConnectInfo(Error);
m_ErrorCode=12;
RuntimeWithAccess255();
return -1;
}
SessionMSWithAccess255();
break;
}
break;
}
}
else
{
pDoc->SetConnectInfo("PackageRead:Access 收到别的模块的数据包");
return -1;
}
return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -