summaryrefslogtreecommitdiffstats
path: root/tinyHTTP/include/tinyhttp/thttp_action.h
diff options
context:
space:
mode:
Diffstat (limited to 'tinyHTTP/include/tinyhttp/thttp_action.h')
-rw-r--r--tinyHTTP/include/tinyhttp/thttp_action.h251
1 files changed, 251 insertions, 0 deletions
diff --git a/tinyHTTP/include/tinyhttp/thttp_action.h b/tinyHTTP/include/tinyhttp/thttp_action.h
new file mode 100644
index 0000000..48b32cc
--- /dev/null
+++ b/tinyHTTP/include/tinyhttp/thttp_action.h
@@ -0,0 +1,251 @@
+/*
+* Copyright (C) 2009-2010 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO 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 General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file thttp_action.h
+ * @brief HTTP action.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango.org>
+ *
+ * @date Created: Sat Nov 8 16:54:58 2009 mdiop
+ */
+#ifndef THTTP_ACTION_H
+#define THTTP_ACTION_H
+
+#include "tinyhttp_config.h"
+
+#include "tinyhttp/thttp_session.h"
+
+#include "tsk_buffer.h"
+#include "tsk_list.h"
+#include "tsk_params.h"
+#include "tsk_options.h"
+
+THTTP_BEGIN_DECLS
+
+typedef uint64_t thttp_action_id_t;
+#define THTTP_ACTION_INVALID_ID 0
+#define THTTP_ACTION_INVALID_HANDLE tsk_null
+
+/** List of all supported options.
+* To pass an option to the sesion, use @ref THTTP_ACTION_SET_OPTION() macro.
+*/
+typedef enum thttp_action_option_e
+{
+ THTTP_ACTION_OPTION_TIMEOUT,
+
+}
+thttp_action_option_t;
+
+/** List of actions.
+*/
+typedef enum thttp_action_type_e
+{
+ /* Outgoing GET, PUT, HEAD, DELETE, .... */
+ thttp_atype_o_request,
+ /* Incoming message */
+ thttp_atype_i_message,
+
+ /* common */
+ thttp_thttp_atype_closed,
+ thttp_atype_error,
+ thttp_atype_close,
+ thttp_atype_cancel,
+ thttp_atype_timedout,
+
+}
+thttp_action_type_t;
+
+typedef enum thttp_action_param_type_e
+{
+ thttp_aptype_null = 0,
+
+ thttp_aptype_option,
+ thttp_aptype_header,
+ thttp_aptype_payload,
+}
+thttp_action_param_type_t;
+
+/**@ingroup thttp_action_group
+* @def THTTP_ACTION_SET_OPTION
+* Adds or updates an option.
+* This is a helper macro for @a thttp_action_*() functions.
+* @param ID_ENUM The id of the option to add/update (@ref thttp_action_option_t).
+* @param VALUE_STR The new value of the parameter (<i>const char*</i>).
+*
+* @code
+thttp_action_GET(session, "http://www.google.com",
+ THTTP_ACTION_SET_PARAM("timeout", "6000"),
+ THTTP_ACTION_SET_NULL());
+* @endcode
+*/
+/**@ingroup thttp_action_group
+* @def THTTP_ACTION_SET_HEADER
+* Adds new HTTP headers to the request.
+* This is a helper macro for @a thttp_action_*() functions.
+* @param NAME_STR The name of the header (<i>const char*</i>).
+* @param VALUE_STR The value of the header (<i>const char*</i>). Should not contains the trailing CRLF.
+*
+* @code
+thttp_action_GET(session, "http://www.doubango.org"
+ THTTP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ THTTP_ACTION_SET_HEADER("Connection", "Keep-Alive"),
+ THTTP_ACTION_SET_NULL());
+* @endcode
+*/
+/**@ingroup thttp_action_group
+* @def THTTP_ACTION_SET_PAYLOAD
+* Adds a content (or payload) to the request. You should also add a content-type header by using
+* @ref THTTP_ACTION_SET_HEADER() macro. You should not add the content-length header.
+* This is a helper macro for @a thttp_action_*() functions.
+* @param PAY_PTR A pointer to the payload (<i>const void*</i>).
+* @param PAY_SIZE The size of the payload (<i>tsk_size_t</i>).
+*
+* @code
+thttp_action_PUT(session, "http://www.doubango.org"
+ THTTP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ THTTP_ACTION_SET_HEADER("Connection", "Keep-Alive"),
+ THTTP_ACTION_SET_HEADER("Content-length", "application/mytype"),
+
+ THTTP_ACTION_SET_PAYLOAD("Salut", 5),
+
+ THTTP_ACTION_SET_NULL());
+* @endcode
+*/
+/**@ingroup thttp_action_group
+* @def THTTP_ACTION_SET_NULL
+* Ends action parameters. Must always be the last one.
+*/
+#define THTTP_ACTION_SET_OPTION(ID_ENUM, VALUE_STR) thttp_aptype_option, (thttp_action_option_t)ID_ENUM, (const char*)VALUE_STR
+#define THTTP_ACTION_SET_HEADER(NAME_STR, VALUE_STR) thttp_aptype_header, (const char*)NAME_STR, (const char*)VALUE_STR
+#define THTTP_ACTION_SET_PAYLOAD(PAY_PTR, PAY_SIZE) thttp_aptype_payload, (const void*)PAY_PTR, (tsk_size_t)PAY_SIZE
+#define THTTP_ACTION_SET_NULL() thttp_aptype_null
+
+typedef struct thttp_action_s
+{
+ TSK_DECLARE_OBJECT;
+
+ thttp_action_type_t type;
+ const char* url;
+ const char* method;
+
+ tsk_options_L_t *options;
+ tsk_params_L_t *headers;
+ tsk_buffer_t* payload;
+}
+thttp_action_t;
+
+typedef void thttp_action_handle_t;
+
+/**@ingroup thttp_action_group
+* @def thttp_action_CONNECT
+* Sends @a CONNECT method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_DELETE
+* Sends @a DELETE method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_GET
+* Sends @a GET method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_HEAD
+* Sends @a HEAD method request. This function is non-blocking and the result will be posted to the callback function.
+
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_OPTIONS
+* Sends @a OPTIONS method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_PATCH
+* Sends @a PATCH method request. This function is non-blocking and the result will be posted to the callback function.
+
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_POST
+* Sends @a POST method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_PUT
+* Sends @a PUT method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+/**@ingroup thttp_action_group
+* @def thttp_action_TRACE
+* Sends @a TRACE method request. This function is non-blocking and the result will be posted to the callback function.
+* @param session The @a session (or connection) to use.
+* @param urlstring The Request-URI of the request.
+* @param ... Any @b THTTP_ACTION_SET_*() macros. MUST ends with @ref THTTP_ACTION_SET_NULL().
+* @retval Zero if succeed and non-zero error code otherwise.
+*/
+TINYHTTP_API int thttp_action_perform(thttp_session_handle_t *session, const char* urlstring, const char* method, ...);
+#define thttp_action_CONNECT(session, urlstring, ...) thttp_action_perform(session, urlstring, "CONNECT", __VA_ARGS__)
+#define thttp_action_DELETE(session, urlstring, ...) thttp_action_perform(session, urlstring, "DELETE", __VA_ARGS__)
+#define thttp_action_GET(session, urlstring, ...) thttp_action_perform(session, urlstring, "GET", __VA_ARGS__)
+#define thttp_action_HEAD(session, urlstring, ...) thttp_action_perform(session, urlstring, "HEAD", __VA_ARGS__)
+#define thttp_action_OPTIONS(session, urlstring, ...) thttp_action_perform(session, urlstring, "OPTIONS", __VA_ARGS__)
+#define thttp_action_PATCH(session, urlstring, ...) thttp_action_perform(session, urlstring, "PATCH", __VA_ARGS__)
+#define thttp_action_POST(session, urlstring, ...) thttp_action_perform(session, urlstring, "POST", __VA_ARGS__)
+#define thttp_action_PUT(session, urlstring, ...) thttp_action_perform(session, urlstring, "PUT", __VA_ARGS__)
+#define thttp_action_TRACE(session, urlstring, ...) thttp_action_perform(session, urlstring, "TRACE", __VA_ARGS__)
+
+TINYHTTP_API thttp_action_t* thttp_action_create(thttp_action_type_t type, const char* urlstring, const char* method, va_list* app);
+
+typedef tsk_list_t thttp_actions_L_t; /**< List of @ref thttp_action_handle_t elements. */
+TINYHTTP_GEXTERN const tsk_object_def_t *thttp_action_def_t;
+
+THTTP_END_DECLS
+
+#endif /* THTTP_ACTION_H */
+
OpenPOWER on IntegriCloud