X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuclient.git;a=blobdiff_plain;f=uclient.h;h=0c76f6e342d4583d5468908cf278bc59a9eeb0f7;hp=ddc8b7845f9baaaee13ab766c93db706b191ff33;hb=81fdb8fdf1470e1c7bf3124ff20d17feaeb519ee;hpb=29c798a52907b7ee28c8e001c99ceed65ebe5d39 diff --git a/uclient.h b/uclient.h index ddc8b78..0c76f6e 100644 --- a/uclient.h +++ b/uclient.h @@ -24,12 +24,15 @@ #include #include +#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,13 +62,16 @@ struct uclient { union uclient_addr local_addr, remote_addr; struct uclient_url *url; + int timeout_msecs; void *priv; bool eof; + bool data_eof; int error_code; int status_code; struct blob_attr *meta; + struct uloop_timeout connection_timeout; struct uloop_timeout timeout; }; @@ -81,11 +87,26 @@ 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); int uclient_read(struct uclient *cl, char *buf, int len); -int uclient_write(struct uclient *cl, char *buf, int len); +int uclient_write(struct uclient *cl, const char *buf, int len); int uclient_request(struct uclient *cl); char *uclient_get_addr(char *dest, int *port, union uclient_addr *a);