void DocumentHost::GetCookies(std::map<std::string, std::string>* cookies) { LOG(TRACE) << "Entering DocumentHost::GetCookies"; CComPtr<IHTMLDocument2> doc; this->GetDocument(&doc); if (!doc) { LOG(WARN) << "Unable to get document"; return; } CComBSTR cookie_bstr; HRESULT hr = doc->get_cookie(&cookie_bstr); if (!cookie_bstr) { LOG(WARN) << "Unable to get cookie str, call to IHTMLDocument2::get_cookie failed"; cookie_bstr = L""; } std::wstring cookie_string = cookie_bstr; while (cookie_string.size() > 0) { size_t cookie_delimiter_pos = cookie_string.find(L"; "); std::wstring cookie = cookie_string.substr(0, cookie_delimiter_pos); if (cookie_delimiter_pos == std::wstring::npos) { cookie_string = L""; } else { cookie_string = cookie_string.substr(cookie_delimiter_pos + 2); } size_t cookie_separator_pos(cookie.find_first_of(L"=")); std::string cookie_name(CW2A(cookie.substr(0, cookie_separator_pos).c_str(), CP_UTF8)); std::string cookie_value(CW2A(cookie.substr(cookie_separator_pos + 1).c_str(), CP_UTF8)); cookies->insert(std::pair<std::string, std::string>(cookie_name, cookie_value)); } }
void CookieManager::ParseCookieString(const std::wstring& cookie_string, std::map<std::string, std::string>* cookies) { LOG(TRACE) << "Entering CookieManager::ParseCookieString"; std::wstring cookie_string_copy = cookie_string; while (cookie_string_copy.size() > 0) { size_t cookie_delimiter_pos = cookie_string_copy.find(L"; "); std::wstring cookie = cookie_string_copy.substr(0, cookie_delimiter_pos); if (cookie_delimiter_pos == std::wstring::npos) { cookie_string_copy = L""; } else { cookie_string_copy = cookie_string_copy.substr(cookie_delimiter_pos + 2); } size_t cookie_separator_pos(cookie.find_first_of(L"=")); std::string cookie_name(StringUtilities::ToString(cookie.substr(0, cookie_separator_pos))); std::string cookie_value(StringUtilities::ToString(cookie.substr(cookie_separator_pos + 1))); cookies->insert(std::pair<std::string, std::string>(cookie_name, cookie_value)); } }
void FE_Utils::create_uses_multiple_stuff (AST_Component *c, AST_Uses *u, const char *prefix) { ACE_CString struct_name (prefix); if (!struct_name.empty ()) { struct_name += '_'; } struct_name += u->local_name ()->get_string (); struct_name += "Connection"; Identifier struct_id (struct_name.c_str ()); UTL_ScopedName sn (&struct_id, 0); // In case this call comes from the backend. We // will pop the scope before returning. idl_global->scopes ().push (c); AST_Structure *connection = idl_global->gen ()->create_structure (&sn, 0, 0); struct_id.destroy (); /// If the field type is a param holder, we want /// to use the lookup to create a fresh one, /// since the field will own it and destroy it. UTL_ScopedName *fn = u->uses_type ()->name (); AST_Decl *d = idl_global->root ()->lookup_by_name (fn, true, false); AST_Type *ft = AST_Type::narrow_from_decl (d); Identifier object_id ("objref"); UTL_ScopedName object_name (&object_id, 0); AST_Field *object_field = idl_global->gen ()->create_field (ft, &object_name, AST_Field::vis_NA); (void) DeclAsScope (connection)->fe_add_field (object_field); object_id.destroy (); Identifier local_id ("Cookie"); UTL_ScopedName local_name (&local_id, 0); Identifier module_id ("Components"); UTL_ScopedName scoped_name (&module_id, &local_name); d = c->lookup_by_name (&scoped_name, true); local_id.destroy (); module_id.destroy (); if (d == 0) { // This would happen if we haven't included Components.idl. idl_global->err ()->lookup_error (&scoped_name); return; } AST_ValueType *cookie = AST_ValueType::narrow_from_decl (d); Identifier cookie_id ("ck"); UTL_ScopedName cookie_name (&cookie_id, 0); AST_Field *cookie_field = idl_global->gen ()->create_field (cookie, &cookie_name, AST_Field::vis_NA); (void) DeclAsScope (connection)->fe_add_field (cookie_field); cookie_id.destroy (); (void) c->fe_add_structure (connection); ACE_CDR::ULong bound = 0; AST_Expression *bound_expr = idl_global->gen ()->create_expr (bound, AST_Expression::EV_ulong); AST_Sequence *sequence = idl_global->gen ()->create_sequence (bound_expr, connection, 0, 0, 0); ACE_CString seq_string (struct_name); seq_string += 's'; Identifier seq_id (seq_string.c_str ()); UTL_ScopedName seq_name (&seq_id, 0); AST_Typedef *connections = idl_global->gen ()->create_typedef (sequence, &seq_name, 0, 0); seq_id.destroy (); (void) c->fe_add_typedef (connections); // In case this call comes from the backend. idl_global->scopes ().pop (); }