MCPcopy Create free account
hub / github.com/akalin/gopar / writeFile

Function writeFile

par2/file.go:142–234  ·  view source on GitHub ↗
(file file)

Source from the content-addressed store, hash-verified

140}
141
142func writeFile(file file) (recoverySetID, []byte, error) {
143 if len(file.clientID) == 0 {
144 return recoverySetID{}, nil, errors.New("empty client ID")
145 }
146
147 if file.mainPacket == nil {
148 return recoverySetID{}, nil, errors.New("no main packet")
149 }
150
151 buf := bytes.NewBuffer(nil)
152
153 // TODO: Sanity-check packets against file.mainPacket.
154
155 mainPacketBytes, err := writeMainPacket(*file.mainPacket)
156 if err != nil {
157 return recoverySetID{}, nil, err
158 }
159 paddedMainPacketBytes := padPacketBytes(mainPacketBytes)
160 setID := recoverySetID(md5.Sum(paddedMainPacketBytes))
161
162 creatorPacketBytes, err := writeCreatorPacket(file.clientID)
163 if err != nil {
164 return recoverySetID{}, nil, err
165 }
166 err = writeNextPacket(buf, setID, creatorPacketType, padPacketBytes(creatorPacketBytes))
167 if err != nil {
168 return recoverySetID{}, nil, err
169 }
170
171 err = writeNextPacket(buf, setID, mainPacketType, paddedMainPacketBytes)
172 if err != nil {
173 return recoverySetID{}, nil, err
174 }
175
176 for _, fileID := range append(file.mainPacket.recoverySet, file.mainPacket.nonRecoverySet...) {
177 fileDescriptionPacket, ok := file.fileDescriptionPackets[fileID]
178 if !ok {
179 return recoverySetID{}, nil, errors.New("could not find file description packet")
180 }
181
182 fileDescriptionPacketBytes, err := writeFileDescriptionPacket(fileID, fileDescriptionPacket)
183 if err != nil {
184 return recoverySetID{}, nil, err
185 }
186 err = writeNextPacket(buf, setID, fileDescriptionPacketType, padPacketBytes(fileDescriptionPacketBytes))
187 if err != nil {
188 return recoverySetID{}, nil, err
189 }
190
191 ifscPacket, ok := file.ifscPackets[fileID]
192 if !ok {
193 return recoverySetID{}, nil, errors.New("could not find input file slice checksum packet")
194 }
195
196 ifscPacketBytes, err := writeIFSCPacket(fileID, ifscPacket)
197 if err != nil {
198 return recoverySetID{}, nil, err
199 }

Callers 3

TestFileRoundTripFunction · 0.85
WriteMethod · 0.85
buildPAR2DataFunction · 0.85

Calls 9

writeMainPacketFunction · 0.85
padPacketBytesFunction · 0.85
recoverySetIDTypeAlias · 0.85
writeCreatorPacketFunction · 0.85
writeNextPacketFunction · 0.85
writeIFSCPacketFunction · 0.85
writeRecoveryPacketFunction · 0.85
exponentTypeAlias · 0.85

Tested by 2

TestFileRoundTripFunction · 0.68
buildPAR2DataFunction · 0.68