/* Author: Ram Samudrala (me@ram.org)
 * Version: O1.0
 * Detail: <http://www.ram.org/computing/sc/sc.html>
 * November 22, 1996.
 *
 * See the URL above for more information.
 */

#include "cgi_common.h"
#include "cgi_defines.h"
#include "cgi_error_handlers.h"
#include "sc_defines.h"

/******************************************************************/

int start_setting_cookies()
{
  printf("Content-type: text/html%s", HEADER_DELIMITER);
  printf("%s", HEADER_DELIMITER);
  return TRUE;
}

/******************************************************************/

int end_setting_cookies()
{
  printf("%s", HEADER_DELIMITER);
  return TRUE;
}

/******************************************************************/

int set_cookie(char name[],  char value[], char path[], 
		char expires[], char relative_url[])
{
  char buf[COOKIE_STRING_LENGTH];
  
  sprintf(buf, "Set-Cookie: %s=%s", name, value);
  if (path[0] != '\0')
    {
      strcat(buf, "; path=");
      strcat(buf, path);
    }
  if (expires[0] != '\0')
    {
      strcat(buf, "; expires=");
      strcat(buf, expires);
    }
  strcat(buf, HEADER_DELIMITER);
  printf("%s", buf);
  
  if (relative_url[0] != '\0')
    {
      if (strcmp(relative_url, "none") == 0)
	printf("Status: 204 No Content%s", HEADER_DELIMITER);
      else
	printf("Location: %s%s%s", DEFAULT_URL, relative_url, HEADER_DELIMITER);
      printf("%s", HEADER_DELIMITER);
    }
  return TRUE;
}

/******************************************************************/

int get_cookie(char name[], char value[])
{
  char cookie_string[COOKIE_STRING_LENGTH];
  char cookie_name[STRING_LENGTH];
  char *cp;
  int i, j;
  
  if (getenv("HTTP_COOKIE") != NULL)
    {
      sprintf(cookie_string, "%s", getenv("HTTP_COOKIE"));

      /* Kludge to get around browsers that don't expire cookies
       * properly.  
       */
      /* sprintf(cookie_name, "%s=clear", name);
	 if (strstr(cookie_string, cookie_name) != NULL)
	 return FALSE; */

      sprintf(cookie_name, "%s=", name);
      cp = strstr(cookie_string, cookie_name);
      if (cp != NULL)
	{
	  for(i = 0; cp[i] != '='; i++)
	    cookie_name[i] = cp[i];
	  cookie_name[i] = '\0';
	  
	  i++;
	  for(j = 0; (cp[i] != '\0') && (cp[i] != ';'); i++, j++)
	    value[j] = cp[i];
	  value[j] = '\0';
	  
	  return TRUE;
	}
      else
	return FALSE;
    }
  else
      return FALSE;
}

/******************************************************************/

int clear_cookie(char name[],  char path[], char relative_url[])
{
  printf("Set-Cookie: %s=|; path=%s; expires=09-Nov-94 23:12:40 GMT%s", name, path, HEADER_DELIMITER); 
  if (relative_url[0] != '\0')
    {
      if (strcmp(relative_url, "none") == 0)
	printf("Status: 204 No Content%s", HEADER_DELIMITER);
      else
	printf("Location: %s%s%s", DEFAULT_URL, relative_url, HEADER_DELIMITER);
      printf("%s", HEADER_DELIMITER);
    }
  return TRUE;
}

/******************************************************************/

