func verifySignature(r io.Reader) error {
var s uint32
if err := binary.Read(r, binary.LittleEndian, &s); err != nil {
return ...
}
if s != 288633362 {
return ...
}
return nil
}
func validateBlockCount(r io.Reader) error {
var c uint32
if err := binary.Read(r, binary.LittleEndian, &c); err != nil {
return ...
}
if c != 2 {
return ...
}
return nil
}
func parseBlock(r io.Reader) ([]byte, error) {
var l uint32
if err := binary.Read(r, binary.LittleEndian, &l); err != nil {
return nil, ...
}
d := make([]byte, l)
if err := binary.Read(r, binary.LittleEndian, &d); err != nil {
return nil, ...
}
return d, nil
}
func download(...) {
req, err := http.NewRequest(...)
if err != nil {
return ...
}
resp, err := c.Do(req)
if err != nil {
return ...
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return ...
}
r := bufio.NewReader(resp.Body)
if err := verifySignature(r); err != nil {
return ...
}
if err := validateBlockCount(r); err != nil {
return ...
}
..., err = parseBlock(r)
if err != nil {
return ...
}
..., err = parseBlock(r)
if err != nil {
return ...
}
...
}