static RetainPtr<CFDictionaryRef> createPropertyListRep(Archive* archive) { RetainPtr<CFMutableDictionaryRef> propertyList(AdoptCF, CFDictionaryCreateMutable(0, 3, 0, &kCFTypeDictionaryValueCallBacks)); RetainPtr<CFDictionaryRef> mainResourceDict = createPropertyListRepresentationFromResource(archive->mainResource(), true); if (!mainResourceDict) return 0; CFDictionarySetValue(propertyList.get(), LegacyWebArchiveMainResourceKey, mainResourceDict.get()); RetainPtr<CFMutableArrayRef> subresourcesArray(AdoptCF, CFArrayCreateMutable(0, archive->subresources().size(), &kCFTypeArrayCallBacks)); const Vector<RefPtr<ArchiveResource> >& subresources(archive->subresources()); for (unsigned i = 0; i < subresources.size(); ++i) { RetainPtr<CFDictionaryRef> subresource = createPropertyListRepresentationFromResource(subresources[i].get(), false); if (subresource) CFArrayAppendValue(subresourcesArray.get(), subresource.get()); else LOG(Archives, "LegacyWebArchive - Failed to create property list for subresource"); } if (CFArrayGetCount(subresourcesArray.get())) CFDictionarySetValue(propertyList.get(), LegacyWebArchiveSubresourcesKey, subresourcesArray.get()); RetainPtr<CFMutableArrayRef> subframesArray(AdoptCF, CFArrayCreateMutable(0, archive->subframeArchives().size(), &kCFTypeArrayCallBacks)); const Vector<RefPtr<Archive> >& subframeArchives(archive->subframeArchives()); for (unsigned i = 0; i < subframeArchives.size(); ++i) { RetainPtr<CFDictionaryRef> subframeArchive = createPropertyListRep(subframeArchives[i].get()); if (subframeArchive) CFArrayAppendValue(subframesArray.get(), subframeArchive.get()); else LOG(Archives, "LegacyWebArchive - Failed to create property list for subframe archive"); } if (CFArrayGetCount(subframesArray.get())) CFDictionarySetValue(propertyList.get(), LegacyWebArchiveSubframeArchivesKey, subframesArray.get()); return propertyList; }
void NetworkStateNotifier::updateState() { // Assume that we're offline until proven otherwise. m_isOnLine = false; RetainPtr<CFStringRef> str(AdoptCF, SCDynamicStoreKeyCreateNetworkInterface(0, kSCDynamicStoreDomainState)); RetainPtr<CFPropertyListRef> propertyList(AdoptCF, SCDynamicStoreCopyValue(m_store.get(), str.get())); if (!propertyList) return; if (CFGetTypeID(propertyList.get()) != CFDictionaryGetTypeID()) return; CFArrayRef netInterfaces = (CFArrayRef)CFDictionaryGetValue((CFDictionaryRef)propertyList.get(), kSCDynamicStorePropNetInterfaces); if (CFGetTypeID(netInterfaces) != CFArrayGetTypeID()) return; for (CFIndex i = 0; i < CFArrayGetCount(netInterfaces); i++) { CFStringRef interface = (CFStringRef)CFArrayGetValueAtIndex(netInterfaces, i); if (CFGetTypeID(interface) != CFStringGetTypeID()) continue; // Ignore the loopback interface. if (CFStringFind(interface, CFSTR("lo"), kCFCompareAnchored).location != kCFNotFound) continue; RetainPtr<CFStringRef> key(AdoptCF, SCDynamicStoreKeyCreateNetworkInterfaceEntity(0, kSCDynamicStoreDomainState, interface, kSCEntNetIPv4)); RetainPtr<CFArrayRef> keyList(AdoptCF, SCDynamicStoreCopyKeyList(m_store.get(), key.get())); if (keyList && CFArrayGetCount(keyList.get())) { m_isOnLine = true; break; } } }
RetainPtr<CFDictionaryRef> LegacyWebArchive::createPropertyListRepresentation(ArchiveResource* resource, MainResourceStatus isMainResource) { if (!resource) { // The property list representation of a null/empty WebResource has the following 3 objects stored as nil. // FIXME: 0 is not serializable. Presumably we need to use kCFNull here instead for compatibility. // FIXME: But why do we need to support a resource of 0? Who relies on that? RetainPtr<CFMutableDictionaryRef> propertyList(AdoptCF, CFDictionaryCreateMutable(0, 3, 0, 0)); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceDataKey, 0); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceURLKey, 0); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceMIMETypeKey, 0); return propertyList; } RetainPtr<CFMutableDictionaryRef> propertyList(AdoptCF, CFDictionaryCreateMutable(0, 6, 0, &kCFTypeDictionaryValueCallBacks)); // Resource data can be empty, but must be represented by an empty CFDataRef SharedBuffer* data = resource->data(); RetainPtr<CFDataRef> cfData; if (data) cfData.adoptCF(data->createCFData()); else cfData.adoptCF(CFDataCreate(0, 0, 0)); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceDataKey, cfData.get()); // Resource URL cannot be null RetainPtr<CFStringRef> cfURL(AdoptCF, resource->url().string().createCFString()); if (cfURL) CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceURLKey, cfURL.get()); else { LOG(Archives, "LegacyWebArchive - NULL resource URL is invalid - returning null property list"); return 0; } // FrameName should be left out if empty for subresources, but always included for main resources const String& frameName(resource->frameName()); if (!frameName.isEmpty() || isMainResource) { RetainPtr<CFStringRef> cfFrameName(AdoptCF, frameName.createCFString()); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceFrameNameKey, cfFrameName.get()); } // Set MIMEType, TextEncodingName, and ResourceResponse only if they actually exist const String& mimeType(resource->mimeType()); if (!mimeType.isEmpty()) { RetainPtr<CFStringRef> cfMIMEType(AdoptCF, mimeType.createCFString()); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceMIMETypeKey, cfMIMEType.get()); } const String& textEncoding(resource->textEncoding()); if (!textEncoding.isEmpty()) { RetainPtr<CFStringRef> cfTextEncoding(AdoptCF, textEncoding.createCFString()); CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceTextEncodingNameKey, cfTextEncoding.get()); } // Don't include the resource response for the main resource if (!isMainResource) { RetainPtr<CFDataRef> resourceResponseData = createPropertyListRepresentation(resource->response()); if (resourceResponseData) CFDictionarySetValue(propertyList.get(), LegacyWebArchiveResourceResponseKey, resourceResponseData.get()); } return propertyList; }
///////////////////////////////////////////////////////////////////////////// // WMIReferenceProvider::referenceNames // // /////////////////////////////////////////////////////////////////////////// Array<CIMObjectPath> WMIReferenceProvider::referenceNames( const String& nameSpace, const String& userName, const String& password, const CIMObjectPath& objectName, const String& resultClass, const String& role) { Array<CIMObject> objects; Array<CIMObjectPath> objectNames; PEG_METHOD_ENTER(TRC_WMIPROVIDER,"WMIReferenceProvider::referenceNames()"); // create an empty property list to save time... Array<CIMName> propNames; CIMPropertyList propertyList(propNames); // now get the objects objects = references( nameSpace, userName, password, objectName, resultClass, role, false, false, propertyList); // now get the names from the object Uint32 size = objects.size(); Uint32 i; //check if namespace is remote CIMNamespaceName oNamespace(nameSpace); String strNamespace = oNamespace.getString(); String strNamespaceLower = strNamespace; strNamespaceLower.toLower(); String strRemotePrefix = ""; if (strNamespaceLower.subString(0, 4) != "root") { Uint32 uiPos = strNamespaceLower.find("root"); if (uiPos == PEG_NOT_FOUND) throw CIMException(CIM_ERR_FAILED); strRemotePrefix = strNamespace.subString(0, uiPos); } for (i=0; i<size; i++) { CIMObjectPath oObjectPath = objects[i].getPath(); if (strRemotePrefix != "") { strNamespace = strRemotePrefix; oNamespace = strNamespace.append(oObjectPath.getNameSpace().getString()); oObjectPath.setNameSpace(oNamespace); } objectNames.append(oObjectPath); } PEG_METHOD_EXIT(); return objectNames; }