📄 caccess.cpp
字号:
int Length;
int l;
bool r=PackageMake(pBuffer,5,&Length,MOD_ACCESS,MOD_RUNTIME,PKG_AcR255,ErrorStr,"");
if(r==false)
{
Error=GetLastErrorStr();
Error="CAccess::RuntimeWithAccess255:"+Error;
pDoc->SetConnectInfo(Error);
return -1;
}
l=m_pSrvSocket->SendData(pBuffer,Length);
if(l!=Length)
{
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
Error=(LPTSTR)lpMsgBuf;
Error="CAccess::RuntimeWithAccess255:"+Error;
pDoc->SetConnectInfo(Error);
//释放内存
::LocalFree( lpMsgBuf );
return -1;
}
return 0;
}
int CAccess::EntitlementWithAccess0()
{
int PackageLength;
char pBuffer[1024];
CString Error;
//对称加密并进行base64编码
unsigned char SDBIkey[17]="!@#$%^&*()_+|<>?";
DWORD OutLength=0;
BYTE out[40];
for(int i=0;i<40;i++)
out[i]='\0';
CString cookie=m_pCookie;
SDBIEnc((BYTE*)m_pCookie,cookie.GetLength(),out,&OutLength,SDBIkey);
char OutBase[40];
for(i=0;i<40;i++)
OutBase[i]='\0';
Base64Encode(out, OutLength, OutBase);
cookie=OutBase;
delete m_pCookie;
m_pCookie=new char[cookie.GetLength()+1];
strcpy(m_pCookie,OutBase);
//加密结束
//打数据包
if(!PackageMake(pBuffer,1024,&PackageLength,MOD_ACCESS,MOD_ENTITLEMENT,PKG_AcE0,m_pCookie,m_pUrl,""))
{
Error=GetLastErrorStr();
Error="CAccess::EntitlementWithAccess0:"+Error;
pDoc->SetConnectInfo(Error);
return -1;
}
pBuffer[PackageLength]='\0';
//建立连接
m_pClientSocket=new CClientSocket(this,CAccess::ClientProcessPendingRead);
int r=m_pClientSocket->BuildConnect(EntitlementPort,(LPCTSTR)EntitlementIP);
if(r!=0)
{
pDoc->SetConnectInfo("CAccess::EntitlementWithAccess0:建立连接失败");
FreeClientP();
return -1;
}
//写日志信息
CString PeerIP;
UINT PeerPort;
m_pClientSocket->GetPeerAdd(PeerIP,PeerPort);
CString add="Access与"+PeerIP;
add+=":";
CString port;
port.Format("%d",PeerPort);
add+=port;
add+="建立连接";
pDoc->SetConnectInfo(add);
//写状态条
ActiveConnect++;
ClientConnect++;
pMainFrame->DisplayConInfo(ActiveConnect,ClientConnect,ServerConnect);
//发送数据包
r=m_pClientSocket->SendData(pBuffer,PackageLength);
if(r!=PackageLength)
{
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
Error=(LPTSTR)lpMsgBuf;
Error="CAccess::EntitlementWithAccess0:"+Error;
pDoc->SetConnectInfo(Error);
//释放内存
::LocalFree( lpMsgBuf );
FreeClientP();
return -1;
}
//设立定时器
BuildTimer();
return 0;
}
int CAccess::EntitlementWithAccess1()
{
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);
/* //加密对称加密技术DES算法解密
unsigned char des_key[8];
CString DEFAULT_KEY="&@$+/;f`";
for (int i=0;i<DEFAULT_KEY.GetLength();i++)
des_key[i]=DEFAULT_KEY.GetAt(i);
DES des;
des.decrypt(des_key,(unsigned char*)m_pCookie,DEFAULT_KEY.GetLength()/8);
//加密对称加密技术DES算法解密结束*/
//对称解密并进行base64解码
unsigned char SDBIkey[17]="!@#$%^&*()_+|<>?";
DWORD OutLength=0;
DWORD BaseLength=0;
BYTE out[40];
char OutBase[40];
for(int i=0;i<40;i++)
OutBase[i]=0;
Base64Decode(m_pCookie, out, &OutLength);
SDBIDec(out,OutLength,(BYTE*)OutBase,&BaseLength,SDBIkey);
delete m_pCookie;
m_pCookie=new char[BaseLength+1];
strcpy(m_pCookie,OutBase);
//解密结束
CString role;
role=m_pRole;
CString filename;
if(!(pDatabase->IfConnected()))
{
int c=pDatabase->ConnectDB(DbSource,DbUser,DbPass);
if(c!=0)
{
((CMainFrame*)AfxGetMainWnd())->OnFileShutlisten();
return -1;
}
}
int r=pDatabase->GetRoleURL(m_pCookie,role,filename);
if(r!=0)
{
m_ErrorCode=5;
RuntimeWithAccess255();
return -1;
}
m_pMenu=(char*)(LPCTSTR)(filename);
RuntimeWithAccess5();
return 0;
}
int CAccess::EntitlementWithAccess255()
{
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);
RuntimeWithAccess255();
return 0;
}
int CAccess::AuthorityWithAccess0()
{
char pBuffer[4096];
for(int i=0;i<4096;i++)
pBuffer[i]='\0';
CString Error;
int PackageLength;
//封装数据包
if(!PackageMake(pBuffer,4096,&PackageLength,MOD_ACCESS,MOD_AUTHORITY,PKG_AcAu0,\
m_pLogInfo,""))
{
Error=GetLastErrorStr();
Error="CAccess::AuthorityWithAccess0:"+Error;
pDoc->SetConnectInfo(Error);
return -1;
}
pBuffer[PackageLength]='\0';
//建立连接
m_pClientSocket=new CClientSocket(this,CAccess::ClientProcessPendingRead);
int r=m_pClientSocket->BuildConnect(AuthorityPort,(LPCTSTR)AuthorityIP);
if(r!=0)
{
pDoc->SetConnectInfo("CAccess::AuthorityWithAccess0:建立连接失败");
FreeClientP();
return -1;
}
//写日志信息
CString PeerIP;
UINT PeerPort;
m_pClientSocket->GetPeerAdd(PeerIP,PeerPort);
CString add="Access与"+PeerIP;
add+=":";
CString port;
port.Format("%d",PeerPort);
add+=port;
add+="建立连接";
pDoc->SetConnectInfo(add);
//写状态条
ActiveConnect++;
ClientConnect++;
pMainFrame->DisplayConInfo(ActiveConnect,ClientConnect,ServerConnect);
//发送数据包
r=m_pClientSocket->SendData(pBuffer,PackageLength);
if(r!=PackageLength)
{
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
Error=(LPTSTR)lpMsgBuf;
Error="CAccess::AuthorityWithAccess0:"+Error;
pDoc->SetConnectInfo(Error);
//释放内存
::LocalFree( lpMsgBuf );
FreeClientP();
return -1;
}
//设立定时器
BuildTimer();
delete m_pLogInfo;
m_pLogInfo=NULL;
return 0;
}
int CAccess::AuthorityWithAccess1()
{
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);
/* //加密对称加密技术DES算法解密
unsigned char des_key[8];
CString DEFAULT_KEY="&@$+/;f`";
for (int i=0;i<DEFAULT_KEY.GetLength();i++)
des_key[i]=DEFAULT_KEY.GetAt(i);
DES des;
des.decrypt(des_key,(unsigned char*)m_pSid,DEFAULT_KEY.GetLength()/8);
//加密对称加密技术DES算法解密结束
MY_DB_MESSAGE sid;
int r=pDatabase->GetUIDFromSID(m_pSid,&sid);
if(r!=0)
{
m_ErrorCode=5;
RuntimeWithAccess255();
return -1;
}
m_uid=sid.iMessage;
//加密对称加密技术DES算法加密
des.decrypt(des_key,(unsigned char*)m_pSid,DEFAULT_KEY.GetLength()/8);
//加密对称加密技术DES算法加密结束*/
EntitlementWithAccess0();
return 0;
}
int CAccess::AuthorityWithAccess255()
{
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);
RuntimeWithAccess255();
return 0;
}
int CAccess::SessionMSWithAccess0()
{
CString uid;
uid.Format("%04d",m_uid);
char pBuffer[9];
pBuffer[8]='\0';
int length;
CString Error;
int result;
//封装数据包
if(!PackageMake(pBuffer,8,&length,MOD_ACCESS,MOD_SESSIONMS,PKG_AcS0,uid.GetBuffer(8),""))
{
Error=GetLastErrorStr();
Error="CAccess::SessionMSWithAccess0:"+Error;
pDoc->SetConnectInfo(Error);
return -1;
}
//建立连接
m_pClientSocket=new CClientSocket(this,CAccess::ClientProcessPendingRead);
result=m_pClientSocket->BuildConnect(SessionMSPort,(LPCTSTR)SessionMSIP);
if(result!=0)
{
pDoc->SetConnectInfo("CAccess::SessionMSWithAccess0:建立连接失败");
FreeClientP();
return -1;
}
//写日志信息
CString PeerIP;
UINT PeerPort;
m_pClientSocket->GetPeerAdd(PeerIP,PeerPort);
CString add="Access与"+PeerIP;
add+=":";
CString port;
port.Format("%d",PeerPort);
add+=port;
add+="建立连接";
pDoc->SetConnectInfo(add);
//写状态条
ActiveConnect++;
ClientConnect++;
pMainFrame->DisplayConInfo(ActiveConnect,ClientConnect,ServerConnect);
//发送数据
result=m_pClientSocket->SendData(pBuffer,length);
if(result!=length)
{
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
Error=(LPTSTR)lpMsgBuf;
Error="CAccess::SessionMSWithAccess0:"+Error;
pDoc->SetConnectInfo(Error);
//释放内存
::LocalFree( lpMsgBuf );
FreeClientP();
return -1;
}
BuildTimer();
return 0;
}
int CAccess::SessionMSWithAccess1()
{
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);
if(m_CreateSidTag==ACK)
{
//对称加密并进行base64编码
unsigned char SDBIkey[17]="!@#$%^&*()_+|<>?";
DWORD OutLength=0;
BYTE out[40];
CString sid=m_pSid;
SDBIEnc((BYTE*)m_pSid,sid.GetLength(),out,&OutLength,SDBIkey);
char OutBase[40];
for(int i=0;i<40;i++)
OutBase[i]='\0';
Base64Encode(out, OutLength, OutBase);
sid=OutBase;
delete m_pSid;
m_pSid=new char[sid.GetLength()+1];
strcpy(m_pSid,OutBase);
//加密结束
}
RuntimeWithAccess3();
return 0;
}
int CAccess::SessionMSWithAccess2()
{
char pBuffer[23];
pBuffer[22]='\0';
CString Error;
int length;
//封装数据包
if(!PackageMake(pBuffer,22,&length,MOD_ACCESS,MOD_SESSIONMS,PKG_AcS2,m_pCookie,""))
{
Error=GetLastErrorStr();
Error="CAccess::SessionMSWithAccess2:"+Error;
pDoc->SetConnectInfo(Error);
return -1;
}
//建立连接
m_pClientSocket=new CClientSocket(this,CAccess::ClientProcessPendingRead);
int r=m_pClientSocket->BuildConnect(SessionMSPort,(LPCTSTR)SessionMSIP);
if(r!=0)
{
pDoc->SetConnectInfo("CAccess::SessionMSWithAccess2:建立连接失败");
FreeClientP();
return -1;
}
//写日志信息
CString PeerIP;
UINT PeerPort;
m_pClientSocket->GetPeerAdd(PeerIP,PeerPort);
CString add="Access与"+PeerIP;
add+=":";
CString port;
port.Format("%d",PeerPort);
add+=port;
add+="建立连接";
pDoc->SetConnectInfo(add);
//写状态条
ActiveConnect++;
ClientConnect++;
pMainFrame->DisplayConInfo(ActiveConnect,ClientConnect,ServerConnect);
//发送数据
r=m_pClientSocket->SendData(pBuffer,length);
if(r!=length)
{
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
Error=(LPTSTR)lpMsgBuf;
Error="CAccess::SessionMSWithAccess2:"+Error;
pDoc->SetConnectInfo(Error);
//释放内存
::LocalFree( lpMsgBuf );
FreeClientP();
return -1;
}
BuildTimer();
return 0;
}
int CAccess::SessionMSWithAccess3()
{
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);
RuntimeWithAccess7();
return 0;
}
int CAccess::SessionMSWithAccess255()
{
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);
RuntimeWithAccess255();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -