Beispiel #1
0
int main() {
  request_list_t request_list;
  request_list.reqres = onion_ptr_list_new();
  request_list.running = true;
  pthread_mutex_init(&request_list.lock, NULL);

  pthread_t long_process_thread;

  o = onion_new(O_POOL);

  pthread_create(&long_process_thread, NULL, (void *)&long_process,
                 &request_list);

  onion_set_root_handler(o, onion_handler_new(&handler, &request_list, NULL));

  ONION_INFO("Listening at http://localhost:8080");
  onion_listen(o);

  // Close
  request_list.running = false;

  onion_ptr_list_foreach(request_list.reqres, (void *)free_reqres);
  onion_ptr_list_free(request_list.reqres);

  pthread_join(long_process_thread, NULL);

  onion_free(o);
  return 0;
}
Beispiel #2
0
/**
 * @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;
    }
}
Beispiel #3
0
/**
 * @short Deletes a request and all its data
 * @memberof onion_request_t
 */
void onion_request_free(onion_request *req) {
    ONION_DEBUG0("Free request %p", req);
    onion_dict_free(req->headers);

    if (req->connection.listen_point!=NULL && req->connection.listen_point->close)
        req->connection.listen_point->close(req);
    if (req->fullpath)
        onion_low_free(req->fullpath);
    if (req->GET)
        onion_dict_free(req->GET);
    if (req->POST)
        onion_dict_free(req->POST);
    if (req->FILES) {
        onion_dict_preorder(req->FILES, unlink_files, NULL);
        onion_dict_free(req->FILES);
    }
    if (req->session) {
        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
            onion_low_free(req->session_id);
        }
    }
    if (req->data)
        onion_block_free(req->data);
    if (req->connection.cli_info)
        onion_low_free(req->connection.cli_info);

    if (req->websocket)
        onion_websocket_free(req->websocket);

    if (req->parser_data) {
        onion_low_free(req->parser_data);
    }
    if (req->cookies)
        onion_dict_free(req->cookies);
    if (req->free_list) {
        onion_ptr_list_foreach(req->free_list, onion_low_free);
        onion_ptr_list_free(req->free_list);
    }
    onion_low_free(req);
}