* limitations under the License.
*/
-#define USE_MAGIC_MIME_TYPE
#define _GNU_SOURCE
#include <stdlib.h>
static char *cookie_name = NULL;
static char *cookie_setter = NULL;
+static char *tmp_pattern = NULL;
struct hreq_data {
struct hreq_data *next;
.send = (void*)req_send,
.session_create = (void*)req_session_create,
.session_check = (void*)req_session_check,
- .session_close = (void*)req_session_close
+ .session_close = (void*)req_session_close,
+ .context_get = (void*)afb_context_get,
+ .context_set = (void*)afb_context_set
};
static struct hreq_data *get_data(struct afb_hreq *hreq, const char *key, int create)
return 1;
}
-#if defined(USE_MAGIC_MIME_TYPE)
-
-#if !defined(MAGIC_DB)
-#define MAGIC_DB "/usr/share/misc/magic.mgc"
-#endif
-
static void afb_hreq_reply_v(struct afb_hreq *hreq, unsigned status, struct MHD_Response *response, va_list args)
{
char *cookie;
va_end(args);
}
+#if defined(USE_MAGIC_MIME_TYPE)
+
+#if !defined(MAGIC_DB)
+#define MAGIC_DB "/usr/share/misc/magic.mgc"
+#endif
+
static magic_t lazy_libmagic()
{
static int done = 0;
/* MAGIC_MIME tells magic to return a mime of the file,
but you can specify different things */
if (verbosity)
- printf("Loading mimetype default magic database\n");
+ fprintf(stderr, "Loading mimetype default magic database\n");
result = magic_open(MAGIC_MIME_TYPE);
if (result == NULL) {
const char *extension = strrchr(filename, '.');
if (extension) {
static const char *const known[][2] = {
- { ".js", "text/javascript" },
+ { ".js", "text/javascript" },
{ ".html", "text/html" },
+ { ".css", "text/css" },
{ NULL, NULL }
};
int i = 0;
return 1;
}
+int afb_hreq_init_download_path(const char *directory)
+{
+ struct stat st;
+ size_t n;
+ char *p;
+
+ if (access(directory, R_OK|W_OK)) {
+ /* no read/write access */
+ return -1;
+ }
+ if (stat(directory, &st)) {
+ /* can't get info */
+ return -1;
+ }
+ if (!S_ISDIR(st.st_mode)) {
+ /* not a directory */
+ errno = ENOTDIR;
+ return -1;
+ }
+ n = strlen(directory);
+ while(n > 1 && directory[n-1] == '/') n--;
+ p = malloc(n + 8);
+ if (p == NULL) {
+ /* can't allocate memory */
+ errno = ENOMEM;
+ return -1;
+ }
+ memcpy(p, directory, n);
+ p[n++] = '/';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n] = 0;
+ free(tmp_pattern);
+ tmp_pattern = p;
+ return 0;
+}
+
static int opentempfile(char **path)
{
int fd;
char *fname;
- fname = strdup("XXXXXX"); /* TODO improve the path */
+ fname = strdup(tmp_pattern ? : "XXXXXX"); /* TODO improve the path */
if (fname == NULL)
return -1;
struct afb_req afb_hreq_to_req(struct afb_hreq *hreq)
{
- return (struct afb_req){ .itf = &afb_hreq_itf, .data = hreq };
+ return (struct afb_req){ .itf = &afb_hreq_itf, .req_closure = hreq };
}
static struct afb_arg req_get(struct afb_hreq *hreq, const char *name)