X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuclient.git;a=blobdiff_plain;f=uclient.c;h=fb450699654e86ef370575c03cf12192429bc348;hp=82553a56847a4dae7b526c34a2396657e556e8cd;hb=878a2c6a4c7bd5d827cab436107a4ca9868d408b;hpb=dead014a7fa7a974d0ec8ef9294bc2c2092ce9f3 diff --git a/uclient.c b/uclient.c index 82553a5..fb45069 100644 --- a/uclient.c +++ b/uclient.c @@ -15,11 +15,38 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include #include "uclient.h" #include "uclient-utils.h" #include "uclient-backend.h" +char *uclient_get_addr(char *dest, int *port, union uclient_addr *a) +{ + int portval; + void *ptr; + + switch(a->sa.sa_family) { + case AF_INET: + ptr = &a->sin.sin_addr; + portval = a->sin.sin_port; + break; + case AF_INET6: + ptr = &a->sin6.sin6_addr; + portval = a->sin6.sin6_port; + break; + default: + return strcpy(dest, "Unknown"); + } + + inet_ntop(a->sa.sa_family, ptr, dest, INET6_ADDRSTRLEN); + if (port) + *port = ntohs(portval); + + return dest; +} + + struct uclient_url __hidden * uclient_get_url(const char *url_str, const char *auth_str) { @@ -196,6 +223,14 @@ int uclient_read(struct uclient *cl, char *buf, int len) return cl->backend->read(cl, buf, len); } +void uclient_disconnect(struct uclient *cl) +{ + if (!cl->backend->disconnect) + return; + + cl->backend->disconnect(cl); +} + static void __uclient_backend_change_state(struct uloop_timeout *timeout) { struct uclient *cl = container_of(timeout, struct uclient, timeout);