1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_ 6#define CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_ 7 8// Parsers and formatters for SafeBrowsing v3.0 protocol: 9// https://developers.google.com/safe-browsing/developers_guide_v3 10// 11// The quoted references are with respect to that document. 12 13#include <string> 14#include <vector> 15 16#include "base/basictypes.h" 17#include "base/memory/scoped_vector.h" 18#include "chrome/browser/safe_browsing/safe_browsing_util.h" 19 20namespace base { 21class TimeDelta; 22}; 23 24namespace safe_browsing { 25 26// TODO(shess): Maybe the data/len pairs could be productively replaced with 27// const base::StringPiece&. 28 29// Parse body of "HTTP Response for Data". |*next_update_sec| is the minimum 30// delay to next update. |*reset| is set to true if the update requested a 31// database reset. |*chunk_deletes| receives add-del and sub-del requests, 32// while |*chunk_urls| receives the list of redirect urls to fetch. Returns 33// |false| if the update could not be decoded properly, in which case all 34// results should be discarded. 35bool ParseUpdate(const char* chunk_data, 36 size_t chunk_len, 37 size_t* next_update_sec, 38 bool* reset, 39 std::vector<SBChunkDelete>* chunk_deletes, 40 std::vector<ChunkUrl>* chunk_urls); 41 42// Parse body of a redirect response. |*chunks| receives the parsed chunk data. 43// Returns |false| if the data could not be parsed correctly, in which case all 44// results should be discarded. 45bool ParseChunk(const char* chunk_data, 46 size_t chunk_len, 47 ScopedVector<SBChunkData>* chunks); 48 49// Parse body of "HTTP Response for Full-Length Hashes", returning the list of 50// full hashes. Returns |false| if the data could not be parsed correctly, in 51// which case all results should be discarded. 52bool ParseGetHash(const char* chunk_data, 53 size_t chunk_len, 54 base::TimeDelta* cache_lifetime, 55 std::vector<SBFullHashResult>* full_hashes); 56 57// Convert prefix hashes into a "HTTP Request for Full-Length Hashes" body. 58std::string FormatGetHash(const std::vector<SBPrefix>& prefixes); 59 60// Format the LIST part of "HTTP Request for Data" body. 61std::string FormatList(const SBListChunkRanges& list); 62 63} // namespace safe_browsing 64 65#endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_ 66