#pragma comment(lib,"wsock32.lib")

#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
#include <windows.h>

#define BUFSIZE 1000

using namespace std;

int Sitovej(string text, char *jmeno_cile, char *vystupni_soubor);

int main() {
	string vysledek("");
	Sitovej(string("GET /score.php HTTP/1.1\nhost: 10.0.0.9\nUser-Agent: Nipaluv testovaci program\n\n"),"10.0.0.9","./tmp.txt");
	return 0;
}

//int main(int argc, char *argv[])
int Sitovej(string text, char *jmeno_cile, char *vystupni_soubor)
{
    WORD wVersionRequested = MAKEWORD(1,1); // Cislo verze
    WSADATA data;                           // Struktura s info. o knihovne
    //string text("GET /art/cpp/tcp_klient_windows.html HTTP/1.0\nhost: www.builder.cz\n\n");
    hostent *host;                          // Vzdaleny pocitac
    sockaddr_in serverSock;                 // Vzdaleny "konec potrubi"
    int mySocket;                           // Soket    
    char buf[BUFSIZE];                      // Prijimaci buffer
    int size, totalSize = 0;                // Pocet prijatých a odeslanych bytů
    ofstream output(vystupni_soubor);
    // Připravíme sokety na práci
    if (WSAStartup(wVersionRequested, &data) != 0)
    {
        cerr << "Nepodarilo se inicializovat sokety" << endl;
        // Podle všeho, zde se WSACleanup volat nemusí.
        return -1;
    }    
    // Zjistíme info o vzdáleném počítači
    //if ((host = gethostbyname("www.builder.cz")) == NULL)
	if ((host = gethostbyname(jmeno_cile)) == NULL)
    {
        cerr << "Spatna adresa" << endl;
        WSACleanup();
        return -1;
    }
    // Vytvoříme soket
    if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
    {
        cerr << "Nelze vytvorit soket" << endl;
        WSACleanup();
        return -1;
    }
    // Zaplníme strukturu sockaddr_in
    // 1) Rodina protokolů
    serverSock.sin_family = AF_INET;
    // 2) Číslo portu, ke kterému se připojíme
    serverSock.sin_port = htons(80);
    // 3) Nastavení IP adresy, ke které se připojíme
    memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
    // Připojení soketu
    if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
    {
        cerr << "Nelze navazat spojeni" << endl;
        WSACleanup();
        return -1;
    }
    // Odeslání dat
    if ((size = send(mySocket, text.c_str(), text.size() + 1, 0)) == -1)
    {
        cerr << "Problem s odeslanim dat" << endl;
        WSACleanup();
        return -1;
    }
    cout << "Odeslano " << size << endl;
    // Příjem dat
    text = "";
    while (((size = recv(mySocket, buf, BUFSIZE - 1, 0)) != 0) && (size != -1))
    {
        buf[size] = '\0';
        totalSize += size;
        text += buf;
    }
    if (size == -1)
    {
        cout << "Nelze prijmout data" << endl;
    }    
    // Uzavřu spojení
    closesocket(mySocket);
    WSACleanup();
    cout << "Prijato " << totalSize << " bytu" << endl << "HTTP Hlavicka:" << endl << endl;
    
    return 0;
}
