CSocketDx::CSocketDx(void* arglist)
{
m_TelnetPort = (CTelnetGeneric*) arglist;
char* msg;
unsigned long ip;
unsigned long tcp;
char* cIP = g_TelnetPipe->m_cIP;
char* cTCP = g_TelnetPipe->m_cTCPIP;
int nPort = g_TelnetPipe->m_nPort;
int nPortNIC = nPort;
msg = (char*) malloc(128);
// NIC card parameters
if((ip = inet_addr(cTCP)) == INADDR_NONE)
{
g_TelnetPipe->ErrorMessage("Invalid host TCP given");
WriteToLogFile("TCP not OK\n");
return;
}
else
{
g_TelnetPipe->ErrorMessage("Valid host TCP given");
WriteToLogFile("TCP OK\n");
}
m_sockaddr_bind.sin_family = AF_INET;
m_sockaddr_bind.sin_port = htons(nPortNIC);
m_sockaddr_bind.sin_addr = *(in_addr*)&tcp;
// device parameters
if((ip = inet_addr(cIP)) == INADDR_NONE)
{
g_TelnetPipe->ErrorMessage("Invalid host IP given");
WriteToLogFile("IP not OK\n");
return;
}
else
{
g_TelnetPipe->ErrorMessage("Valid host IP given");
WriteToLogFile("IP OK\n");
}
m_sockaddr_in.sin_family = AF_INET;
m_sockaddr_in.sin_port = htons(nPort);
m_sockaddr_in.sin_addr = *(in_addr*)&ip;
m_hSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_hSocket == INVALID_SOCKET)
{
g_TelnetPipe->m_cLastStatus = "Failed to Create socket";
WriteToLogFile("Failed to create socket\n");
free(msg);
return;
}
nRet = bind(m_hSocket, (sockaddr*)&m_sockaddr_bind, sizeof (sockaddr));
if (nRet == 0)
{
WriteToLogFile("Bind success\n");
g_TelnetPipe->m_cLastStatus = "Bind success";
free(msg);
}
else
{
// we have an error
int nWSAError = WSAGetLastError();
sprintf(msg, "Error = %d\n", nWSAError);
WriteToLogFile(msg);
switch (nWSAError)
{
case WSANOTINITIALISED:
msg = "Not initialized\n";
break;
case WSAENETDOWN:
msg = "Network down\n";
break;
case WSAEADDRINUSE:
msg = "Address in use\n";
break;
case WSAEADDRNOTAVAIL:
msg = "Invalid address for computer\n";
break;
case WSAEFAULT:
msg = "Name or NameLen problem\n";
break;
case WSAEINPROGRESS:
msg = "Blocking or in process\n";
break;
case WSAEINVAL:
msg = "Already bound\n";
break;
case WSAENOBUFS:
msg = "Not enough buffer space\n";
break;
case WSAENOTSOCK:
msg = "Not a socket\n";
break;
}
WriteToLogFile(msg);
g_TelnetPipe->m_cLastStatus = "Bind socket error";
free(msg);
return;
}
nRet = connect(m_hSocket, (sockaddr*)&m_sockaddr_in, sizeof(sockaddr));
if (nRet == 0)
{
sprintf(msg, "Connect success - %d\n", nRet);
WriteToLogFile(msg);
g_TelnetPipe->m_cLastStatus = "Connect success\n";
free(msg);
}
else
{
sprintf(msg, "Connect failure - %d\n", nRet);
WriteToLogFile(msg);
g_TelnetPipe->m_cLastStatus = "Connect failure\n";
}
}