#include "winsock2.h"
#include "ws2tcpip.h"
#include "windows.h"
#include "stdio.h" 
#pragma comment (lib,"ws2_32.lib")

void Usage()
{
printf("upflag Ver 0.0.0.1\n");
printf("\nusage:     upflag [hostname][port_number][test_to_send]\n");

printf("\nExamples:");
printf("\nupflag some_hostname 5000 ready");
printf("\nupflag some_hostname 5000 \"I am ready\"");
printf("\nupflag 192.168.0.1 5000 ready\n\n");

}

int SendMsg(SOCKET conn_socket, TCHAR *szMsg)
{
TCHAR szIncomingMsg[255];

szMsg[lstrlen(szMsg)]= '\n\0';

recv(conn_socket, szIncomingMsg, sizeof(szIncomingMsg),0);

printf("\nrecv %s Len: %d ", szIncomingMsg, (int)strlen(szIncomingMsg));

if(strstr(strlwr(szIncomingMsg), "ready") == NULL)
	return 1;

send(conn_socket, (const char *)szMsg, (int)strlen((const char *)szMsg), 0);

lstrcpy(szIncomingMsg, "");
recv(conn_socket, szIncomingMsg, sizeof(szIncomingMsg),0);

printf("\nsend %s Len: %d ", szMsg, strlen((const char *)szMsg));
printf("\nrecv %s Len: %d ", szIncomingMsg, (int)strlen(szIncomingMsg));

if(strstr(strlwr(szIncomingMsg), "done") != NULL)
	return 0;
else
	return 1;

}

int main(int argc, TCHAR* argv[])
{
SOCKET  conn_socket;  
struct hostent *hp;
struct addrinfo *targets;
struct addrinfo *target;
unsigned int addr;
struct sockaddr_in sa;
WSADATA wsaData;
int iPort;
DWORD errval;

if((argc < 2) || (lstrcmpi(argv[1] ,"/?") == 0) || (lstrcmpi(argv[1] ,"-?") == 0))
{
	Usage();
	return 1;
}

if(argc == 1)
{
	Usage();
}


if (WSAStartup(0x0101,&wsaData) == SOCKET_ERROR) 
{
	WSACleanup();
	printf("WSAStartup failed with error %d\n",WSAGetLastError());
	return 1;
}

errval=getaddrinfo(argv[1],argv[2],NULL,&targets);
/*
if((hp = gethostbyname((LPCSTR)argv[1])) == NULL)
{
	addr = inet_addr((LPCSTR)argv[1]);
	hp = gethostbyaddr((LPCSTR)&addr,4,AF_INET);
}
*/

iPort = atoi((LPCSTR)argv[2]);

conn_socket = socket(targets->ai_family, SOCK_STREAM, 0);
if (conn_socket == INVALID_SOCKET) {
	printf("My life is a lie!\n");
}

printf("\nConnecting... \n");

int z = connect(conn_socket, targets->ai_addr, targets->ai_addrlen);
printf("ok\n");

if(z == SOCKET_ERROR)
{
//	z = connect(conn_socket, (struct sockaddr*)&sa, sizeof(sa));

	if(z == SOCKET_ERROR)
	{
		printf("\nUnable to connect to host.");
		printf("\nWSAStartup failed with error %d\n",WSAGetLastError());
		return 1;
	}
	else
	{
		printf("connection was successfull.\n");
	}
}
else
{
	printf("connection was successful.\n");
}

if(SendMsg(conn_socket, argv[3]) == 0)
{
	WSACleanup();
	return 0;
}
else
{
	WSACleanup();
	return 1;
}

}