bool Inet::Request(const wchar_t* cmd,const wchar_t* url,PairDataArray head,PairDataArray content){ wstring res; wstring head_str,content_str; wstring proto,host,path; m_func.UrlSplit(url,&proto,&host,&path); Connect(host.c_str(),proto.c_str()); SetDefaultHeader(&head); m_func.HeaderJoin(head,&head_str); m_func.ContentJoin(content,&content_str); m_func.GetRequestString(cmd,url,head_str.c_str(),content_str.c_str(),&res); m_socket.Send(res.c_str(),res.size()); return true; }
TInt E32ImageFile_ELF::Translate(const char* aFileName, TUint aDataBase, TBool aAllowDllData, \ TBool aSymLkupEnabled) // // Translate a ELF format file to a E32Image file // { iSource = EElfFile; ELFFile elffile; if (!elffile.Init((const TText * const)aFileName)) return KErrGeneral; iFileName = strdup(aFileName); Adjust(ALIGN4(sizeof(E32ImageHeaderV))); // fixed for now because holes not supported SetDefaultHeader(); iHdr->iDllRefTableCount = elffile.NumberOfImportDlls(); iHdr->iExportDirCount = elffile.NumberOfExports(); iHdr->iCodeBase = elffile.iLinkedBase; if(aSymLkupEnabled) { if( !SetUpLookupTable(elffile) ) return KErrGeneral; } TInt size = ALIGN4(sizeof(E32ImageHeaderV)); // fixed for now because holes not supported iHdr->iCodeOffset = size; TInt pos = size; size+=DoCodeHeader(elffile); size += DoSymbolLookupHeader(elffile, size - pos); TInt nimports=elffile.NumberOfImports(); TInt importSectionSize; char *newImportSection=CreateImportSection(elffile, importSectionSize); TInt t=DoDataHeader(elffile, aDataBase); if (t>0) { iHdr->iDataOffset = size; size += t; } if (importSectionSize!=0) { iHdr->iImportOffset=size; size+=ALIGN4(importSectionSize); } char *newCodeRelocs=NULL; char *newDataRelocs=NULL; TInt codeRelocSize=0, dataRelocSize=0; TInt nCodeRelocs=elffile.NumberOfCodeRelocs(); TInt nDataRelocs=elffile.NumberOfDataRelocs(); if (nCodeRelocs + nDataRelocs) { Elf32_Rel **codeRelocs=new Elf32_Rel * [nCodeRelocs]; Elf32_Rel **dataRelocs=new Elf32_Rel * [nDataRelocs]; if (!elffile.GetRelocs(codeRelocs, dataRelocs)) return KErrGeneral; FixRelocs(elffile, codeRelocs, dataRelocs); if (elffile.iCodeSegmentHdr) newCodeRelocs=CreateRelocs(elffile, codeRelocs, nCodeRelocs, codeRelocSize, elffile.iCodeSegmentHdr->p_vaddr); if (elffile.iDataSegmentHdr) newDataRelocs=CreateRelocs(elffile, dataRelocs, nDataRelocs, dataRelocSize, elffile.iDataSegmentHdr->p_vaddr); if (codeRelocSize) { iHdr->iCodeRelocOffset = size; size += codeRelocSize; } if (dataRelocSize) { iHdr->iDataRelocOffset = size; size += dataRelocSize; } delete [] codeRelocs; delete [] dataRelocs; } Adjust(size); t=CopyCode(iData + pos, elffile); if (t<0) return KErrGeneral; pos += t; t = CopyExportSymInfo(iData+pos, elffile); if (t<0) return KErrGeneral; pos += t; pos += CopyData(iData + pos, elffile); if (nimports) { memcpy(iData + pos, newImportSection, importSectionSize); pos += ALIGN4(importSectionSize); } if (codeRelocSize) { memcpy(iData + pos, newCodeRelocs, codeRelocSize); pos += codeRelocSize; } if (dataRelocSize) { memcpy(iData + pos, newDataRelocs, dataRelocSize); pos += dataRelocSize; } // locate the entry point TUint entryPointOffset=elffile.GetEntryPointOffset(); // Arrange a header for this E32 Image iHdr->iCpuIdentifier = (TUint16)ECpuArmV4; // Import format is ELF-derived iHdr->iFlags |= KImageImpFmt_ELF; // ABI is ARM EABI iHdr->iFlags |= KImageABI_EABI; if (ImageIsDll(elffile)) { iHdr->iFlags |= KImageDll; if (iHdr->iDataSize && !aAllowDllData) return Print(EError, "Dll '%s' has initialised data.\n", iFileName); if (iHdr->iBssSize && !aAllowDllData) return Print(EError, "Dll '%s' has uninitialised data.\n", iFileName); } iHdr->iHeapSizeMin = elffile.iHeapCommittedSize; iHdr->iHeapSizeMax = elffile.iHeapReservedSize; iHdr->iStackSize = elffile.iStackCommittedSize; iHdr->iEntryPoint = entryPointOffset; TInt r = DetermineEntryPointType(); if (r == KErrCorrupt) return Print(EError, "File '%s': Bad Entry Point.\n", iFileName); else if (r == KErrNotSupported) return Print(EError, "File '%s': Bad Entry Point Type.\n", iFileName); SetUpExceptions(elffile); delete [] newImportSection; delete [] newCodeRelocs; delete [] newDataRelocs; return KErrNone; }