void WriteOperate(const CONTRACT* const pContract) { unsigned long count = GetDBSize(); if(count <2) return ; char hash[32] ={0}; char flag[1] = {0}; unsigned short valen = 1; unsigned short kenlen = 32; if(GetDBValue(0,hash,(unsigned char*)&kenlen,kenlen,flag,&valen)== false) { LogPrint("read db failed",sizeof("read db failed"),STRING); return; } if(!ReadContactAndWrite(hash)) { LogPrint("THE TX NOE IN BLOCK",sizeof("THE TX NOE IN BLOCK"),STRING); LogPrint(hash,32,HEX); } count -=1; LogPrint(hash,32,HEX); LogPrint(&count,4,HEX); while(count--) { if(GetDBValue(1,hash,(unsigned char*)&kenlen,kenlen,flag,&valen)== false) { LogPrint("read db failed",sizeof("read db failed"),STRING); return; } LogPrint(hash,32,HEX); if(!ReadContactAndWrite(hash)) { LogPrint(hash,32,HEX); LogPrint("THE TX NOE IN BLOCK",sizeof("THE TX NOE IN BLOCK"),STRING); } } }
NS_IMETHODIMP nsDOMStorage::RemoveItem(const nsAString& aKey) { if (!CacheStoragePermissions()) return NS_ERROR_DOM_SECURITY_ERR; if (aKey.IsEmpty()) return NS_OK; nsSessionStorageEntry *entry = mItems.GetEntry(aKey); if (entry && entry->mItem->IsSecure() && !IsCallerSecure()) { return NS_ERROR_DOM_SECURITY_ERR; } if (UseDB()) { #ifdef MOZ_STORAGE nsresult rv = InitDB(); NS_ENSURE_SUCCESS(rv, rv); nsAutoString value; PRBool secureItem; nsAutoString owner; rv = GetDBValue(aKey, value, &secureItem, owner); if (rv == NS_ERROR_DOM_NOT_FOUND_ERR) return NS_OK; NS_ENSURE_SUCCESS(rv, rv); rv = gStorageDB->RemoveKey(mDomain, aKey, owner, aKey.Length() + value.Length()); NS_ENSURE_SUCCESS(rv, rv); mItemsCached = PR_FALSE; BroadcastChangeNotification(); #endif } else if (entry) { // clear string as StorageItems may be referencing this item entry->mItem->ClearValue(); BroadcastChangeNotification(); } if (entry) { mItems.RawRemoveEntry(entry); } return NS_OK; }
NS_IMETHODIMP nsDOMStorageItem::GetSecure(PRBool* aSecure) { if (!mStorage->CacheStoragePermissions() || !IsCallerSecure()) { return NS_ERROR_DOM_INVALID_ACCESS_ERR; } if (mStorage->UseDB()) { nsAutoString value; return mStorage->GetDBValue(mKey, value, aSecure); } *aSecure = IsSecure(); return NS_OK; }
NS_IMETHODIMP nsDOMStorage::GetItem(const nsAString& aKey, nsIDOMStorageItem **aItem) { *aItem = nsnull; if (!CacheStoragePermissions()) return NS_ERROR_DOM_SECURITY_ERR; if (aKey.IsEmpty()) return NS_OK; nsSessionStorageEntry *entry = mItems.GetEntry(aKey); if (entry) { if (!IsCallerSecure() && entry->mItem->IsSecure()) { return NS_OK; } NS_ADDREF(*aItem = entry->mItem); } else if (UseDB()) { PRBool secure; nsAutoString value; nsAutoString unused; nsresult rv = GetDBValue(aKey, value, &secure, unused); // return null if access isn't allowed or the key wasn't found if (rv == NS_ERROR_DOM_SECURITY_ERR || rv == NS_ERROR_DOM_NOT_FOUND_ERR) return NS_OK; NS_ENSURE_SUCCESS(rv, rv); nsRefPtr<nsDOMStorageItem> newitem = new nsDOMStorageItem(this, aKey, value, secure); if (!newitem) return NS_ERROR_OUT_OF_MEMORY; entry = mItems.PutEntry(aKey); NS_ENSURE_TRUE(entry, NS_ERROR_OUT_OF_MEMORY); entry->mItem = newitem; NS_ADDREF(*aItem = newitem); } return NS_OK; }
nsIDOMStorageItem* nsDOMStorage::GetNamedItem(const nsAString& aKey, nsresult* aResult) { if (!CacheStoragePermissions()) { *aResult = NS_ERROR_DOM_SECURITY_ERR; return nsnull; } *aResult = NS_OK; if (aKey.IsEmpty()) return nsnull; nsSessionStorageEntry *entry = mItems.GetEntry(aKey); nsIDOMStorageItem* item = nsnull; if (entry) { if (IsCallerSecure() || !entry->mItem->IsSecure()) { item = entry->mItem; } } else if (UseDB()) { PRBool secure; nsAutoString value; nsresult rv = GetDBValue(aKey, value, &secure); // return null if access isn't allowed or the key wasn't found if (rv == NS_ERROR_DOM_SECURITY_ERR || rv == NS_ERROR_DOM_NOT_FOUND_ERR) return nsnull; *aResult = rv; NS_ENSURE_SUCCESS(rv, nsnull); nsRefPtr<nsDOMStorageItem> newitem = new nsDOMStorageItem(this, aKey, value, secure); if (newitem && (entry = mItems.PutEntry(aKey))) { item = entry->mItem = newitem; } else { *aResult = NS_ERROR_OUT_OF_MEMORY; } } return item; }
NS_IMETHODIMP nsDOMStorageItem::GetValue(nsAString& aValue) { if (!mStorage->CacheStoragePermissions()) return NS_ERROR_DOM_INVALID_ACCESS_ERR; if (mStorage->UseDB()) { // GetDBValue checks the secure state so no need to do it here PRBool secure; nsresult rv = mStorage->GetDBValue(mKey, aValue, &secure); if (rv == NS_ERROR_DOM_NOT_FOUND_ERR) return NS_OK; return rv; } if (IsSecure() && !IsCallerSecure()) { return NS_ERROR_DOM_SECURITY_ERR; } aValue = mValue; return NS_OK; }