Skip to content

Commit 0b675b0

Browse files
committed
Changed the behavior of the server regarding the 'Content-Length' header in order to use the chunked version of a method everytime
1 parent ae0cf70 commit 0b675b0

File tree

4 files changed

+94
-148
lines changed

4 files changed

+94
-148
lines changed

lib/server/commands/Put.js

Lines changed: 43 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -138,83 +138,59 @@ unchunkedMethod.chunked = function (arg, callback) {
138138
return;
139139
}
140140
arg.checkIfHeader(r, function () {
141-
if (arg.contentLength === 0) {
142-
if (r) {
143-
arg.requirePrivilege(targetSource ? ['canSource', 'canWrite'] : ['canWrite'], r, function () {
144-
r.write(targetSource, function (e, stream) { return process.nextTick(function () {
145-
if (stream)
146-
stream.end();
147-
if (e)
148-
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
149-
else {
150-
arg.invokeEvent('write', r);
151-
arg.setCode(WebDAVRequest_1.HTTPCodes.OK);
152-
}
153-
callback();
154-
}); });
155-
});
156-
return;
157-
}
141+
if (e) {
158142
createResource(arg, callback, function (r) {
159-
arg.setCode(WebDAVRequest_1.HTTPCodes.Created);
160-
callback();
161-
});
162-
}
163-
else {
164-
if (e) {
165-
createResource(arg, callback, function (r) {
166-
r.write(targetSource, function (e, stream) { return process.nextTick(function () {
167-
if (e) {
168-
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
169-
callback();
170-
return;
171-
}
172-
arg.request.pipe(stream);
173-
stream.on('finish', function (e) {
174-
arg.setCode(WebDAVRequest_1.HTTPCodes.Created);
175-
arg.invokeEvent('write', r);
176-
callback();
177-
});
178-
stream.on('error', function (e) {
179-
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
180-
callback();
181-
});
182-
}); });
183-
});
184-
return;
185-
}
186-
arg.requirePrivilege(targetSource ? ['canSource', 'canWrite'] : ['canWrite'], r, function () {
187-
r.type(function (e, type) { return process.nextTick(function () {
143+
r.write(targetSource, function (e, stream) { return process.nextTick(function () {
188144
if (e) {
189145
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
190146
callback();
191147
return;
192148
}
193-
if (!type.isFile) {
194-
arg.setCode(WebDAVRequest_1.HTTPCodes.MethodNotAllowed);
149+
arg.request.pipe(stream);
150+
stream.on('finish', function (e) {
151+
arg.setCode(WebDAVRequest_1.HTTPCodes.Created);
152+
arg.invokeEvent('write', r);
195153
callback();
196-
return;
197-
}
198-
r.write(targetSource, function (e, stream) { return process.nextTick(function () {
199-
if (e) {
200-
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
201-
callback();
202-
return;
203-
}
204-
arg.request.pipe(stream);
205-
stream.on('finish', function (e) {
206-
arg.setCode(WebDAVRequest_1.HTTPCodes.OK);
207-
arg.invokeEvent('write', r);
208-
callback();
209-
});
210-
stream.on('error', function (e) {
211-
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
212-
callback();
213-
});
214-
}); });
154+
});
155+
stream.on('error', function (e) {
156+
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
157+
callback();
158+
});
215159
}); });
216160
});
161+
return;
217162
}
163+
arg.requirePrivilege(targetSource ? ['canSource', 'canWrite'] : ['canWrite'], r, function () {
164+
r.type(function (e, type) { return process.nextTick(function () {
165+
if (e) {
166+
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
167+
callback();
168+
return;
169+
}
170+
if (!type.isFile) {
171+
arg.setCode(WebDAVRequest_1.HTTPCodes.MethodNotAllowed);
172+
callback();
173+
return;
174+
}
175+
r.write(targetSource, function (e, stream) { return process.nextTick(function () {
176+
if (e) {
177+
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
178+
callback();
179+
return;
180+
}
181+
arg.request.pipe(stream);
182+
stream.on('finish', function (e) {
183+
arg.setCode(WebDAVRequest_1.HTTPCodes.OK);
184+
arg.invokeEvent('write', r);
185+
callback();
186+
});
187+
stream.on('error', function (e) {
188+
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
189+
callback();
190+
});
191+
}); });
192+
}); });
193+
});
218194
});
219195
});
220196
};

lib/server/webDAVServer/StartStop.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ function start(port, callback) {
120120
base.response.end();
121121
_this.invokeAfterRequest(base, null);
122122
};
123-
if (!_this.options.canChunk || !method.chunked || base.contentLength <= 0) {
123+
if (!_this.options.canChunk || !method.chunked) {
124124
var go_1 = function () {
125125
_this.invokeBeforeRequest(base, function () {
126126
method(base, base.exit);

src/server/commands/Put.ts

Lines changed: 49 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -172,98 +172,68 @@ export default function unchunkedMethod(arg : MethodCallArgs, callback)
172172
}
173173

174174
arg.checkIfHeader(r, () => {
175-
if(arg.contentLength === 0)
176-
{ // Create file
177-
if(r)
178-
{ // Resource exists => empty it
179-
arg.requirePrivilege(targetSource ? [ 'canSource', 'canWrite' ] : [ 'canWrite' ], r, () => {
180-
r.write(targetSource, (e, stream) => process.nextTick(() => {
181-
if(stream)
182-
stream.end();
183-
184-
if(e)
185-
arg.setCode(HTTPCodes.InternalServerError)
186-
else
187-
{
188-
arg.invokeEvent('write', r);
189-
arg.setCode(HTTPCodes.OK)
190-
}
191-
callback()
192-
}))
193-
})
194-
return;
195-
}
196-
175+
if(e)
176+
{ // Resource not found
197177
createResource(arg, callback, (r) => {
198-
arg.setCode(HTTPCodes.Created)
199-
callback();
200-
})
201-
}
202-
else
203-
{ // Write to a file
204-
if(e)
205-
{ // Resource not found
206-
createResource(arg, callback, (r) => {
207-
r.write(targetSource, (e, stream) => process.nextTick(() => {
208-
if(e)
209-
{
210-
arg.setCode(HTTPCodes.InternalServerError);
211-
callback();
212-
return;
213-
}
214-
215-
arg.request.pipe(stream);
216-
stream.on('finish', (e) => {
217-
arg.setCode(HTTPCodes.Created)
218-
arg.invokeEvent('write', r);
219-
callback();
220-
});
221-
stream.on('error', (e) => {
222-
arg.setCode(HTTPCodes.InternalServerError)
223-
callback();
224-
});
225-
}))
226-
})
227-
return;
228-
}
229-
230-
arg.requirePrivilege(targetSource ? [ 'canSource', 'canWrite' ] : [ 'canWrite' ], r, () => {
231-
r.type((e, type) => process.nextTick(() => {
178+
r.write(targetSource, (e, stream) => process.nextTick(() => {
232179
if(e)
233180
{
234181
arg.setCode(HTTPCodes.InternalServerError);
235182
callback();
236183
return;
237184
}
238-
if(!type.isFile)
185+
186+
arg.request.pipe(stream);
187+
stream.on('finish', (e) => {
188+
arg.setCode(HTTPCodes.Created)
189+
arg.invokeEvent('write', r);
190+
callback();
191+
});
192+
stream.on('error', (e) => {
193+
arg.setCode(HTTPCodes.InternalServerError)
194+
callback();
195+
});
196+
}))
197+
})
198+
return;
199+
}
200+
201+
arg.requirePrivilege(targetSource ? [ 'canSource', 'canWrite' ] : [ 'canWrite' ], r, () => {
202+
r.type((e, type) => process.nextTick(() => {
203+
if(e)
204+
{
205+
arg.setCode(HTTPCodes.InternalServerError);
206+
callback();
207+
return;
208+
}
209+
if(!type.isFile)
210+
{
211+
arg.setCode(HTTPCodes.MethodNotAllowed);
212+
callback();
213+
return;
214+
}
215+
216+
r.write(targetSource, (e, stream) => process.nextTick(() => {
217+
if(e)
239218
{
240-
arg.setCode(HTTPCodes.MethodNotAllowed);
219+
arg.setCode(HTTPCodes.InternalServerError);
241220
callback();
242221
return;
243222
}
244223

245-
r.write(targetSource, (e, stream) => process.nextTick(() => {
246-
if(e)
247-
{
248-
arg.setCode(HTTPCodes.InternalServerError);
249-
callback();
250-
return;
251-
}
252-
253-
arg.request.pipe(stream);
254-
stream.on('finish', (e) => {
255-
arg.setCode(HTTPCodes.OK)
256-
arg.invokeEvent('write', r);
257-
callback();
258-
});
259-
stream.on('error', (e) => {
260-
arg.setCode(HTTPCodes.InternalServerError)
261-
callback();
262-
});
263-
}))
224+
arg.request.pipe(stream);
225+
stream.on('finish', (e) => {
226+
arg.setCode(HTTPCodes.OK)
227+
arg.invokeEvent('write', r);
228+
callback();
229+
});
230+
stream.on('error', (e) => {
231+
arg.setCode(HTTPCodes.InternalServerError)
232+
callback();
233+
});
264234
}))
265-
})
266-
}
235+
}))
236+
})
267237
})
268238
})
269239
}

src/server/webDAVServer/StartStop.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export function start(port ?: number | WebDAVServerStartCallback, callback ?: We
151151
this.invokeAfterRequest(base, null);
152152
};
153153

154-
if(!this.options.canChunk || !method.chunked || base.contentLength <= 0)
154+
if(!this.options.canChunk || !method.chunked)
155155
{
156156
const go = () =>
157157
{

0 commit comments

Comments
 (0)