blob: 6dbeb8d4a1c1a8720843bffc8d02674a60f660d4 [file] [log] [blame]
#include "soapH.h"
#include "ck.nsmap"
////////////////////////////////////////////////////////////////////////////////
//
// Example cookie server
//
////////////////////////////////////////////////////////////////////////////////
// Install as CGI application (ck.cgi).
// Alternatively, run from command line to start a stand-alone server
// $ ck.cgi <port> &
// where <port> is a port number
// Please see the ckclient.cpp file for cookie-related details.
// Remember to change the soap.cookie_domain value to your host
int main(int argc, char **argv)
{ int m, s;
struct soap soap;
soap_init(&soap);
soap.cookie_domain = "www.cs.fsu.edu"; // must be the current host name (CGI/standalone)
//soap.cookie_domain = "linprog1.cs.fsu.edu"; // our stand-alone machine
soap.cookie_path = "/"; // the path which is used to filter/set cookies with this destination
if (argc < 2)
{ soap_getenv_cookies(&soap); // CGI app: grab cookies from 'HTTP_COOKIE' env var
soap_serve(&soap);
}
else
{ m = soap_bind(&soap, NULL, atoi(argv[1]), 100);
if (m < 0)
exit(1);
fprintf(stderr, "Socket connection successful %d\n", m);
for (int i = 1; ; i++)
{ s = soap_accept(&soap);
if (s < 0)
exit(-1);
fprintf(stderr, "%d: accepted %d IP=%d.%d.%d.%d ... ", i, s, (int)(soap.ip>>24)&0xFF, (int)(soap.ip>>16)&0xFF, (int)(soap.ip>>8)&0xFF, (int)soap.ip&0xFF);
soap_serve(&soap);
fprintf(stderr, "served\n");
soap_end(&soap); // clean up
soap_free_cookies(&soap); // remove all old cookies from database so no interference when new requests with new cookies arrive
// Note: threads can have their own cookie DB which they need to cleanup before they terminate
}
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////
//
// Demo cookie
//
////////////////////////////////////////////////////////////////////////////////
int ck__demo(struct soap *soap, char **r)
{ int n;
char *s, buf[16];
// The host and path are set by soap_cookie_domain and soap_cookie_path
// which MUST be the current domain and path of the CGI app or stand-alone
// server in order to accept cookies intended for this service
s = soap_cookie_value(soap, "demo", NULL, NULL); // cookie was returned by client?
if (s)
n = atoi(s)+1; // yes: increment int value as demo example session
else
n = 1; // no: return cookie with value 1 to client to start session
sprintf(buf, "%d", n);
soap_set_cookie(soap, "demo", buf, NULL, NULL);
soap_set_cookie_expire(soap, "demo", 5, NULL, NULL); // cookie expires in 5 seconds
if ((*r = (char*)soap_malloc(soap, strlen(buf)+1)))
strcpy(*r, buf);
return SOAP_OK;
}