コード例 #1
0
ファイル: request.c プロジェクト: scottrfrancis/onion
/**
 *  @short Creates a request object
 * @memberof onion_request_t
 *
 * @param op Listen point this request is listening to, to be able to read and write data
 */
onion_request *onion_request_new(onion_listen_point *op) {
    onion_request *req;
    req=onion_low_calloc(1, sizeof(onion_request));

    req->connection.listen_point=op;
    req->connection.fd=-1;

    //req->connection=con;
    req->headers=onion_dict_new();
    onion_dict_set_flags(req->headers, OD_ICASE);
    ONION_DEBUG0("Create request %p", req);

    if (op) {
        if (op->request_init) {
            if (op->request_init(req)<0) {
                ONION_DEBUG("Invalid request, closing");
                onion_request_free(req);
                return NULL;
            }
        }
        else
            onion_listen_point_request_init_from_socket(req);
    }
    return req;
}
コード例 #2
0
ファイル: request.c プロジェクト: scottrfrancis/onion
/**
 * @short Cleans a request object to reuse it.
 * @memberof onion_request_t
 */
void onion_request_clean(onion_request* req) {
    ONION_DEBUG0("Clean request %p", req);
    onion_dict_free(req->headers);
    req->headers=onion_dict_new();
    onion_dict_set_flags(req->headers, OD_ICASE);
    req->flags&=OR_NO_KEEP_ALIVE; // I keep keep alive.
    if (req->parser_data) {
        onion_request_parser_data_free(req->parser_data);
        req->parser_data=NULL;
    }
    if (req->fullpath) {
        onion_low_free(req->fullpath);
        req->path=req->fullpath=NULL;
    }
    if (req->GET) {
        onion_dict_free(req->GET);
        req->GET=NULL;
    }
    if (req->POST) {
        onion_dict_free(req->POST);
        req->POST=NULL;
    }
    if (req->FILES) {
        onion_dict_preorder(req->FILES, unlink_files, NULL);
        onion_dict_free(req->FILES);
        req->FILES=NULL;
    }
    if (req->session_id) {
        if (onion_dict_count(req->session)==0) {
            onion_request_session_free(req);
        }
        else {
            onion_sessions_save(req->connection.listen_point->server->sessions, req->session_id, req->session);
            onion_dict_free(req->session); // Not really remove, just dereference
            req->session=NULL;
            onion_low_free(req->session_id);
            req->session_id=NULL;
        }
    }
    if (req->data) {
        onion_block_free(req->data);
        req->data=NULL;
    }
    if (req->connection.cli_info) {
        onion_low_free(req->connection.cli_info);
        req->connection.cli_info=NULL;
    }
    if (req->cookies) {
        onion_dict_free(req->cookies);
        req->cookies=NULL;
    }
    if (req->free_list) {
        onion_ptr_list_foreach(req->free_list, onion_low_free);
        onion_ptr_list_free(req->free_list);
        req->free_list=NULL;
    }
}
コード例 #3
0
ファイル: 01-hash.c プロジェクト: 511860050/onion
void t14_dict_case_insensitive(){
  INIT_LOCAL();
  
  onion_dict *d=onion_dict_new();
  
  onion_dict_add(d,"Test","OK", 0);
  FAIL_IF_NOT_EQUAL(onion_dict_get(d,"test"),NULL);
  
  onion_dict_set_flags(d,OD_ICASE);
  FAIL_IF_NOT_EQUAL_STR(onion_dict_get(d,"test"),"OK");

	onion_dict_free(d);
	
  END_LOCAL();
}