📄 serverlist.cpp
字号:
// ServerList.cpp: implementation of the ServerList class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Wox2Head.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ServerList::ServerList()
{
//檬扁拳
now = 0;
sockinit();
FD_ZERO(&conn);
}
ServerList::~ServerList()
{
}
void ServerList::sockinit()
{
int bcode; int on=1, off=0;
int len_connection_addr=sizeof (struct sockaddr_in);
WSADATA w;
if (WSAStartup(0x202, &w))
{
printf("\nWinsock 2.0 捞惑捞 鞘夸钦聪促(win95俊辑 诀单捞飘 鞘夸)...\n");
Gv->ServerON=0;
return;
}
sockfd=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd<0)
{
printf("\nERROR: 家南阑 父甸荐 绝嚼聪促\n");
printf("俊矾内靛 %i\n", WSAGetLastError());
Gv->ServerON=0;
return;
}
//setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
memset((char *) &Serv, 0, len_connection_addr);
Serv.sin_family=AF_INET;
Serv.sin_addr.s_addr=htonl(INADDR_ANY);
Serv.sin_port=htons(2010);
printf("Wox2List: 辑滚府胶飘 立加阑 扁促覆 [酒捞乔:%s:器飘:%d]\n",inet_ntoa(Serv.sin_addr),ntohs(Serv.sin_port));
bcode=bind(sockfd, (struct sockaddr *)&Serv, len_connection_addr);
if (bcode<0)
{
printf("\nERROR: 家南阑 官牢靛 且荐 绝家 - 俊矾内靛: %i\n",bcode);
Gv->ServerON = 0;
return;
}
listen(sockfd, 42);
}
void ServerList::ConnReq()
{
int s; int len;
if (now<MAXCLIENT)
{
FD_ZERO(&conn);
FD_SET(sockfd, &conn);
nfds=sockfd+1;
s=select(nfds, &conn, NULL, NULL, &Ti->timeout);
if (s>0)
{
len=sizeof (struct sockaddr_in);
client[now]=accept(sockfd, (struct sockaddr *)&Serv, &len);
if (client[now]<0)
{
printf("ERROR: 努扼捞攫飘 楷搬俊 巩力啊 惯积!\n");
Gv->ServerON=0;
return;
}
server[now]=-1;
binlength[now]=0;
boutlength[now]=0;
struct sockaddr_in sock_addr_in;
getpeername(client[now],(struct sockaddr *)&sock_addr_in,&len);
printf("Wox2List: Client %i [%s:%d] 楷搬沁嚼聪促 [醚:%i疙].\n",now,inet_ntoa(sock_addr_in.sin_addr),ntohs(sock_addr_in.sin_port),now+1);
printf("Wox2List: Server %i [%s:%d] 促澜措扁 [醚:%i疙].\n",MAXCLIENT-now,inet_ntoa(Serv.sin_addr),ntohs(Serv.sin_port),now+1);
//connected to server
fSend(now,"\xAA\x00\x13\x7E\x1B\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44\x20\x53\x45\x52\x56\x45\x52\x0A");
now++;
return;
}
if (s<0)
{
printf("Wox2List: Select (Conn) failed!\n");
Gv->ServerON=0;
return;
}
}
}
void ServerList::CheckMessage()
{
int s, i, oldnow;
FD_ZERO(&all);
FD_ZERO(&errsock);
nfds=0;
for (i=0;i<now;i++)
{
FD_SET(client[i],&all);
FD_SET(client[i],&errsock);
if (client[i]+1>nfds) nfds=client[i]+1;
if (server[i]>=0)
{
FD_SET(server[i],&all);
FD_SET(server[i],&errsock);
if (server[i]+1>nfds) nfds=server[i]+1;
}
}
s=select(nfds, &all, NULL, &errsock, &Ti->timeout);
if (s>0)
{
oldnow=now;
for (i=0;i<now;i++)
{
if (FD_ISSET(client[i],&errsock))
{
Disconnect(i);
}
if (server[i] >= 0) {
if (FD_ISSET(server[i],&errsock))
{
closesocket(server[i]);
// FailAuth(i);
}
}
if ((FD_ISSET(client[i],&all))&&(oldnow==now))
{
GetMsg(i);
// if (executebatch) batchcheck(i); //LB, bugfix (uncommenting this line) for server info
// not working and much more scripted things
// it's an odd place to do that check
// feel free to place it straticaly better,
// but DONT leave it out, that breaks a LOT !!!!
// (whoever commented it out, it took me hours to find it, grrr)
}
if (server[i] >= 0)
{
if ((FD_ISSET(server[i],&all))&&(oldnow==now))
{
// AuthTest(i);
}
}
}
}
}
void ServerList::Disconnect(int s)
{
int j;
closesocket(client[s]);
for (j=s;j<now-1;j++)
{
client[j]=client[j+1];
}
now--;
printf("Wox2List: 努扼捞攫飘[%d]狼 立加捞 谗绢脸嚼聪促.\n",s);
}
int ServerList::Receive(int s, int x, int a) // Old socket receive function (To be replaced soon)
{
// int i, count;
int count;
if (a) count=0; // Just to get rid of warning message
do
{
count=recv(client[s], (char *)&buffer[s][recvcount], x-recvcount, 0);
memcpy((char *)&pack[s]+recvcount,(char *)&buffer[s][recvcount],x-recvcount);
if (count>0)
{
recvcount+=count;
}
}
while ((x!=2560)&&(x!=recvcount)&&(count>0));
return count;
}
void ServerList::GetMsg(int s) // Receive message from client //Lag Fix -- Zippy
{
recvcount=0;
char buf[] = "\xAA\x00\x09\x03\x07\x55\x65\xD2\x07\xDB\x00\x00";
if (Receive(s, 3, 0)>0)
{
if(!(pack[s].head[0] == '\xAA'))
{
printf("Wox2List: 沥惑楷搬捞 酒凑聪促 [%d]\n",s);
Disconnect( s );
return;
}
int xx = Receive(s,2560,1);
switch( buffer[s][3] ) //pack[s].mes[1]
{
case '\x00':
fSend(s,"\xAA\x00\x07\x00\x00\x42\xF9\x1D\x63\x00");
break;
case '\x10':
fSend(s,"\xAA\x00\x0C\x60\x00\x4E\x62\x95\x51\x91\x49\x6E\x6B\x46\x4F");
case '\x57':
Xc->Dec_Pack(s,pack[s].mes);
if(Messages[s][0] == '\x00')
{
buf[3] = 0x03;
buf[4] = lit(sed.serverip,1);
buf[5] = lit(sed.serverip,2);
buf[6] = lit(sed.serverip,3);
buf[7] = lit(sed.serverip,4);
//memcpy(buf+4,(char *)&Gv->ipl,4);
fSend(s,buf);
} else if(Messages[s][0] == '\x01')
{
/* fSend(s,"\xAA\x00\xB7\x56\x00\x4E\xD6\x00\xF3\x8D\
\x29\xFA\x6B\x67\xF2\xA0\x07\x05\x88\xA2\x7C\x6D\x82\xC1\x6B\x76\
\x61\x5A\x74\x3E\x51\xF6\xB2\x35\x1A\xA3\xB7\x17\x72\x97\xC3\x18\
\xB9\x07\x93\xAA\x20\x6C\x81\xC3\xEA\x40\x58\x6D\xBD\xA3\x33\x61\
\x78\x2A\xED\xD8\xED\xC1\x58\xC4\x01\xE7\xD7\x8F\x40\x19\x40\x2F\
\xD8\x65\x72\x32\x91\xB6\xE9\xD1\x71\x43\xED\xCE\x71\xDD\xCB\x27\
\x7B\xB3\x05\x89\x2A\x18\x05\x66\x51\x70\x41\xD8\xE8\x26\x7E\xD1\
\x5A\x0C\x57\x72\xED\xEA\x88\x9F\xD6\xB2\xB9\xB2\x97\xB0\x63\x8A\
\x99\x6C\xB8\x22\xD5\x44\xEB\xCB\xC4\x4F\xB7\x74\x78\x08\x4F\x91\
\xB0\xE6\x36\x6D\xC8\x49\x8D\x1A\xDC\x91\x80\x9C\x8B\x6B\xB8\x71\
\x68\x5A\xC0\xBD\x12\xAD\xD1\x84\xBF\x22\xB3\x52\xEF\x5C\xDE\x51\
\x07\x01\xB4\xD2\x12\xD7\x1D\xE0\x01\x4E\x7D\x5A\xF0\x38\xA2\x36");*/
buf[3] = 0x03;
buf[4] = lit(sed.serverip,1);
buf[5] = lit(sed.serverip,2);
buf[6] = lit(sed.serverip,3);
buf[7] = lit(sed.serverip,4);
//memcpy(buf+4,(char *)&Gv->ipl,4);
fSend(s,buf);
}
break;
case '\x62':
break;
default:
FD_ZERO(&all);
FD_SET(client[s],&all);
nfds=client[s]+1;
if (select(nfds, &all, NULL, NULL, &Ti->timeout)>0)
{
Receive(s, 2560, 1);
}
printf("舅荐绝绰 皋矫瘤: 辨捞[%x] 疙飞[%x] 鞠龋拳[%x]\n", buffer[s][2], buffer[s][3],buffer[s][4] );
break;
}
}
else // Sortta error type thing, they disconnected already
{
Disconnect(s);
}
}
void ServerList::SockClose () // Close all sockets for shutdown
{
int i;
closesocket(sockfd);
for (i=0;i<now;i++) closesocket(client[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -