wxString CControlSocket::ConvertDomainName(wxString const& domain) { #ifdef __WXMSW__ int len = IdnToAscii(IDN_ALLOW_UNASSIGNED, domain, domain.size() + 1, 0, 0); if( !len ) { LogMessage(MessageType::Debug_Warning, _T("Could not convert domain name")); return domain; } wchar_t* output = new wchar_t[len]; int res = IdnToAscii(IDN_ALLOW_UNASSIGNED, domain, domain.size() + 1, output, len); if( !res ) { LogMessage(MessageType::Debug_Warning, _T("Could not convert domain name")); return domain; } wxString ret(output); delete [] output; return ret; #else wxScopedCharBuffer const utf8 = domain.utf8_str(); char *output = 0; if (idna_to_ascii_8z(utf8, &output, IDNA_ALLOW_UNASSIGNED)) { LogMessage(MessageType::Debug_Warning, _T("Could not convert domain name")); return domain; } wxString result = wxConvCurrent->cMB2WX(output); idn_free(output); return result; #endif }
int jeroen_win32_idn_to_ascii(const char *in, char **out){ int success = FALSE; wchar_t *in_w = jeroen_convert_UTF8_to_wchar(in); if(in_w) { wchar_t punycode[IDN_MAX_LENGTH]; int chars = IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH); free(in_w); if(chars) { *out = jeroen_convert_wchar_to_UTF8(punycode); if(*out) success = TRUE; } } return success; }
int curl_win32_idn_to_ascii(const char *in, char **out) { wchar_t *in_w = Curl_convert_UTF8_to_wchar(in); if(in_w) { wchar_t punycode[IDN_MAX_LENGTH]; if(IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH) == 0) { wprintf(L"ERROR %d converting to Punycode\n", GetLastError()); free(in_w); return 0; } free(in_w); *out = Curl_convert_wchar_to_UTF8(punycode); if(!*out) return 0; } return 1; }