void wxHIDDevice::AddCookieInQueue(CFTypeRef Data, int i) { //3rd Param flags (none yet) AddCookie(Data, i); if ( (*m_ppQueue)->addElement(m_ppQueue, m_pCookies[i], 0) != S_OK ) wxLogDebug(_T("HID device: adding element failed")); }
status_t BNetworkCookieJar::AddCookie(const BNetworkCookie& cookie) { BNetworkCookie* heapCookie = new(std::nothrow) BNetworkCookie(cookie); if (heapCookie == NULL) return B_NO_MEMORY; status_t result = AddCookie(heapCookie); if (result != B_OK) delete heapCookie; return result; }
status_t BNetworkCookieJar::AddCookies(const BNetworkCookieList& cookies) { for (int32 i = 0; i < cookies.CountItems(); i++) { const BNetworkCookie* cookiePtr = cookies.ItemAt(i); // Using AddCookie by reference in order to avoid multiple // cookie jar share the same cookie pointers status_t result = AddCookie(*cookiePtr); if (result != B_OK) return result; } return B_OK; }
bool serverPage::AddCookie(wxString sName, wxString sValue, wxTimeSpan& tSpan, wxString sPath, wxString sDomain, bool bSecure) { wxString sExpireDate; wxDateTime expire, now = wxDateTime::Now(); D(debug("serverPage::AddCookie(bytimespan)\n")); expire = now + tSpan; sExpireDate = expire.Format( wxT("%a, %d %b %Y %T GMT") , wxDateTime::UTC ); D(debug("-- expire date is %s\n", sExpireDate.c_str())); AddCookie(sName, sValue, sExpireDate, sPath, sDomain, bSecure); return true; }
BNetworkCookieJar::BNetworkCookieJar(BMessage* archive) : fCookieHashMap(new(std::nothrow) PrivateHashMap()) { BMessage extractedCookie; for (int32 i = 0; archive->FindMessage(kArchivedCookieMessageName, i, &extractedCookie) == B_OK; i++) { BNetworkCookie* heapCookie = new(std::nothrow) BNetworkCookie(&extractedCookie); if (heapCookie == NULL) break; if (AddCookie(heapCookie) != B_OK) { delete heapCookie; continue; } } }
BNetworkCookieJar& BNetworkCookieJar::operator=(const BNetworkCookieJar& other) { if (&other == this) return *this; for (Iterator it = GetIterator(); it.Next() != NULL;) delete it.Remove(); BArchivable::operator=(other); BFlattenable::operator=(other); fFlattened = other.fFlattened; delete fCookieHashMap; fCookieHashMap = new(std::nothrow) PrivateHashMap(); for (Iterator it = other.GetIterator(); it.HasNext();) { const BNetworkCookie* cookie = it.Next(); AddCookie(*cookie); // Pass by reference so the cookie is copied. } return *this; }
nsresult nsOperaCookieMigrator::Migrate() { if (!mStream) return NS_ERROR_FAILURE; nsresult rv; rv = ReadHeader(); if (NS_FAILED(rv)) return NS_OK; nsCOMPtr<nsICookieManager2> manager(do_GetService(NS_COOKIEMANAGER_CONTRACTID)); nsCOMPtr<nsIPermissionManager> permissionManager(do_GetService("@mozilla.org/permissionmanager;1")); PRUint8 tag; PRUint16 length, segmentLength; char* buf = nsnull; do { if (NS_FAILED(mStream->Read8(&tag))) return NS_OK; // EOF. switch (tag) { case BEGIN_DOMAIN_SEGMENT: mStream->Read16(&length); break; case DOMAIN_COMPONENT: { mStream->Read16(&length); mStream->ReadBytes(length, &buf); buf = (char*)nsMemory::Realloc(buf, length+1); buf[length] = '\0'; mDomainStack.AppendElement(buf); } break; case END_DOMAIN_SEGMENT: { if (mCurrHandlingInfo) AddCookieOverride(permissionManager); // Pop the domain stack PRUint32 count = mDomainStack.Length(); if (count > 0) { char* segment = mDomainStack.ElementAt(count - 1); if (segment) nsMemory::Free(segment); mDomainStack.RemoveElementAt(count - 1); } } break; case BEGIN_PATH_SEGMENT: mStream->Read16(&length); break; case PATH_COMPONENT: { mStream->Read16(&length); mStream->ReadBytes(length, &buf); buf = (char*)nsMemory::Realloc(buf, length+1); buf[length] = '\0'; mPathStack.AppendElement(buf); } break; case END_PATH_SEGMENT: { // Add the last remaining cookie for this path. if (mCookieOpen) AddCookie(manager); // We receive one "End Path Segment" even if the path stack is empty // i.e. telling us that we are done processing cookies for "/" // Pop the path stack PRUint32 count = mPathStack.Length(); if (count > 0) { char* segment = mPathStack.ElementAt(count - 1); if (segment) nsMemory::Free(segment); mPathStack.RemoveElementAt(count - 1); } } break; case FILTERING_INFO: mStream->Read16(&length); mStream->Read8(&mCurrHandlingInfo); break; case PATH_HANDLING_INFO: case THIRD_PARTY_HANDLING_INFO: { mStream->Read16(&length); PRUint8 temp; mStream->Read8(&temp); } break; case BEGIN_COOKIE_SEGMENT: { // Be sure to save the last cookie before overwriting the buffers // with data from subsequent cookies. if (mCookieOpen) AddCookie(manager); mStream->Read16(&segmentLength); mCookieOpen = PR_TRUE; } break; case COOKIE_ID: { mStream->Read16(&length); mStream->ReadBytes(length, &buf); buf = (char*)nsMemory::Realloc(buf, length+1); buf[length] = '\0'; mCurrCookie.id.Assign(buf); if (buf) { nsMemory::Free(buf); buf = nsnull; } } break; case COOKIE_DATA: { mStream->Read16(&length); mStream->ReadBytes(length, &buf); buf = (char*)nsMemory::Realloc(buf, length+1); buf[length] = '\0'; mCurrCookie.data.Assign(buf); if (buf) { nsMemory::Free(buf); buf = nsnull; } } break; case COOKIE_EXPIRY: mStream->Read16(&length); mStream->Read32(reinterpret_cast<PRUint32*>(&(mCurrCookie.expiryTime))); break; case COOKIE_SECURE: mCurrCookie.isSecure = PR_TRUE; break; // We don't support any of these fields but we must read them in // to advance the stream cursor. case COOKIE_LASTUSED: { mStream->Read16(&length); PRTime temp; mStream->Read32(reinterpret_cast<PRUint32*>(&temp)); } break; case COOKIE_COMMENT: case COOKIE_COMMENT_URL: case COOKIE_V1_DOMAIN: case COOKIE_V1_PATH: case COOKIE_V1_PORT_LIMITATIONS: { mStream->Read16(&length); mStream->ReadBytes(length, &buf); if (buf) { nsMemory::Free(buf); buf = nsnull; } } break; case COOKIE_VERSION: { mStream->Read16(&length); PRUint8 temp; mStream->Read8(&temp); } break; case COOKIE_OTHERFLAG_1: case COOKIE_OTHERFLAG_2: case COOKIE_OTHERFLAG_3: case COOKIE_OTHERFLAG_4: case COOKIE_OTHERFLAG_5: case COOKIE_OTHERFLAG_6: break; } } while (1); // Make sure the path and domain stacks are clear. char* segment = nsnull; PRUint32 i; PRUint32 count = mPathStack.Length(); for (i = 0; i < count; ++i) { segment = mPathStack.ElementAt(i); if (segment) { nsMemory::Free(segment); segment = nsnull; } } count = mDomainStack.Length(); for (i = 0; i < count; ++i) { segment = mDomainStack.ElementAt(i); if (segment) { nsMemory::Free(segment); segment = nsnull; } } return NS_OK; }
void wxHIDKeyboard::DoBuildCookies(CFArrayRef Array) { //Now go through each possible cookie int i; long nUsage; // bool bEOTriggered = false; for (i = 0; i < CFArrayGetCount(Array); ++i) { const void* ref = CFDictionaryGetValue( (CFDictionaryRef)CFArrayGetValueAtIndex(Array, i), CFSTR(kIOHIDElementKey) ); if (ref != NULL) { DoBuildCookies((CFArrayRef) ref); } else { // // Get the usage # // CFNumberGetValue( (CFNumberRef) CFDictionaryGetValue((CFDictionaryRef) CFArrayGetValueAtIndex(Array, i), CFSTR(kIOHIDElementUsageKey) ), kCFNumberLongType, &nUsage); // // Now translate the usage # into a wx keycode // // // OK, this is strange - basically this kind of strange - // Starting from 0xEO these elements (like shift) appear twice in // the array! The ones at the end are bogus I guess - the funny part // is that besides the fact that the ones at the front have a Unit // and UnitExponent key with a value of 0 and a different cookie value, // there is no discernable difference between the two... // // Will the real shift please stand up? // // Something to spend a support request on, if I had one, LOL. // //if(nUsage == 0xE0) //{ // if(bEOTriggered) // break; // bEOTriggered = true; //} //Instead of that though we now just don't add duplicate keys if (nUsage >= kHIDUsage_KeyboardA && nUsage <= kHIDUsage_KeyboardZ) AddCookie(CFArrayGetValueAtIndex(Array, i), 'A' + (nUsage - kHIDUsage_KeyboardA) ); else if (nUsage >= kHIDUsage_Keyboard1 && nUsage <= kHIDUsage_Keyboard9) AddCookie(CFArrayGetValueAtIndex(Array, i), '1' + (nUsage - kHIDUsage_Keyboard1) ); else if (nUsage >= kHIDUsage_KeyboardF1 && nUsage <= kHIDUsage_KeyboardF12) AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_F1 + (nUsage - kHIDUsage_KeyboardF1) ); else if (nUsage >= kHIDUsage_KeyboardF13 && nUsage <= kHIDUsage_KeyboardF24) AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_F13 + (nUsage - kHIDUsage_KeyboardF13) ); else if (nUsage >= kHIDUsage_Keypad1 && nUsage <= kHIDUsage_Keypad9) AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_NUMPAD1 + (nUsage - kHIDUsage_Keypad1) ); else switch (nUsage) { //0's (wx & ascii go 0-9, but HID goes 1-0) case kHIDUsage_Keyboard0: AddCookie(CFArrayGetValueAtIndex(Array, i), '0'); break; case kHIDUsage_Keypad0: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_NUMPAD0); break; //Basic case kHIDUsage_KeyboardReturnOrEnter: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_RETURN); break; case kHIDUsage_KeyboardEscape: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_ESCAPE); break; case kHIDUsage_KeyboardDeleteOrBackspace: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_BACK); break; case kHIDUsage_KeyboardTab: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_TAB); break; case kHIDUsage_KeyboardSpacebar: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_SPACE); break; case kHIDUsage_KeyboardPageUp: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_PAGEUP); break; case kHIDUsage_KeyboardEnd: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_END); break; case kHIDUsage_KeyboardPageDown: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_PAGEDOWN); break; case kHIDUsage_KeyboardRightArrow: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_RIGHT); break; case kHIDUsage_KeyboardLeftArrow: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_LEFT); break; case kHIDUsage_KeyboardDownArrow: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_DOWN); break; case kHIDUsage_KeyboardUpArrow: AddCookie(CFArrayGetValueAtIndex(Array, i), WXK_UP); break; //LEDS case kHIDUsage_KeyboardCapsLock: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_CAPITAL); break; case kHIDUsage_KeypadNumLock: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_NUMLOCK); break; case kHIDUsage_KeyboardScrollLock: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_SCROLL); break; //Menu keys, Shift, other specials case kHIDUsage_KeyboardLeftControl: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_CONTROL); break; case kHIDUsage_KeyboardLeftShift: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_SHIFT); break; case kHIDUsage_KeyboardLeftAlt: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_ALT); break; case kHIDUsage_KeyboardLeftGUI: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_MENU); break; case kHIDUsage_KeyboardRightControl: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_RCONTROL); break; case kHIDUsage_KeyboardRightShift: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_RSHIFT); break; case kHIDUsage_KeyboardRightAlt: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_RALT); break; case kHIDUsage_KeyboardRightGUI: AddCookie(CFArrayGetValueAtIndex(Array, i),WXK_RMENU); break; //Default default: //not in wx keycodes - do nothing.... break; } //end mightly long switch } //end if the current element is not an array... } //end for loop for Array }//end buildcookies
status_t BNetworkCookieJar::Unflatten(type_code, const void* buffer, ssize_t size) { BString flattenedCookies; flattenedCookies.SetTo(reinterpret_cast<const char*>(buffer), size); while (flattenedCookies.Length() > 0) { BNetworkCookie tempCookie; BString tempCookieLine; int32 endOfLine = flattenedCookies.FindFirst('\n', 0); if (endOfLine == -1) tempCookieLine = flattenedCookies; else { flattenedCookies.MoveInto(tempCookieLine, 0, endOfLine); flattenedCookies.Remove(0, 1); } if (tempCookieLine.Length() != 0 && tempCookieLine[0] != '#') { for (int32 field = 0; field < 7; field++) { BString tempString; int32 endOfField = tempCookieLine.FindFirst('\t', 0); if (endOfField == -1) tempString = tempCookieLine; else { tempCookieLine.MoveInto(tempString, 0, endOfField); tempCookieLine.Remove(0, 1); } switch (field) { case 0: tempCookie.SetDomain(tempString); break; case 1: // TODO: Useless field ATM break; case 2: tempCookie.SetPath(tempString); break; case 3: tempCookie.SetSecure(tempString == "TRUE"); break; case 4: tempCookie.SetExpirationDate(atoi(tempString)); break; case 5: tempCookie.SetName(tempString); break; case 6: tempCookie.SetValue(tempString); break; } // switch } // for loop AddCookie(tempCookie); } } return B_OK; }
void wxHIDKeyboard::BuildCookies(wxCFArray& Array) { Array = CFDictionaryGetValue((CFDictionaryRef)Array[0], CFSTR(kIOHIDElementKey)); InitCookies(500); int i, nUsage; bool bEOTriggered = false; for (i = 0; i < Array.Count(); ++i) { CFNumberGetValue( (CFNumberRef) CFDictionaryGetValue((CFDictionaryRef) Array[i], CFSTR(kIOHIDElementUsageKey)), kCFNumberLongType, &nUsage); // // OK, this is strange - basically this kind of strange - // Starting from 0xEO these elements (like shift) appear twice in // the array! The ones at the end are bogus I guess - the funny part // is that besides the fact that the ones at the front have a Unit // and UnitExponent key with a value of 0 and a different cookie value, // there is no discernable difference between the two... // // Will the real shift please stand up? // // Something to spend a support request on, if I had one, LOL. // if(nUsage == 0xE0) { if(bEOTriggered) break; bEOTriggered = true; } /* wxString msg; int cookie; CFNumberGetValue( (CFNumberRef) CFDictionaryGetValue ( (CFDictionaryRef) Array[i] , CFSTR(kIOHIDElementCookieKey) ), kCFNumberIntType, &cookie ); msg << wxT("KEY:") << nUsage << wxT("COOKIE:") << cookie; wxLogDebug(msg); */ if (nUsage >= kHIDUsage_KeyboardA && nUsage <= kHIDUsage_KeyboardZ) AddCookie(Array[i], 'A' + (nUsage - kHIDUsage_KeyboardA) ); else if (nUsage >= kHIDUsage_Keyboard1 && nUsage <= kHIDUsage_Keyboard9) AddCookie(Array[i], '1' + (nUsage - kHIDUsage_Keyboard1) ); else if (nUsage >= kHIDUsage_KeyboardF1 && nUsage <= kHIDUsage_KeyboardF12) AddCookie(Array[i], WXK_F1 + (nUsage - kHIDUsage_KeyboardF1) ); else if (nUsage >= kHIDUsage_KeyboardF13 && nUsage <= kHIDUsage_KeyboardF24) AddCookie(Array[i], WXK_F13 + (nUsage - kHIDUsage_KeyboardF13) ); else if (nUsage >= kHIDUsage_Keypad1 && nUsage <= kHIDUsage_Keypad9) AddCookie(Array[i], WXK_NUMPAD1 + (nUsage - kHIDUsage_Keypad1) ); else switch (nUsage) { //0's (wx & ascii go 0-9, but HID goes 1-0) case kHIDUsage_Keyboard0: AddCookie(Array[i],'0'); break; case kHIDUsage_Keypad0: AddCookie(Array[i],WXK_NUMPAD0); break; //Basic case kHIDUsage_KeyboardReturnOrEnter: AddCookie(Array[i], WXK_RETURN); break; case kHIDUsage_KeyboardEscape: AddCookie(Array[i], WXK_ESCAPE); break; case kHIDUsage_KeyboardDeleteOrBackspace: AddCookie(Array[i], WXK_BACK); break; case kHIDUsage_KeyboardTab: AddCookie(Array[i], WXK_TAB); break; case kHIDUsage_KeyboardSpacebar: AddCookie(Array[i], WXK_SPACE); break; case kHIDUsage_KeyboardPageUp: AddCookie(Array[i], WXK_PRIOR); break; case kHIDUsage_KeyboardEnd: AddCookie(Array[i], WXK_END); break; case kHIDUsage_KeyboardPageDown: AddCookie(Array[i], WXK_NEXT); break; case kHIDUsage_KeyboardRightArrow: AddCookie(Array[i], WXK_RIGHT); break; case kHIDUsage_KeyboardLeftArrow: AddCookie(Array[i], WXK_LEFT); break; case kHIDUsage_KeyboardDownArrow: AddCookie(Array[i], WXK_DOWN); break; case kHIDUsage_KeyboardUpArrow: AddCookie(Array[i], WXK_UP); break; //LEDS case kHIDUsage_KeyboardCapsLock: AddCookie(Array[i],WXK_CAPITAL); break; case kHIDUsage_KeypadNumLock: AddCookie(Array[i],WXK_NUMLOCK); break; case kHIDUsage_KeyboardScrollLock: AddCookie(Array[i],WXK_SCROLL); break; //Menu keys, Shift, other specials case kHIDUsage_KeyboardLeftControl: AddCookie(Array[i],WXK_CONTROL); break; case kHIDUsage_KeyboardLeftShift: AddCookie(Array[i],WXK_SHIFT); break; case kHIDUsage_KeyboardLeftAlt: AddCookie(Array[i],WXK_ALT); break; case kHIDUsage_KeyboardLeftGUI: AddCookie(Array[i],WXK_MENU); break; case kHIDUsage_KeyboardRightControl: AddCookie(Array[i],WXK_RCONTROL); break; case kHIDUsage_KeyboardRightShift: AddCookie(Array[i],WXK_RSHIFT); break; case kHIDUsage_KeyboardRightAlt: AddCookie(Array[i],WXK_RALT); break; case kHIDUsage_KeyboardRightGUI: AddCookie(Array[i],WXK_RMENU); break; //Default default: //not in wx keycodes - do nothing.... break; } } }//end buildcookies
void wxHIDDevice::AddCookieInQueue(CFTypeRef Data, int i) { AddCookie(Data, i); wxVERIFY((*m_ppQueue)->addElement(m_ppQueue, m_pCookies[i], 0) == S_OK);//3rd Param flags (none yet) }