Exemple #1
0
/*bucket ctx*/
struct chunk_ctx * chunk_ctx_alloc(struct mpool * pool) {
    struct chunk_ctx *ctx = cpo_pool_malloc(pool, sizeof(struct chunk_ctx));
    if (ctx == NULL)
        return NULL;
    ctx->b = NULL;
    ctx->size = 0;

    return ctx;
}
Exemple #2
0
chunks_t *chunks_alloc(struct mpool * pool)
{
    chunks_t *c = cpo_pool_malloc(pool, sizeof(chunks_t));
    if (!c)
        return NULL;

    c->total_bytes = 0;
    c->list = NULL;
    c->pool = pool;
    return c;
}
Exemple #3
0
int
calipso_resource_set_stat(calipso_resource_t *resource, void *sb)
{
    
	if(resource->resource_stat == NULL) {
    	resource->resource_stat = cpo_pool_malloc(resource->pool, sizeof(struct stat));
	}

    *(struct stat *)resource->resource_stat = *(struct stat *)sb;
    return (1);
}
Exemple #4
0
int chunk_ctx_append(struct mpool * pool, struct chunk_ctx *ctx,
                     const char *data, int size)
{
    /* just make room for data */
    char * newbuf = cpo_pool_malloc(pool, ctx->size + size + 1);
    if (newbuf) {
        memmove(newbuf, ctx->b, ctx->size);
        memmove(newbuf + ctx->size, data, size + 1);

        ctx->b = newbuf;
        ctx->size += size;
        return size;
    }
    return 0;
}
Exemple #5
0
int calipso_request_init_handler(calipso_client_t * client)
{
    cpo_event_t *event = client->event;

    calipso_request_t *request = calipso_request_alloc();

    if (request) {
        request->reply = calipso_reply_alloc();
        calipso_reply_init(request->reply);
    } else
        return CPO_ERR;

    if (request->reply)
        request->reply->request = request;
    else
        return CPO_ERR;

    event->handler_read = (void*)calipso_request_event_read_handler;
    event->handler_write = (void*)calipso_request_event_write_handler;

    request->header = hash_table_create(MAX_HASH_REQUEST_HEADER, NULL);

    calipso_request_set_method(request, NULL);
    calipso_request_set_uri(request, "/");
    calipso_request_set_version(request, "HTTP/1.1");

    calipso_request_set_querystring(request, NULL);
    calipso_request_set_handler(request, NULL);

    client->client_persistent_hdl = request_persistent_handler;
    calipso_request_set_client(request, client);

    /* header head and body */
    request->header_buf = chunk_ctx_alloc(request->pool);
    request->in_filter = chunks_alloc(request->pool);

    if (request->header_buf) {
        request->header_buf->b = cpo_pool_malloc(request->pool, INPUTBUFSZ);
    }

    /*XXX: pipelining ? */
    //!calipso_client_pipeline_request(client, request);
    calipso_client_set_request(client, request);

    return CPO_OK;
}
Exemple #6
0
static int mod_http_translate(calipso_request_t *request)
{
    char *pathname = NULL;
    char *uri = NULL;
    char *documentroot = NULL;

	calipso_client_t *client = calipso_request_get_client(request);
    calipso_server_t *server = calipso_client_get_server(client);
    calipso_reply_t *reply = calipso_request_get_reply(request);
    calipso_resource_t *resource = calipso_reply_get_resource(reply);
    calipso_pool_t *pool = calipso_request_get_pool(request);

	int http_status  = calipso_reply_get_status(reply);

	if ( calipso_http_status_is_error(http_status)) {
		TRACE(" http error %d\n", http_status);
		return (0);
	}

	if( remove_dots_from_uri_path(request->uri) == -1 ) {
		calipso_reply_set_status(reply, HTTP_BAD_REQUEST);
        return 0;
	}

	if (!cpo_uri_sanity_check( request->uri )) {
       	calipso_reply_set_status(reply, HTTP_BAD_REQUEST);
        return 0;
    }

	uri = calipso_request_get_uri(request);

    //if (*uri != '/') {
    //    calipso_reply_set_status(reply, HTTP_BAD_REQUEST);
    //    return (0);
    //}

    documentroot = calipso_server_get_documentroot(server);

    if (!documentroot) {
        calipso_reply_set_status(reply, HTTP_BAD_REQUEST);
        return (0);
    }

    pathname = cpo_pool_malloc(pool, MAXPATHLEN);
    strlcpy(pathname, documentroot, MAXPATHLEN);
	cpo_uri_strdecode(uri, uri);
    if (strlcat(pathname, uri, MAXPATHLEN) >= MAXPATHLEN) {
        calipso_reply_set_status(reply, HTTP_REQUEST_URI_TOO_LARGE);
        return (0);
    }

    /* security chek */
    //if (!cpo_uri_sanity_check( pathname )) {
    //   	calipso_reply_set_status(reply, HTTP_BAD_REQUEST);
    //    return 0;
    //}

    /* decode string */
    //cpo_uri_strdecode(pathname, pathname);
    calipso_resource_set_path(resource, pathname);

    return 1;
}