summaryrefslogtreecommitdiff
path: root/uclient.h
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2015-01-16 11:21:02 +0100
committerFelix Fietkau <nbd@openwrt.org>2015-01-18 01:41:26 +0100
commit6c222d0646fa7c07be96d729009916d5af295332 (patch)
tree3e9ea61840825fee44d1fd562cd08ca6b1eceb69 /uclient.h
parent71ca932167085f313711d4259393c5f3441cc3a8 (diff)
downloaduclient-6c222d0646fa7c07be96d729009916d5af295332.tar.gz
support for connection timeout
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Diffstat (limited to 'uclient.h')
-rw-r--r--uclient.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/uclient.h b/uclient.h
index d5a0d5b..5904a38 100644
--- a/uclient.h
+++ b/uclient.h
@@ -24,12 +24,15 @@
#include <libubox/ustream.h>
#include <libubox/ustream-ssl.h>
+#define UCLIENT_DEFAULT_TIMEOUT_MS 30000
+
struct uclient_cb;
struct uclient_backend;
enum uclient_error_code {
UCLIENT_ERROR_UNKNOWN,
UCLIENT_ERROR_CONNECT,
+ UCLIENT_ERROR_TIMEDOUT,
UCLIENT_ERROR_SSL_INVALID_CERT,
UCLIENT_ERROR_SSL_CN_MISMATCH,
UCLIENT_ERROR_MISSING_SSL_CONTEXT,
@@ -59,6 +62,7 @@ struct uclient {
union uclient_addr local_addr, remote_addr;
struct uclient_url *url;
+ int timeout_msecs;
void *priv;
bool eof;
@@ -67,6 +71,7 @@ struct uclient {
int status_code;
struct blob_attr *meta;
+ struct uloop_timeout connection_timeout;
struct uloop_timeout timeout;
};
@@ -82,6 +87,21 @@ struct uclient *uclient_new(const char *url, const char *auth_str, const struct
void uclient_free(struct uclient *cl);
int uclient_set_url(struct uclient *cl, const char *url, const char *auth);
+
+/**
+ * Sets connection timeout.
+ *
+ * Provided timeout value will be used for:
+ * 1) Receiving HTTP response
+ * 2) Receiving data
+ *
+ * In case of timeout uclient will use error callback with
+ * UCLIENT_ERROR_TIMEDOUT code.
+ *
+ * @param msecs timeout in milliseconds
+ */
+int uclient_set_timeout(struct uclient *cl, int msecs);
+
int uclient_connect(struct uclient *cl);
void uclient_disconnect(struct uclient *cl);