char* getip(char *hostname){
HOSTENT *host;
char ip[MAX_PATH];
IN_ADDR **data;
host=gethostbyname(hostname);
if(host==NULL){return "error";}
data=(IN_ADDR**)host->h_addr_list;
return inet_ntoa(**data);
}
BOOL recvorsend(SOCKET sock,BOOL choice,char* order){
int re,rel;
DWORD er;
rel=0;
if(choice){
char answer[MAX_PATH],*translate;
while(TRUE){
Sleep(200);
re=recv(sock,answer,sizeof(answer),MSG_PEEK);
if(rel==0){rel=re;continue;}
if(re!=rel){continue;}else{break;}
}
re=recv(sock,answer,sizeof(answer),0);
er=GetLastError();
translate=(char*)calloc(re+1,sizeof(char));
strncpy(translate,answer,re);
translate[re+1]='\0';
if(re!=SOCKET_ERROR){cout<<translate;return TRUE;}else{cout<<"error recving answer from host"<<endl;return FALSE;}
}else{
char command[MAX_PATH],*addition="\n";
int len;
if(order==NULL){getvalue(command,TRUE);}else{strcpy(command,order);}
if(!strcmp(command,"close connect")){return FALSE;}
len=strlen(command);
command[len+1]='\0';
command[len]='\n';
re=send(sock,command,strlen(command),0);
er=GetLastError();
if(re!=SOCKET_ERROR){return TRUE;}else{return FALSE;}
}
}
DWORD WINAPI createDATACHANNEL(LPVOID port){
int re;
SOCKET sock,sockdata;
SOCKADDR_IN data;
sock=sockcreate(SOCK_STREAM);
data.sin_addr.S_un.S_addr=INADDR_ANY;
data.sin_family=AF_INET;
data.sin_port=htons((int)port);
if(bind(sock,(sockaddr*)&data,sizeof(data))==SOCKET_ERROR){cout<<"error bind port"<<endl;return 0;}
if(listen(sock,3)==SOCKET_ERROR){cout<<"error listen"<<endl;return 0;}
sockdata=accept(sock,NULL,NULL);
if(sockdata==INVALID_SOCKET){cout<<"error accetting socket error"<<endl;return 0;}else{cout<<sockdata<<endl;return 12;}
}
BOOL loginandport(SOCKET sock,char *user,char *pass,int port){
char command[MAX_PATH];
SOCKET sockdata;
HANDLE thread;
DWORD id;
char *ip=getip("");
recvorsend(sock,TRUE,NULL);
strcpy(command,"user ");
strcat(command,user);
if(!recvorsend(sock,FALSE,command)){return FALSE;}
recvorsend(sock,TRUE,NULL);
Sleep(500);
strcpy(command,"pass ");
strcat(command,pass);
if(!recvorsend(sock,FALSE,command)){return FALSE;}
recvorsend(sock,TRUE,NULL);
Sleep(500);
thread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)createDATACHANNEL,(LPVOID)port,0,&id);
Sleep(100);
strcpy(command,tranportcom(ip,port));
if(!recvorsend(sock,FALSE,command)){return FALSE;}
GetExitCodeThread(thread,&id);
sockdata=(SOCKET)id;
while(id==STILL_ACTIVE){
GetExitCodeThread(thread,&id);
sockdata=(SOCKET)id;
}
recvorsend(sock,TRUE,NULL);
return TRUE;
}
}