MCPcopy Create free account
hub / github.com/cph6/zsync / parseControlFile

Method parseControlFile

control_file_parse.go:34–203  ·  view source on GitHub ↗
(f io.Reader)

Source from the content-addressed store, hash-verified

32)
33
34func (zs *Syncer) parseControlFile(f io.Reader) error {
35 checksumBytes := 16
36 rsumBytes := 4
37 seqMatches := 1
38
39 // Set of headers that we can ignore safely, and counts of how often they
40 // were seen.
41 safelines := make(map[string]int)
42 safelines["Z-URL"] = 0
43 safelines["Min-Version"] = 0
44 seenHeader := false
45
46 reader := bufio.NewReader(f)
47 for {
48 line, err := reader.ReadString('\n')
49 if err != nil {
50 return err
51 }
52 line = strings.TrimSuffix(line, "\n")
53 if line == "" {
54 break
55 }
56
57 parts := strings.SplitN(line, ": ", 2)
58 if len(parts) != 2 {
59 return fmt.Errorf("bad line: %s", line)
60 }
61 key, value := parts[0], parts[1]
62
63 // Require the "zsync:" header to come first.
64 if !seenHeader {
65 if key != "zsync" {
66 return ErrNotZsyncFile
67 }
68 if value == "0.0.4" {
69 return ErrNotSupported004
70 }
71 seenHeader = true
72 continue
73 }
74
75 switch key {
76 case "Length":
77 var err error
78 zs.filelen, err = strconv.ParseInt(value, 10, 64)
79 if err != nil {
80 return fmt.Errorf("bad length: %s", value)
81 }
82 case "Filename":
83 zs.targetFilename = value
84 case "URL":
85 zs.urls = append(zs.urls, value)
86 case "Blocksize":
87 blocksize, err := strconv.ParseInt(value, 10, 64)
88 if err != nil {
89 return fmt.Errorf("bad blocksize: %s", value)
90 }
91 if blocksize&(blocksize-1) != 0 {

Callers 1

NewFromControlFileFunction · 0.95

Calls 3

NewFunction · 0.92
BlockIDTypeAlias · 0.92
AddTargetBlockMethod · 0.80

Tested by

no test coverage detected