Example #1
0
/* http protocol */
static int mod_http_set_keepalive(calipso_request_t *request)
{
	const char * conn;
	calipso_reply_t *reply;
	calipso_client_t *client;
	client = calipso_request_get_client(request);
	reply = calipso_request_get_reply(request);

	client->keepalive = NOK;
	conn = calipso_request_get_header_value(request, "connection");
	
	if(conn != NULL && !strcasecmp(conn,"keep-alive")) {
		/*limit keep alives*/
		int max;
		client->keepalives++;
		max = client->server->keep_alive_max - client->keepalives;
		
		if(max > 0) {
			client->keepalive = OK;
			
			if(USE_HEADER_HTTP_KEEPALIVE_TIMEMAX) {
				calipso_reply_set_header_value(reply, "Keep-Alive", 
					"timeout=%d, max=%d", KEEPALIVE_TIMEOUT, max);
			}
		}
	} 

	calipso_reply_set_header_value(reply, "Connection", 
						client->keepalive ? "Keep-Alive" : "Close");
	
	return OK;
}
Example #2
0
static int request_set_header_vals(calipso_request_t *request)
{
    char *host = calipso_request_get_header_value(request, "host");
    char *clen = calipso_request_get_header_value(request, "content-length");

    if (host) {
        char * p = strrchr(host, ':');
        request->host =
            (p) ? cpo_pool_strndup(request->pool, host, p - host) : cpo_pool_strdup(
                request->pool, host);
    }

    if (clen) {
        request->body_length = cpo_atoi(clen);
    } /*XXX: transfer-coding */
    return CPO_OK;
}
Example #3
0
static int mod_http_set_if_modified_since(calipso_request_t *request, const char *http_date)
{
	const char *modified_since = calipso_request_get_header_value(request, "if-modified-since");

	if(modified_since && !strcmp(http_date , modified_since)) {

		calipso_reply_set_status(request->reply, HTTP_NOT_MODIFIED);
		return OK;	
	}
	return NOK;
}
Example #4
0
static int mod_http_partial_content(calipso_request_t *request, int fd)
{
	/* HTTP_PARTIAL_CONTENT */

    char *range;
    char *type;
    char *offset1;
	char *offset2;
    
    uintmax_t total_size;
    uintmax_t partial_size;

    range = calipso_request_get_header_value(request, "range");

    if (range) {
        calipso_reply_set_status(request->reply, HTTP_PARTIAL_CONTENT);
		type = offset1 = offset2 = NULL;
		http_range_tokenize(range, &type, &offset1 , &offset2);
        TRACE("RANGE: %s\n", range);
        TRACE("type: %s offset1: %s offset2: %s \n", type, offset1, offset2);

        total_size = calipso_resource_get_size(request->reply->resource);
        partial_size = total_size - atol(offset1);
		TRACE("partial size: %llu ? total size %llu\n", partial_size, total_size);

		calipso_reply_set_header_value(request->reply, 
			"content-range", "bytes=%s-%llu/%llu", offset1, total_size - 1, total_size);
        calipso_reply_set_header_value(request->reply, 
			"Content-Length", "%llu", partial_size);

        /*set fd position */
        (off_t)lseek(fd, (off_t)atoi(offset1), SEEK_SET);

    }
/* !HTTP_PARTIAL_CONTENT*/
	return OK;
}