+/**
+ * Gets the control cookie
+ * @param buffer A storage buffer of exactly CONTROL_KEY_BUFSIZ length to
+ store the control key
+ */
+void FCGI_GetControlCookie(char buffer[CONTROL_KEY_BUFSIZ])
+{
+ const char *cookies = getenv("COOKIE_STRING");
+ const char *start = strstr(cookies, "mctxkey=");
+
+ *buffer = 0; //Clear the buffer
+ if (start != NULL) {
+ int i;
+ start += 8; //length of mctxkey=
+ for (i = 0; i < CONTROL_KEY_BUFSIZ; i++) {
+ if (*start == 0 || *start == ';') {
+ break;
+ }
+ buffer[i] = *start++;
+ }
+ buffer[i] = 0;
+ }
+}
+
+/**
+ * Sends the control key to the user as a cookie.
+ * @param context the context to work in
+ * @param set Whether to set or unset the control cookie
+ */
+void FCGI_SendControlCookie(FCGIContext *context, bool set) {
+ if (set) {
+ printf("Set-Cookie: mctxkey=%s\r\n", context->control_key);
+ } else {
+ printf("Set-Cookie: mctxkey=\r\n");
+ }
+}
+