From: Felix Fietkau Date: Sat, 29 Mar 2014 13:49:59 +0000 (+0100) Subject: split setting url from connecting X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuclient.git;a=commitdiff_plain;h=2b80c2689068258eab5e94f92a6d1e7b7550094b split setting url from connecting Signed-off-by: Felix Fietkau --- diff --git a/uclient.c b/uclient.c index 2e3d3ae..5b71bf4 100644 --- a/uclient.c +++ b/uclient.c @@ -132,27 +132,30 @@ struct uclient *uclient_new(const char *url_str, const char *auth_str, const str return cl; } -int uclient_connect_url(struct uclient *cl, const char *url_str) +int uclient_set_url(struct uclient *cl, const char *url_str) { - struct uclient_url *url = cl->url; const struct uclient_backend *backend = cl->backend; + struct uclient_url *url = cl->url; + + url = uclient_get_url(url_str, NULL); + if (!url) + return -1; - if (url_str) { - url = uclient_get_url(url_str, NULL); - if (!url) - return -1; + if (url->backend != cl->backend) + return -1; - if (url->backend != cl->backend) - return -1; + free(cl->url); + cl->url = url; - free(cl->url); - cl->url = url; + if (backend->update_url) + backend->update_url(cl); - if (backend->update_url) - backend->update_url(cl); - } + return 0; +} - return backend->connect(cl); +int uclient_connect(struct uclient *cl) +{ + return cl->backend->connect(cl); } void uclient_free(struct uclient *cl) diff --git a/uclient.h b/uclient.h index 60b021e..3520473 100644 --- a/uclient.h +++ b/uclient.h @@ -58,13 +58,8 @@ struct uclient_cb { struct uclient *uclient_new(const char *url, const char *auth_str, const struct uclient_cb *cb); void uclient_free(struct uclient *cl); -int uclient_connect_url(struct uclient *cl, const char *url_str); - -static inline int uclient_connect(struct uclient *cl) -{ - return uclient_connect_url(cl, NULL); -} - +int uclient_set_url(struct uclient *cl, const char *url_str); +int uclient_connect(struct uclient *cl); int uclient_read(struct uclient *cl, char *buf, int len); int uclient_write(struct uclient *cl, char *buf, int len);