Index: libs/mod_neko/cgi.c
===================================================================
RCS file: /cvsroot/neko/libs/mod_neko/cgi.c,v
retrieving revision 1.22
diff -u -r1.22 cgi.c
--- libs/mod_neko/cgi.c	20 Apr 2007 14:05:48 -0000	1.22
+++ libs/mod_neko/cgi.c	30 Nov 2007 09:05:47 -0000
@@ -83,11 +83,18 @@
 	return p;
 }
 
+static void write_pair(buffer buf, char* name, char* val) {
+	buffer_append(buf, name);
+	buffer_append(buf, "=");
+	buffer_append(buf, val);
+	buffer_append(buf, "; ");
+}
+
 /**
 	set_cookie : name:string -> val:string -> void
 	<doc>Set a cookie</doc>
 **/
-static value set_cookie( value name, value v ) {
+static value set_cookie( value name, value v, value expires, value domain, value path, value secure ) {
 	mcontext *c = CONTEXT();
 	buffer b;
 	value str;
@@ -96,9 +103,28 @@
 	HEADERS_NOT_SENT("Cookie");
 	b = alloc_buffer(NULL);
 	val_buffer(b,name);
-	buffer_append(b,"=");
-	val_buffer(b,v);
-	buffer_append(b,";");
+	write_pair(b, val_string(name), val_string(v));
+
+	// now dumping the optional parameters
+	if (!val_is_null(expires)) {
+		val_check(expires, string);
+		write_pair(b, "expires", val_string(expires));
+	}
+	if (!val_is_null(domain)) {
+		val_check(domain, string);
+		write_pair(b, "domain", val_string(domain));
+	}
+	if (!val_is_null(path)) {
+		val_check(path, string);
+		write_pair(b, "path", val_string(path));
+	}
+	if (!val_is_null(secure)) {
+		val_check(secure, bool);
+		if (val_bool(secure)) {
+			write_pair(b, "secure", "");
+		}
+	}
+
 	str = buffer_to_string(b);
 	ap_table_add(c->r->headers_out,"Set-Cookie",val_string(str));
 	return val_true;
@@ -498,7 +524,7 @@
 DEFINE_PRIM(cgi_get_cwd,0);
 DEFINE_PRIM(cgi_set_main,1);
 DEFINE_PRIM(get_cookies,0);
-DEFINE_PRIM(set_cookie,2);
+DEFINE_PRIM(set_cookie,6);
 DEFINE_PRIM(get_host_name,0);
 DEFINE_PRIM(get_client_ip,0);
 DEFINE_PRIM(get_uri,0);
