Home | History | Annotate | Download | only in safe_browsing
      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 
     20 namespace base {
     21 class TimeDelta;
     22 };
     23 
     24 namespace 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.
     35 bool 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.
     45 bool 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.
     52 bool 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.
     58 std::string FormatGetHash(const std::vector<SBPrefix>& prefixes);
     59 
     60 // Format the LIST part of "HTTP Request for Data" body.
     61 std::string FormatList(const SBListChunkRanges& list);
     62 
     63 }  // namespace safe_browsing
     64 
     65 #endif  // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_PARSER_H_
     66