Add str2fqdn for converting hostname string into DNS name notation:

    www.xxxx.yy.com -> 3www4xxxx2yy3com0

Returned string must be freed after use by the caller.

Signed-off-by: Vadim Kochan <vadi...@gmail.com>
---
 str.c | 37 +++++++++++++++++++++++++++++++++++++
 str.h |  1 +
 2 files changed, 38 insertions(+)

diff --git a/str.c b/str.c
index 532058a..1d3e7ac 100644
--- a/str.c
+++ b/str.c
@@ -160,3 +160,40 @@ int str2mac(const char *str, uint8_t *mac, size_t len)
 
        return 0;
 }
+
+char *str2fqdn(const char *str)
+{
+       size_t slen = strlen(str);
+       size_t flen = 0;
+       char *fqdn;
+       char *tmp;
+       char *dup;
+       int i = 0;
+       int c = 0;
+
+       dup = xstrdup(str);
+       tmp = dup;
+
+       fqdn = xzmalloc(slen + 2);
+
+       while (tmp <= dup + slen && c++ <= slen) {
+               if (tmp[i] == '.' || tmp[i] == '\0') {
+                       size_t dlen;
+
+                       tmp[i] = '\0';
+                       dlen = strlen(tmp);
+                       fqdn[flen] = dlen;
+                       memcpy(&fqdn[flen + 1], tmp, dlen);
+                       flen += dlen + 1;
+                       tmp += dlen + 1;
+                       i = 0;
+
+                       continue;
+               }
+
+               i++;
+       }
+
+       xfree(dup);
+       return fqdn;
+}
diff --git a/str.h b/str.h
index 7879af6..a362c53 100644
--- a/str.h
+++ b/str.h
@@ -14,5 +14,6 @@ extern char *argv2str(int startind, int argc, char **argv);
 extern char **argv_insert(char **argv, size_t *count, const char *str);
 extern void argv_free(char **argv);
 extern int str2mac(const char *str, uint8_t *mac, size_t len);
+extern char *str2fqdn(const char *str);
 
 #endif /* STR_H */
-- 
2.11.0

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to