// ZazouMiniWebServerDllTest.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"
#include <ZazouMiniWebServerDll.h>

// Penser à copier la bonne version de la Dll
// dans le répertoire du projet pour tests


// Test de ZMWSSAPIHandler:zmwssapi="ZMWSSAPITest"                               
typedef struct _ZMWSSAPI_DATA {
	HANDLE hOUT;
	HANDLE hIN;
	void* ENV;
} ZMWSSAPI_DATA;

extern "C" {
	__declspec(dllexport) void ZMWSSAPITest (ZMWSSAPI_DATA* data) {
		DWORD nBytes;
		char msg[4096];
		char *myenv;
		unsigned long content_length = 0;
		
		// Simple écriture
		strcpy(msg, "Content-Type: text/html\n\n");
		WriteFile (data->hOUT, msg, strlen(msg), &nBytes, NULL);
		strcpy(msg, "<h1>Test de la SAPI de ZMWS</h1>\n");
		WriteFile (data->hOUT, msg, strlen(msg), &nBytes, NULL);
		strcpy(msg, "Test html<br>\nsur 2 lignes\n");
		WriteFile (data->hOUT, msg, strlen(msg), &nBytes, NULL);

		// Environnement
		strcpy (msg, "<h2>Affichage de l'environnement CGI passé au handler :</h2>\n");
		WriteFile (data->hOUT, msg, strlen(msg), &nBytes, NULL);
		myenv = (char*)data->ENV;
		strcpy (msg, "<br>\n");
		while (*myenv) {
			WriteFile(data->hOUT, myenv, strlen(myenv), &nBytes, NULL);
			WriteFile(data->hOUT, msg, strlen(msg), &nBytes, NULL);
			if (!strncmp(myenv, "CONTENT_LENGTH", strlen("CONTENT_LENGTH"))) {
				content_length = strtoul(myenv+strlen("CONTENT_LENGTH")+1, NULL, 10);
				::MessageBox(NULL, "Posted DATA detected", "HTTP Sniffer ;)", MB_ICONINFORMATION);
			}
			myenv += strlen(myenv)+1;
		}

		// Récupération des données postées
		if (content_length) {
			char* postdata;

			strcpy (msg, "<h2>Données postées</h2>\n");
			WriteFile (data->hOUT, msg, strlen(msg), &nBytes, NULL);

			postdata = (char*)malloc(content_length+1);
			if (!postdata) {
				strcpy (msg, "Pas assez de mémoire pour les voir ;)\n");
				WriteFile (data->hOUT, msg, strlen(msg), &nBytes, NULL);
			} else {
				ReadFile (data->hIN, postdata, content_length, &nBytes, NULL);
				WriteFile (data->hOUT, postdata, nBytes, &nBytes, NULL);
				free (postdata);
			}
		}

		// TRES IMPORTANT !!!
		// Si cette fonction n'est pas appelée :
		//    - Il y a des fuites de mémoire
		//    - La navigation est bloquée
		zmws_sapi_data_cleanup(data);
	}
}

int main(int argc, char* argv[])
{
	CBaseZMWSConfig base_config;
// Test de zmws_start_with_config_file
//	int res = zmws_start_with_config_file("C:\\Documents and Settings\\Zazou\\Mes documents\\_config.zmwsc");

// Test de zmws_get_config
//	zmws_get_config (&base_config);

	zmws_easy_start();
	zmws_wait();

	return 0;
}

