String cookies(const KURL& url) { DeprecatedString str = url.url(); char domainBuffer[SIZE_OF_LATIN1_BUFFERS]; char pathBuffer[SIZE_OF_LATIN1_BUFFERS]; int tl_domainLocationInUrlBegins = str.find("://") + SIZE_OF_COLONSLASHSLASH; int tl_domainLocationInUrlEnds = str.find("/",tl_domainLocationInUrlBegins) - 1; int tl_pathLocationInUrlEnds = str.findRev("/"); strncpy(domainBuffer, str.ascii() + tl_domainLocationInUrlBegins, tl_domainLocationInUrlEnds - tl_domainLocationInUrlBegins + 1); domainBuffer[tl_domainLocationInUrlEnds - tl_domainLocationInUrlBegins + 1] = '\0'; strncpy(pathBuffer, str.ascii() + tl_domainLocationInUrlEnds + 1, tl_pathLocationInUrlEnds - tl_domainLocationInUrlEnds); pathBuffer[tl_pathLocationInUrlEnds - tl_domainLocationInUrlEnds] = '\0'; char* cookStr = WebKitApollo::g_HostFunctions->getJavaScriptCookies(domainBuffer,pathBuffer); if(!cookStr) { return String(); } String cookieString(cookStr); ::free(cookStr); return cookieString; }
void FTPDirectoryTokenizer::parseAndAppendOneLine(const String& inputLine) { ListResult result; DeprecatedString depString = inputLine.deprecatedString(); const char* line = depString.ascii(); FTPEntryType typeResult = parseOneFTPLine(line, m_listState, result); // FTPMiscEntry is a comment or usage statistic which we don't care about, and junk is invalid data - bail in these 2 cases if (typeResult == FTPMiscEntry || typeResult == FTPJunkEntry) return; String filename(result.filename, result.filenameLength); if (result.type == FTPDirectoryEntry) { filename.append("/"); // We have no interest in linking to "current directory" if (filename == "./") return; } LOG(FTP, "Appending entry - %s, %s", filename.ascii().data(), result.fileSize.ascii().data()); appendEntry(filename, processFilesizeString(result.fileSize, result.type == FTPDirectoryEntry), processFileDateString(result.modifiedTime), result.type == FTPDirectoryEntry); }
void ResourceHandleManager::add(ResourceHandle* job, FrameQtClient* frameClient) { ResourceHandleInternal* d = job->getInternal(); DeprecatedString url = d->m_request.url().url(); KIO::Job* kioJob = 0; if (job->method() == "POST") { DeprecatedString postData = job->postData().flattenToString().deprecatedString(); QByteArray postDataArray(postData.ascii(), postData.length()); kioJob = KIO::http_post(KUrl(url), postDataArray, false); kioJob->addMetaData("PropagateHttpHeader", "true"); kioJob->addMetaData("content-type", "Content-Type: application/x-www-form-urlencoded"); } else kioJob = KIO::get(KUrl(url), false, false); Q_ASSERT(kioJob != 0); QObject::connect(kioJob, SIGNAL(data(KIO::Job*, const QByteArray&)), this, SLOT(slotData(KIO::Job*, const QByteArray&))); QObject::connect(kioJob, SIGNAL(mimetype(KIO::Job*, const QString&)), this, SLOT(slotMimetype(KIO::Job*, const QString&))); QObject::connect(kioJob, SIGNAL(result(KJob*)), this, SLOT(slotResult(KJob*))); m_jobToKioMap.insert(job, kioJob); m_kioToJobMap.insert(kioJob, job); if (!m_frameClient) m_frameClient = frameClient; else ASSERT(m_frameClient == frameClient); }
/** * Test a POST form transfer */ static void TestNetworkPostTransfer() { // FIXME Setup a http server to serve the files TestManager::AssertTrue("No web server setup for the tests", false); return; const std::string aURL(TEST_WEB_SITE"testpostwithparam.php"); std::string aPath = TestManager::GetInstance().getPath() + "NetworkTests/Refs/testpostwithparam.html"; const std::string aRef(aPath); BIResourceHandleManager* aResourceHandleManager = getBIResourceHandleManager(); TestManager::AssertTrue("Transfer Job Manager obtained", aResourceHandleManager != NULL); std::string aFileName; GetTemporaryUnexistingFileName("/tmp/transfer", ".txt", aFileName); TestResourceHandleClient aTestResourceHandleClient(aFileName); FormData formData; DeprecatedString aParams; aParams = "param1=toto¶m2=kiki"; formData.appendData( static_cast<const void *> (aParams.ascii()), aParams.length() ); ResourceRequest aResourceRequest = ResourceRequest(static_cast<const KURL&> (aURL.c_str())); aResourceRequest.setHTTPMethod("POST"); aResourceRequest.setHTTPReferrer(TEST_WEB_SITE); aResourceRequest.setHTTPBody(formData.copy());; RefPtr<BIResourceHandle> aResourceHandle = BIResourceHandle::create(aResourceRequest, &aTestResourceHandleClient, 0, false, false, false); TestManager::AssertTrue("FormData flatten", aResourceRequest.httpBody()->flattenToString() == "param1=toto¶m2=kiki" ); TestManager::AssertTrue("Form data with correct element", aResourceRequest.httpBody()->elements().size() == 1 ); TestManager::AssertTrue("Correct Metadata", aResourceRequest.httpReferrer() == TEST_WEB_SITE ); TestManager::AssertTrue("Correct Method", aResourceHandle->method() == "POST"); gTransferFileCount = 1; // Wait for the end of the transfer. gTimeout = false; WebCore::Timer<NetworkTest> aTimeoutTimer(NULL,&NetworkTest::TimeoutCallback); aTimeoutTimer.startOneShot(20); // timeout in 20s BIEventLoop* aEventLoop = BAL::getBIEventLoop(); BIEvent* event; while( gTransferFileCount && !gTimeout ) { aEventLoop->WaitEvent(event); } TestManager::AssertTrue("Transfer done", !gTransferFileCount ); BALFileComparison aFileComparison; bool bEqual = aFileComparison.AreEqual( aFileName, aRef ); TestManager::AssertTrue("File as expected", bEqual ); unlink( aFileName.c_str() ); }
static inline void mapAttributeToCSSProperty(HashMap<AtomicStringImpl*, int>* propertyNameToIdMap, const QualifiedName& attrName, const char* cssPropertyName = 0) { int propertyId = 0; if (cssPropertyName) propertyId = cssPropertyIdForName(cssPropertyName, strlen(cssPropertyName)); else { DeprecatedString propertyName = attrName.localName().deprecatedString(); propertyId = cssPropertyIdForName(propertyName.ascii(), propertyName.length()); } ASSERT(propertyId > 0); propertyNameToIdMap->set(attrName.localName().impl(), propertyId); }
bool HTMLFormElement::formData(FormData &form_data) const { DeprecatedCString enc_string = ""; // used for non-multipart data DeprecatedString str = m_acceptcharset.deprecatedString(); str.replace(',', ' '); DeprecatedStringList charsets = DeprecatedStringList::split(' ', str); TextEncoding encoding(InvalidEncoding); Frame *frame = document()->frame(); for (DeprecatedStringList::Iterator it = charsets.begin(); it != charsets.end(); ++it) { if ((encoding = TextEncoding((*it).latin1())).isValid()) break; } if (!encoding.isValid()) { if (frame) encoding = TextEncoding(frame->encoding().latin1()); else encoding = TextEncoding(Latin1Encoding); } for (unsigned i = 0; i < formElements.size(); ++i) { HTMLGenericFormElement* current = formElements[i]; FormDataList lst(encoding); if (!current->disabled() && current->appendFormData(lst, m_multipart)) { for (DeprecatedValueListConstIterator<FormDataListItem> it = lst.begin(); it != lst.end(); ++it) { if (!m_multipart) { // handle ISINDEX / <input name=isindex> special // but only if its the first entry if ( enc_string.isEmpty() && (*it).m_data == "isindex" ) { ++it; enc_string += encodeCString( (*it).m_data ); } else { if(!enc_string.isEmpty()) enc_string += '&'; enc_string += encodeCString((*it).m_data); enc_string += "="; ++it; enc_string += encodeCString((*it).m_data); } } else { DeprecatedCString hstr("--"); hstr += m_boundary.deprecatedString().latin1(); hstr += "\r\n"; hstr += "Content-Disposition: form-data; name=\""; hstr += (*it).m_data.data(); hstr += "\""; // if the current type is FILE, then we also need to // include the filename if (current->hasLocalName(inputTag) && static_cast<HTMLInputElement*>(current)->inputType() == HTMLInputElement::FILE) { DeprecatedString path = static_cast<HTMLInputElement*>(current)->value().deprecatedString(); // FIXME: This won't work if the filename includes a " mark, // or control characters like CR or LF. This also does strange // things if the filename includes characters you can't encode // in the website's character set. hstr += "; filename=\""; hstr += encoding.fromUnicode(path.mid(path.findRev('/') + 1), true); hstr += "\""; if (!static_cast<HTMLInputElement*>(current)->value().isEmpty()) { DeprecatedString mimeType = frame ? frame->mimeTypeForFileName(path).deprecatedString() : DeprecatedString(); if (!mimeType.isEmpty()) { hstr += "\r\nContent-Type: "; hstr += mimeType.ascii(); } } } hstr += "\r\n\r\n"; ++it; // append body form_data.appendData(hstr.data(), hstr.length()); const FormDataListItem &item = *it; size_t dataSize = item.m_data.size(); if (dataSize != 0) form_data.appendData(item.m_data, dataSize - 1); else if (!item.m_path.isEmpty()) form_data.appendFile(item.m_path); form_data.appendData("\r\n", 2); } } } } if (m_multipart) enc_string = ("--" + m_boundary.deprecatedString() + "--\r\n").ascii(); form_data.appendData(enc_string.data(), enc_string.length()); return true; }
DeprecatedCString StreamingTextDecoderICU::fromUnicode(const DeprecatedString &qcs, bool allowEntities) { TextEncodingID encoding = m_encoding.effectiveEncoding().encodingID(); if (encoding == WinLatin1Encoding && qcs.isAllLatin1()) return qcs.latin1(); if ((encoding == WinLatin1Encoding || encoding == UTF8Encoding || encoding == ASCIIEncoding) && qcs.isAllASCII()) return qcs.ascii(); // FIXME: We should see if there is "force ASCII range" mode in ICU; // until then, we change the backslash into a yen sign. // Encoding will change the yen sign back into a backslash. DeprecatedString copy = qcs; copy.replace('\\', m_encoding.backslashAsCurrencySymbol()); if (!m_converterICU) createICUConverter(); if (!m_converterICU) return DeprecatedCString(); // FIXME: when DeprecatedString buffer is latin1, it would be nice to // convert from that w/o having to allocate a unicode buffer char buffer[ConversionBufferSize]; const UChar* source = reinterpret_cast<const UChar*>(copy.unicode()); const UChar* sourceLimit = source + copy.length(); UErrorCode err = U_ZERO_ERROR; DeprecatedString normalizedString; if (UNORM_YES != unorm_quickCheck(source, copy.length(), UNORM_NFC, &err)) { normalizedString.truncate(copy.length()); // normalization to NFC rarely increases the length, so this first attempt will usually succeed int32_t normalizedLength = unorm_normalize(source, copy.length(), UNORM_NFC, 0, reinterpret_cast<UChar*>(const_cast<DeprecatedChar*>(normalizedString.unicode())), copy.length(), &err); if (err == U_BUFFER_OVERFLOW_ERROR) { err = U_ZERO_ERROR; normalizedString.truncate(normalizedLength); normalizedLength = unorm_normalize(source, copy.length(), UNORM_NFC, 0, reinterpret_cast<UChar*>(const_cast<DeprecatedChar*>(normalizedString.unicode())), normalizedLength, &err); } source = reinterpret_cast<const UChar*>(normalizedString.unicode()); sourceLimit = source + normalizedLength; } DeprecatedCString result(1); // for trailing zero if (allowEntities) ucnv_setFromUCallBack(m_converterICU, UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_XML_DEC, 0, 0, &err); else { ucnv_setSubstChars(m_converterICU, "?", 1, &err); ucnv_setFromUCallBack(m_converterICU, UCNV_FROM_U_CALLBACK_SUBSTITUTE, 0, 0, 0, &err); } ASSERT(U_SUCCESS(err)); if (U_FAILURE(err)) return DeprecatedCString(); do { char* target = buffer; char* targetLimit = target + ConversionBufferSize; err = U_ZERO_ERROR; ucnv_fromUnicode(m_converterICU, &target, targetLimit, &source, sourceLimit, 0, true, &err); int count = target - buffer; buffer[count] = 0; result.append(buffer); } while (err == U_BUFFER_OVERFLOW_ERROR); return result; }
void ResourceHandleManager::startJob(ResourceHandle* job) { ResourceHandleInternal* d = job->getInternal(); DeprecatedString url = job->request().url().url(); d->m_handle = curl_easy_init(); #ifndef NDEBUG if (getenv("DEBUG_CURL")) curl_easy_setopt(d->m_handle, CURLOPT_VERBOSE, 1); #endif curl_easy_setopt(d->m_handle, CURLOPT_PRIVATE, job); curl_easy_setopt(d->m_handle, CURLOPT_ERRORBUFFER, m_curlErrorBuffer); curl_easy_setopt(d->m_handle, CURLOPT_WRITEFUNCTION, writeCallback); curl_easy_setopt(d->m_handle, CURLOPT_WRITEDATA, job); curl_easy_setopt(d->m_handle, CURLOPT_HEADERFUNCTION, headerCallback); curl_easy_setopt(d->m_handle, CURLOPT_WRITEHEADER, job); curl_easy_setopt(d->m_handle, CURLOPT_AUTOREFERER, 1); curl_easy_setopt(d->m_handle, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(d->m_handle, CURLOPT_MAXREDIRS, 10); curl_easy_setopt(d->m_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_easy_setopt(d->m_handle, CURLOPT_SHARE, m_curlShareHandle); curl_easy_setopt(d->m_handle, CURLOPT_DNS_CACHE_TIMEOUT, 60 * 5); // 5 minutes // enable gzip and deflate through Accept-Encoding: curl_easy_setopt(d->m_handle, CURLOPT_ENCODING, ""); // url must remain valid through the request ASSERT(!d->m_url); d->m_url = strdup(url.ascii()); curl_easy_setopt(d->m_handle, CURLOPT_URL, d->m_url); if (m_cookieJarFileName) { curl_easy_setopt(d->m_handle, CURLOPT_COOKIEFILE, m_cookieJarFileName); curl_easy_setopt(d->m_handle, CURLOPT_COOKIEJAR, m_cookieJarFileName); } if (job->request().httpHeaderFields().size() > 0) { struct curl_slist* headers = 0; HTTPHeaderMap customHeaders = job->request().httpHeaderFields(); HTTPHeaderMap::const_iterator end = customHeaders.end(); for (HTTPHeaderMap::const_iterator it = customHeaders.begin(); it != end; ++it) { String key = it->first; String value = it->second; String headerString(key); headerString.append(": "); headerString.append(value); CString headerLatin1 = headerString.latin1(); headers = curl_slist_append(headers, headerLatin1.data()); } curl_easy_setopt(d->m_handle, CURLOPT_HTTPHEADER, headers); d->m_customHeaders = headers; } if ("GET" == job->request().httpMethod()) curl_easy_setopt(d->m_handle, CURLOPT_HTTPGET, TRUE); else if ("POST" == job->request().httpMethod()) setupPOST(job); else if ("PUT" == job->request().httpMethod()) setupPUT(job); else if ("HEAD" == job->request().httpMethod()) curl_easy_setopt(d->m_handle, CURLOPT_NOBODY, TRUE); CURLMcode ret = curl_multi_add_handle(m_curlMultiHandle, d->m_handle); // don't call perform, because events must be async // timeout will occur and do curl_multi_perform if (ret && ret != CURLM_CALL_MULTI_PERFORM) { #ifndef NDEBUG printf("Error %d starting job %s\n", ret, job->request().url().url().ascii()); #endif job->cancel(); return; } }