+typedef enum {USER_UNAUTH, USER_NORMAL, USER_ADMIN} UserType;
+
+/**Contextual information related to FCGI requests*/
+typedef struct
+{
+ /**The time of last valid user access possessing the control key**/
+ time_t control_timestamp;
+ /**A SHA-1 hash that is the control key, determining who is logged in**/
+ char control_key[CONTROL_KEY_BUFSIZ];
+ /**The received control key for the current request**/
+ char received_key[CONTROL_KEY_BUFSIZ];
+ /**The IPv4 address of the logged-in user**/
+ char control_ip[16];
+ /**Determines if the user is an admin or not**/
+ UserType user_type;
+ /**Name of the logged in user**/
+ char user_name[31];
+ /**User directory for the logged in user**/
+ char user_dir[BUFSIZ];
+ /**The name of the current module**/
+ const char *current_module;
+ /**For debugging purposes?**/
+ int response_number;
+} FCGIContext;
+
+typedef void (*ModuleHandler) (FCGIContext *context, char *params);
+
+extern bool FCGI_LockControl(FCGIContext *context, const char * user_name, UserType user_type);
+extern void FCGI_ReleaseControl(FCGIContext *context);
+extern bool FCGI_HasControl(FCGIContext *context);
+extern void FCGI_GetControlCookie(char buffer[CONTROL_KEY_BUFSIZ]);
+extern void FCGI_SendControlCookie(FCGIContext *context, bool set);