#include <string.h>
#include <stdio.h>
#include <winsock2.h>

void main(int argc,char *argv[])
{
	char buf[1024];
	unsigned long bread;

	HANDLE comport = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
	if (comport == INVALID_HANDLE_VALUE)
	{
		printf("COM3 doesn't exist!");
		return;
	}
	char hostname[256];
	char reply[256];

	WSADATA wsaData; 
	WSAStartup(0x101, &wsaData);

	gethostname(hostname,256);
	printf("Host name: %s\n",hostname);
	hostent *h = gethostbyname(hostname);
	printf("IP address: %u.%u.%u.%u\n",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
	sockaddr_in sa = { AF_INET, 80*256};
	sa.sin_addr.s_addr = *(int *)h->h_addr_list[0];
	
	SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
	bind(s, (sockaddr *)&sa, sizeof(sockaddr));
	listen(s, 1);                          // Auf Verbindungen mit Port 80 warten
	bool close=false;
	do
	{
		SOCKET a = accept(s, 0, 0);        // Verbindung annehmen
		int leng = recv(a, buf, 1024, 0);  // Daten lesen
		if (leng)
		{
			buf[leng]=0;
			printf("Data received:\n%s",buf);
			if (!strnicmp(buf,"GET / HTTP", 10))
			{
				printf("Valid HTTP request.\n");

				if (!WriteFile(comport,"T",1,&bread,0))     // Temperatur-Anfrage senden
					printf("Error %X writing to COM3!\n",GetLastError());
				else
				{
					printf("%u bytes written to COM3.\n",bread);

					unsigned long events;
//					if (!WaitCommEvent(comport,&events,0))
//						printf("Error waiting for event on COM3!");
//					else
//					{
//						printf("COM3 Event: %X\n",events);

						if (!ReadFile(comport,buf,4,&bread,0))
							printf("Error %X reading from COM3!",GetLastError());
						else
						{
							printf("%u bytes read from COM3.\n",bread);
							buf[bread]=0;
							sprintf(reply,"HTTP/1.1 200 OK\nContent-Type: text/plain\nCache-Control: no-cache\nContent-length: 18\n\nTemperatur: %s°C",buf);
							send(a,reply,strlen(reply),0);
//						}
					}
				}

			} else if (!strnicmp(buf,"GET /close HTTP", 15))
			{
				send(a,"HTTP/1.1 200 OK\nContent-Type: text/plain\nCache-Control: no-cache\nContent-length: 7\n\nClosed.",91,0);
				close=true;
			}
		}
		closesocket(a);
	} while (!close);
	closesocket(s);
	WSACleanup();
	CloseHandle(comport);
}