/* * ghttp.h -- A public interface to common http functions * Created: Christopher Blizzard , 21-Aug-1998 * * Copyright (C) 1998 Free Software Foundation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef GHTTP_H #define GHTTP_H #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _ghttp_request ghttp_request; typedef enum ghttp_type_tag { ghttp_type_get = 0, ghttp_type_options, ghttp_type_head, ghttp_type_post, ghttp_type_put, ghttp_type_delete, ghttp_type_trace, ghttp_type_connect, ghttp_type_propfind, ghttp_type_proppatch, ghttp_type_mkcol, ghttp_type_copy, ghttp_type_move, ghttp_type_lock, ghttp_type_unlock } ghttp_type; typedef enum ghttp_sync_mode_tag { ghttp_sync = 0, ghttp_async } ghttp_sync_mode; typedef enum ghttp_status_tag { ghttp_error = -1, ghttp_not_done, ghttp_done } ghttp_status; typedef enum ghttp_proc_tag { ghttp_proc_none = 0, ghttp_proc_request, ghttp_proc_response_hdrs, ghttp_proc_response } ghttp_proc; typedef struct ghttp_current_status_tag { ghttp_proc proc; /* what's it doing? */ int bytes_read; /* how many bytes have been read? */ int bytes_total; /* how many total */ } ghttp_current_status; /* create a new request object */ ghttp_request * ghttp_request_new(void); /* delete a current request object */ void ghttp_request_destroy(ghttp_request *a_request); /* Validate a uri * This will return -1 if a uri is invalid */ int ghttp_uri_validate(char *a_uri); /* Set a uri in a request * This will return -1 if the uri is invalid */ int ghttp_set_uri(ghttp_request *a_request, char *a_uri); /* Set a proxy for a request * This will return -1 if the uri is invalid */ int ghttp_set_proxy(ghttp_request *a_request, char *a_uri); /* Set a request type * This will return -1 if the request type is invalid or * unsupported */ int ghttp_set_type(ghttp_request *a_request, ghttp_type a_type); /* Set the body. * This will return -1 if the request type doesn't support it */ int ghttp_set_body(ghttp_request *a_request, char *a_body, int a_len); /* Set whether or not you want to use sync or async mode. */ int ghttp_set_sync(ghttp_request *a_request, ghttp_sync_mode a_mode); /* Prepare a request. * Call this before trying to process a request or if you change the * uri. */ int ghttp_prepare(ghttp_request *a_request); /* Set the chunk size * You might want to do this to optimize for different connection speeds. */ void ghttp_set_chunksize(ghttp_request *a_request, int a_size); /* Set a random request header */ void ghttp_set_header(ghttp_request *a_request, const char *a_hdr, const char *a_val); /* Process a request */ ghttp_status ghttp_process(ghttp_request *a_request); /* Get the status of a request */ ghttp_current_status ghttp_get_status(ghttp_request *a_request); /* Flush the received data (so far) into the response body. This is * useful for asynchronous requests with large responses: you can * periodically flush the response buffer and parse the data that's * arrived so far. */ void ghttp_flush_response_buffer(ghttp_request *a_request); /* Get the value of a random response header */ const char * ghttp_get_header(ghttp_request *a_request, const char *a_hdr); /* Get the list of headers that were returned in the response. You must free the returned string values. This function will return 0 on success, -1 on some kind of error. */ int ghttp_get_header_names(ghttp_request *a_request, char ***a_hdrs, int *a_num_hdrs); /* Abort a currently running request. */ int ghttp_close(ghttp_request *a_request); /* Clean a request */ void ghttp_clean(ghttp_request *a_request); /* Get the socket associated with a particular connection */ int ghttp_get_socket(ghttp_request *a_request); /* get the return entity body */ char * ghttp_get_body(ghttp_request *a_request); /* get the returned length */ int ghttp_get_body_len(ghttp_request *a_request); /* Get an error message for a request that has failed. */ const char * ghttp_get_error(ghttp_request *a_request); /* Parse a date string that is one of the standard * date formats */ time_t ghttp_parse_date(char *a_date); /* Return the status code. */ int ghttp_status_code(ghttp_request *a_request); /* Return the reason phrase. */ const char * ghttp_reason_phrase(ghttp_request *a_request); /* Set your username/password pair */ int ghttp_set_authinfo(ghttp_request *a_request, const char *a_user, const char *a_pass); /* Set your username/password pair for proxy */ int ghttp_set_proxy_authinfo(ghttp_request *a_request, const char *a_user, const char *a_pass); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* GHTTP_H */