struct http_request { /* Linked list */ struct http_request *Next; /* Network and File data */ struct socket *sock; struct file *filp; /* Raw data about the file */ int FileLength; /* File length in bytes */ int Time; /* mtime of the file, UNIX format */ int BytesSent; /* The number of bytes already sent */ int IsForUserspace; /* 1 means let Userspace handle this one */ /* Wait queue */ wait_queue_t sleep; /* For putting in the socket's waitqueue */ /* HTTP request information */ char FileName[256]; /* The requested filename */ int FileNameLength; /* The length of the string representing the filename */ char Agent[128]; /* The agent-string of the remote browser */ char IMS[128]; /* If-modified-since time, rfc string format */ char Host[128]; /* Value given by the Host: header */ int HTTPVER; /* HTTP-version; 9 for 0.9, 10 for 1.0 and above */ /* Derived date from the above fields */ int IMS_Time; /* if-modified-since time, UNIX format */ char TimeS[64]; /* File mtime, rfc string representation */ char LengthS[14]; /* File length, string representation */ char *MimeType; /* Pointer to a string with the mime-type based on the filename */ __kernel_size_t MimeLength; /* The length of this string */ }; /* struct kHTTPd_threadinfo represents the four queues that 1 thread has to deal with. It is padded to occupy 1 (Intel) cache-line, to avoid "cacheline-pingpong". */ struct kHTTPd_threadinfo { struct http_request* WaitForHeaderQueue; struct http_request* DataSendingQueue; struct http_request* LoggingQueue; struct http_request* UserspaceQueue; char dummy[16]; /* Padding for cache-lines */ };