paulo@0: /* paulo@0: * $Id: http_request.h,v 1.11 2004/03/24 06:20:48 hipnod Exp $ paulo@0: * paulo@0: * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net) paulo@0: * paulo@0: * This program is free software; you can redistribute it and/or modify it paulo@0: * under the terms of the GNU General Public License as published by the paulo@0: * Free Software Foundation; either version 2, or (at your option) any paulo@0: * later version. paulo@0: * paulo@0: * This program is distributed in the hope that it will be useful, but paulo@0: * WITHOUT ANY WARRANTY; without even the implied warranty of paulo@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU paulo@0: * General Public License for more details. paulo@0: */ paulo@0: paulo@0: #ifndef GIFT_GT_HTTP_REQUEST_H_ paulo@0: #define GIFT_GT_HTTP_REQUEST_H_ paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: struct gt_http_request; paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: typedef void (*HttpCloseFunc) (struct gt_http_request *req, int error_code); paulo@0: paulo@0: typedef BOOL (*HttpReceiveFunc) (struct gt_http_request *req, char *data, paulo@0: size_t len); paulo@0: typedef BOOL (*HttpAddHeaderFunc) (struct gt_http_request *req, paulo@0: Dataset **headers); paulo@0: typedef BOOL (*HttpRedirectFunc) (struct gt_http_request *req, paulo@0: const char *host, const char *path); paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: typedef struct gt_http_request paulo@0: { paulo@0: char *host; paulo@0: char *path; paulo@0: char *request; paulo@0: char *proxy; paulo@0: paulo@0: TCPC *c; paulo@0: Dataset *headers; paulo@0: timer_id timeout; paulo@0: paulo@0: /* amount of data to expect: paulo@0: * (1) in the chunk, when Transfer-Encoding: Chunked is used paulo@0: * (2) in the body, from the Content-Length: header */ paulo@0: unsigned long size; paulo@0: size_t max_len; paulo@0: size_t recvd_len; paulo@0: paulo@0: /* number of redirects tried already */ paulo@0: int redirects; paulo@0: paulo@0: HttpReceiveFunc recv_func; paulo@0: HttpAddHeaderFunc add_header_func; paulo@0: HttpCloseFunc close_req_func; paulo@0: HttpRedirectFunc redirect_func; paulo@0: void *data; paulo@0: paulo@0: } HttpRequest; paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: HttpRequest *gt_http_request_new (const char *url, paulo@0: const char *request); paulo@0: void gt_http_request_close (HttpRequest *req, int code); paulo@0: BOOL gt_http_url_parse (char *url, char **r_host, paulo@0: char **r_path); paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: void gt_http_request_set_conn (HttpRequest *req, TCPC *c); paulo@0: void gt_http_request_set_proxy (HttpRequest *req, const char *proxy); paulo@0: void gt_http_request_set_timeout (HttpRequest *req, time_t interval); paulo@0: void gt_http_request_set_max_len (HttpRequest *req, size_t max_len); paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: void gt_http_request_handle (int fd, input_id id, TCPC *c); paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: #endif /* GIFT_GT_HTTP_REQUEST_H_ */