/*@@ @file Cookies.c @date Mon Sep 18 21:08:37 2000 @author Tom Goodale @desc Cookie stuff. @enddesc @version $Header$ @@*/ #include "cctk.h" #include #include #include "util_String.h" #include "http_Request.h" #include "http_Cookies.h" static char *rcsid = "$Header$"; CCTK_FILEVERSION(DevThorns_httpd_Cookies_c) /******************************************************************** ********************* Local Data Types *********************** ********************************************************************/ /******************************************************************** ********************* Local Routine Prototypes ********************* ********************************************************************/ /******************************************************************** ********************* Other Routine Prototypes ********************* ********************************************************************/ /******************************************************************** ********************* Local Data ***************************** ********************************************************************/ /******************************************************************** ********************* External Routines ********************** ********************************************************************/ /*@@ @routine HTTP_CookieSend @date Mon Sep 18 22:42:35 2000 @author Tom Goodale @desc Sends a cookie to a browser. @enddesc @calls @calledby @history @endhistory @@*/ int HTTP_CookieSend(httpRequest *request, const char *name, const char *value, const char *path, const char *domain, const char *expires, int secure) { char message[8000]; sprintf(message, "Set-Cookie: %s=%s", name, value); if(path) { sprintf(message, "%s; path=%s", message, path); } if(domain) { sprintf(message,"%s; domain=%s", message, domain); } if(expires) { sprintf(message,"%s; expires %s", message, expires); } if(secure) { sprintf(message,"%s; secure=TRUE", message); } strcat(message, "\r\n"); HTTP_Write(request, message, strlen(message)); return 0; } /*@@ @routine HTTP_CookieCancel @date Mon Sep 18 22:43:04 2000 @author Tom Goodale @desc Cancels a cookie. @enddesc @calls @calledby @history @endhistory @@*/ int HTTP_CookieCancel(httpRequest *request, const char *name, const char *path) { char message[8000]; /* Clear the value */ sprintf(message, "%s=", name); if(path) { sprintf(message, "%s; path=%s", message, path); } /* Pick a date in the past */ sprintf(message,"%s; expires Sun Sep 17 21:57:45 CEST 2000", message); strcat(message, "\r\n"); HTTP_Write(request, message, sizeof(message)); return 0; } /*@@ @routine HTTP_CookieGet @date Mon Sep 18 22:43:20 2000 @author Tom Goodale @desc Gets the value of a cookie from a request. @enddesc @calls @calledby @history @endhistory @@*/ char *HTTP_CookieGet(httpRequest *request, const char *name) { char *retval; const char *header; char *position; char *copy; char *start; /* Get the cookie header */ header = HTTP_HeaderValue(request,"Cookie"); retval = NULL; if(header) { copy = Util_Strdup(header); position = copy; /* Search for name=value */ while(position = strstr(position, name)) { position += strlen(name); if(*position == '=') { start = position+1; position=strstr(start, ";"); if(position) { *position = 0; } retval = Util_Strdup(start); break; } } } free(copy); return retval; } /******************************************************************** ********************* Local Routines ************************* ********************************************************************/