Esempio n. 1
0
int
serve_style_css(struct http_request *req)
{
	int		ret;
	char		*date;
	time_t		tstamp;

	tstamp = 0;
	if (http_request_header_get(req, "if-modified-since", &date)) {
		tstamp = kore_date_to_time(date);
		kore_mem_free(date);

		kore_debug("header was present with %ld", tstamp);
	}

	if (tstamp != 0 && tstamp <= static_mtime_css_style) {
		ret = http_response(req, 304, NULL, 0);
	} else {
		date = kore_time_to_date(static_mtime_css_style);
		if (date != NULL)
			http_response_header_add(req, "last-modified", date);

		http_response_header_add(req, "content-type", "text/css");
		ret = http_response(req, 200, static_css_style,
		    static_len_css_style);
	}

	return (ret);
}
Esempio n. 2
0
bool http_request_headers_finalize(http_request_t * const request) {
  header_list_t * header_list = request->headers;
  if (header_list) {

    char * method = http_request_header_get(request, ":method");

    if (!method) {
      log_append(request->log, LOG_ERROR, "Missing :method header");
      return NULL;
    }

    request->method = strdup(method);

    char * scheme = http_request_header_get(request, ":scheme");

    if (!scheme) {
      log_append(request->log, LOG_ERROR, "Missing :scheme header");
      return NULL;
    }

    request->scheme = strdup(scheme);

    if (!parse_path(request)) {
      return NULL;
    }

    parse_authority(request);
    parse_parameters(request->params, request->query_string);

    header_list_remove_pseudo_headers(header_list);

  } else {
    request->headers = header_list_init(NULL);
  }

  return request;
}
Esempio n. 3
0
int http_server_request_get_auth(struct http_server_request *req,
	struct http_auth_credentials *credentials)
{
	const char *auth;

	auth = http_request_header_get(&req->req, "Authorization");
	if (auth == NULL)
		return 0;

	if (http_auth_parse_credentials
		((const unsigned char *)auth, strlen(auth), credentials) < 0)
		return -1;
	
	return 1;
}
Esempio n. 4
0
/**
 * Parses the ':path' special header into a plain
 * path and a query string
 */
static bool parse_path(http_request_t * const request)
{
  char * path = http_request_header_get(request, ":path");

  if (!path) {
    log_append(request->log, LOG_ERROR, "No :path header provided");
    return false;
  }

  char * query = strchr(path, '?');

  if (query) {
    COPY_STRING(request->path, path, query - path);
  } else {
    request->path = strdup(path);
  }

  request->query_string = query ? strdup(query + 1) : NULL;
  return true;
}
Esempio n. 5
0
/**
 * Parses the ':authority' special header
 * into the host and port
 */
static void parse_authority(http_request_t * const request)
{
  char * authority = http_request_header_get(request, ":authority");
  request->authority = authority;

  if (authority) {
    char * port = strchr(authority, ':');

    if (port) {
      COPY_STRING(request->host, authority, port - authority);
      request->port = strtoul(port + 1, NULL, 10);
    } else {
      request->host = strdup(authority);
      request->port = 80;
    }
  } else {
    request->host = NULL;
    request->port = 0;
  }
}