45 lines
No EOL
2.2 KiB
Text
45 lines
No EOL
2.2 KiB
Text
THINGS THAT CAN HAPPEN
|
|
├───File exists
|
|
│ ├───User disables overwrite
|
|
│ │ └───Return because there's nothing to do
|
|
│ │
|
|
│ ├───User enables overwrite
|
|
│ │ ├───User requests range
|
|
│ │ │ └───Raise exception because requesting a range and forcing overwrite are mutually exclusive
|
|
│ │ │
|
|
│ │ └───User does not request range
|
|
│ │ └───File opened, truncated, full download
|
|
│ │
|
|
│ └───User does not specify overwrite
|
|
│ ├───File is same size as content-length
|
|
│ │ └───Return because there's nothing to do.
|
|
│ │
|
|
│ ├───User requests range
|
|
│ │ ├───Server respects range
|
|
│ │ │ └───File opened, seeked to request, bytes filled in
|
|
│ │ │
|
|
│ │ └───Server does not respect range
|
|
│ │ └───Raise exception because user's request can't be fulfilled
|
|
│ │
|
|
│ └───User does not request range
|
|
│ ├───Server respects range
|
|
│ │ └───File is opened, seeked to end, download resumes
|
|
│ │
|
|
│ └───Server does not respect range
|
|
│ └───Ask for permission to overwrite from beginning
|
|
│
|
|
└───File does not exist
|
|
├───User requests range
|
|
│ ├───Server respects range
|
|
│ │ └───File created, seeked to request, bytes filled in. everything else left 0
|
|
│ └───Server does not respect range
|
|
│ └───Raise exception because user's request can't be fulfilled
|
|
│
|
|
└───User does not request range
|
|
└───File created, full download
|
|
|
|
Possible amibiguity: If the user requests a range, and the file does not exist, does he want:
|
|
1. to fill the file with zeroes, and patch the requested bytes into their correct spot; or
|
|
2. to create the file empty, and only write the requested bytes?
|
|
|
|
I will assume #1 because that plays nicely with other Things That Can Happen, such as letting the user patch the other bytes in later. |