+static ZEND_RESULT_CODE parse_idna(struct parse_state *state, size_t len)
+{
+#if PHP_HTTP_HAVE_IDNA2008
+ if ((state->flags & PHP_HTTP_URL_PARSE_TOIDN_2008) == PHP_HTTP_URL_PARSE_TOIDN_2008
+# if PHP_HTTP_HAVE_IDNA2003
+ || (state->flags & PHP_HTTP_URL_PARSE_TOIDN_2003) != PHP_HTTP_URL_PARSE_TOIDN_2003
+# endif
+ ) {
+#if PHP_HTTP_HAVE_LIBICU && HAVE_UIDNA_NAMETOASCII_UTF8
+ return parse_uidn_2008(state, len);
+#elif PHP_HTTP_HAVE_LIBIDN2
+ return parse_gidn_2008(state, len);
+#elif PHP_HTTP_HAVE_LIBIDNKIT2
+ return parse_kidn(state, len);
+#endif
+ }
+#endif
+
+#if PHP_HTTP_HAVE_IDNA2003
+ if ((state->flags & PHP_HTTP_URL_PARSE_TOIDN_2003) == PHP_HTTP_URL_PARSE_TOIDN_2003
+# if PHP_HTTP_HAVE_IDNA2008
+ || (state->flags & PHP_HTTP_URL_PARSE_TOIDN_2008) != PHP_HTTP_URL_PARSE_TOIDN_2008
+#endif
+ ) {
+#if HAVE_UIDNA_IDNTOASCII
+ return parse_uidn_2003(state, len);
+#elif PHP_HTTP_HAVE_LIBIDN
+ return parse_gidn_2003(state, len);
+#elif PHP_HTTP_HAVE_LIBIDNKIT
+ return parse_kidn(state, len);
+#endif
+ }
+#endif
+
+#if 0 && PHP_WIN32
+ return parse_widn_2003(state, len);
+#endif
+
+#if PHP_HTTP_HAVE_LIBICU && HAVE_UIDNA_NAMETOASCII_UTF8
+ return parse_uidn_2008(state, len);
+#elif PHP_HTTP_HAVE_LIBIDN2
+ return parse_gidn_2008(state, len);
+#elif PHP_HTTP_HAVE_LIBIDNKIT2
+ return parse_kidn(state, len);
+#elif HAVE_UIDNA_IDNTOASCII
+ return parse_uidn_2003(state, len);
+#elif PHP_HTTP_HAVE_LIBIDN
+ return parse_gidn_2003(state, len);
+#elif PHP_HTTP_HAVE_LIBIDNKIT
+ return parse_kidn(state, len);
+#endif
+
+ return SUCCESS;
+}
+
+#if HAVE_INET_PTON