ip addr helpers
This commit is contained in:
1 parent
e298e1950b
commit
ecdbef8b45
3 files changed
+77
-2
No files matched your search
@@ -0,0 +1,41 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
#include <errno.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "export.h"
|
||||
#include "public/net.h"
|
||||
|
||||
EXPORT int tlsl_ip_addr_parse(const char *s, struct tlsl_ip_addr *out) {
|
||||
if (inet_pton(AF_INET, s, &out->v4) == 1) {
|
||||
out->l3proto = TLSL_L3PROTO_IPV4;
|
||||
return 0;
|
||||
}
|
||||
if (inet_pton(AF_INET6, s, &out->v6) == 1) {
|
||||
out->l3proto = TLSL_L3PROTO_IPV6;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
EXPORT str_buf_t tlsl_ip_addr_fmt(const struct tlsl_ip_addr *a) {
|
||||
char buf[INET6_ADDRSTRLEN] = { 0 };
|
||||
const char *res;
|
||||
|
||||
switch (a->l3proto) {
|
||||
case TLSL_L3PROTO_IPV4:
|
||||
res = inet_ntop(AF_INET, &a->v4, buf, sizeof(buf));
|
||||
break;
|
||||
case TLSL_L3PROTO_IPV6:
|
||||
res = inet_ntop(AF_INET6, &a->v6, buf, sizeof(buf));
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return SBUF_NULL;
|
||||
}
|
||||
if (!res)
|
||||
return SBUF_NULL;
|
||||
return sbuf_from_sview(sview_from_cstr_unbounded(buf));
|
||||
}
|
||||
Reference in new issue
Block a user