| 203 | } |
| 204 | |
| 205 | void UpdateReader::HandleFile() |
| 206 | { |
| 207 | MD5 md5; |
| 208 | char real_checksum[33]; |
| 209 | |
| 210 | mdl.Reset(); |
| 211 | |
| 212 | if (!xfer->Download(url.c_str(), &mdl, NULL)) |
| 213 | { |
| 214 | AddUpdateError("Could not download \"%s\"", url.c_str()); |
| 215 | AddUpdateError("Error: %s", xfer->LastErrorMessage()); |
| 216 | return; |
| 217 | } |
| 218 | |
| 219 | md5.update((unsigned char *)mdl.GetBuffer(), mdl.GetSize()); |
| 220 | md5.finalize(); |
| 221 | md5.hex_digest(real_checksum); |
| 222 | |
| 223 | if (mdl.GetSize() == 0) |
| 224 | { |
| 225 | AddUpdateError("Zero-length file returned for \"%s\"", curfile.c_str()); |
| 226 | return; |
| 227 | } |
| 228 | |
| 229 | if (strcasecmp(checksum, real_checksum) != 0) |
| 230 | { |
| 231 | AddUpdateError("Checksums for file \"%s\" do not match:", curfile.c_str()); |
| 232 | AddUpdateError("Expected: %s Real: %s", checksum, real_checksum); |
| 233 | return; |
| 234 | } |
| 235 | |
| 236 | UpdatePart *part = new UpdatePart; |
| 237 | part->data = (char*)malloc(mdl.GetSize()); |
| 238 | memcpy(part->data, mdl.GetBuffer(), mdl.GetSize()); |
| 239 | part->file = strdup(curfile.c_str()); |
| 240 | part->length = mdl.GetSize(); |
| 241 | LinkPart(part); |
| 242 | } |
| 243 | |
| 244 | void UpdateReader::HandleFolder(const char *folder) |
| 245 | { |
nothing calls this directly
no test coverage detected