[DIR = ./]
[FILE = ./main.cpp]
#include <iostream>
#include "socksHandler/sHandler.h"
#include <vector>
//This version has been updated to work with *nix systems
using namespace std;
int main()
{
cout << "Binary SOCKS5 Server V 0.1b" <<endl;
cout <<"Currently only supports TCP connections with the Connect command." <<endl;
//WSAData wsaData;
struct sockaddr_in server;
int sockErr;
int accSocket;
unsigned short listenPort = 6666;
fd_set constSet;
fd_set retSet;
timeval waitTime;
int socksRdy;
bool running = true;
vector<sHandler*> users;
int tmpSocket;
/*sockErr = WSAStartup(MAKEWORD(2,2),&wsaData);
if (sockErr == SOCKET_ERROR)
{
cerr <<"ERROR : " <<WSAGetLastError();
return -1;
}*/
accSocket = socket(AF_INET,SOCK_STREAM,0);
if (accSocket == SOCKET_ERROR)
{
//cerr <<"ERROR: " <<WSAGetLastError();
perror("ERROR");
return -2;
}
server.sin_family = AF_INET;
server.sin_port = htons(listenPort);
server.sin_addr.s_addr = INADDR_ANY;
sockErr = bind(accSocket,(sockaddr*)&server,sizeof(server));
if (sockErr == SOCKET_ERROR)
{
//cerr <<"Error: Unable to bind Socket: " <<WSAGetLastError() <<endl;
perror("bind");
return -3;
}
sockErr = listen(accSocket,10);
if (sockErr == SOCKET_ERROR)
{
cerr <<"Unable to listen on socket: " <<errno <<endl;
return -4;
}
waitTime.tv_sec = 0;
waitTime.tv_usec = 0;
FD_ZERO(&constSet);
FD_ZERO(&retSet);
FD_SET(accSocket,&constSet);
retSet = constSet;
while(running)
{
retSet = constSet;
socksRdy = select(accSocket+1,&retSet,NULL,NULL,&waitTime);
if (socksRdy == SOCKET_ERROR)
{
running = false;
int er = errno;
cerr <<"Unable to select() sockets: " <<er <<endl;
//if (er == WSAEINTR)
//{
// cout <<"WSAEINTR" <<endl;
//}
cerr <<"socksRdy = " <<socksRdy <<endl;
return -5;
}
if (socksRdy > 0)
{
cout <<"Accepted User" <<endl;
tmpSocket = accept(accSocket,0,0);
sHandler *usr = new sHandler(tmpSocket);
users.push_back(usr);
}
for(int i = 0; i< users.size();i++)
{
if (users[i]->active)
users[i]->m_HandleTransfers();
else
{
sHandler *tmpHandler;
vector<sHandler*>::iterator it;
for (it = users.begin(); it < users.end(); it++)
{
if ((*it)->unique_id == users[i]->unique_id)
{
tmpHandler = users[i];
users.erase(it);
break;
}
}
delete tmpHandler;
}
}
}
close(accSocket);
//WSACleanup();
return 0;
}
[DIR = ./socksHandler/]
[FILE = ./socksHandler/sAuthReply.cpp]
#include "sAuthReply.h"
sAuthReply::sAuthReply()
{
this->m_cMethod = '