bool DNSResolveQueue::platformProxyIsEnabledInSystemPreferences() { ResourceHandleManager* mgr = ResourceHandleManager::sharedInstance(); String proxy = mgr->proxy(); if (proxy.length() != 0) return true; return false; }
void prefetchDNS(const String& hostname) { ResourceHandleManager* mgr = ResourceHandleManager::sharedInstance(); String proxy = mgr->proxy(); if (proxy.length() != 0) return; if (hostname.length() == 0) return; DNSResolveQueue::singleton().add(hostname); }
void SocketStreamHandleServer::initializeSocket() { m_progressState = EError; m_socket = wkcNetSocketPeer(PF_INET, SOCK_STREAM, 0); if (!m_socket) { LOG(Network, "failed to create socket %p", this); m_progressTimer.startOneShot(0); return; } char host[128] = {0}; int port = 80; ::strncpy(host, m_url.host().utf8().data(), sizeof(host)-1); if (m_url.hasPort()) port = m_url.port(); else if (m_url.protocol()=="wss") port = 443; else port = 80; m_useproxy = false; ResourceHandleManager* mgr = ResourceHandleManager::sharedInstance(); if (mgr) { String proxy = mgr->proxy(); if (proxy.length()) { URL kp(ParsedURLString, proxy); ::strncpy(host, kp.host().utf8().data(), sizeof(host)-1); port = kp.port(); m_useproxy = true; } } struct hostent* ent = 0; ent = wkcNetGetHostByNamePeer(host); if (!ent) { wkcNetClosePeer(m_socket); m_socket=0; LOG(Network, "failed to resolve name %p : %s", this, m_url.host().utf8().data()); m_progressTimer.startOneShot(0); return; } struct sockaddr_in dest = {0}; ::memcpy(&dest.sin_addr, ent->h_addr_list[0], ent->h_length); dest.sin_family = AF_INET; dest.sin_port = wkc_htons(port); int ret = wkcNetConnectPeer(m_socket, (struct sockaddr *)&dest, sizeof(dest)); if (ret) { int lasterr = wkcNetGetLastErrorPeer(); if (lasterr!=EWOULDBLOCK) { wkcNetClosePeer(m_socket); m_socket=0; LOG(Network, "failed to connect %p : %s", this, m_url.host().utf8().data()); m_progressTimer.startOneShot(0); return; } } long v = 1; wkcNetIoctlSocketPeer(m_socket, FIONBIO, &v); m_firstSend = true; if (!m_useproxy) { m_progressState = EConnected; m_progressTimer.startOneShot(0); return; } // connect to proxy char buf[1024] = {0}; port = 80; if (m_url.hasPort()) port = m_url.port(); // Ugh!: support proxy auth! // 120912 ACCESS Co.,Ltd. ::snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.1\r\nHost: %s\r\n\r\n", m_url.host().utf8().data(), port, m_url.host().utf8().data()); wkcNetSendPeer(m_socket, buf, ::strlen(buf), 0); m_progressState = EConnectingProxy; m_progressTimer.startOneShot(0.1); }