summaryrefslogtreecommitdiffstats
path: root/gold/scex/tracer/slurp.js
diff options
context:
space:
mode:
authorroot <root@filebitch>2011-08-28 18:28:51 +0200
committerroot <root@filebitch>2011-08-28 18:28:51 +0200
commitfe1a8c2eb90fecabada32a15572e019a7da8fdd9 (patch)
treea4f5e63eb41b0143c60ad5d2fab7afec363e06ba /gold/scex/tracer/slurp.js
parent99bdbc04f2be1f0d27c4a4dde692e8a5b6eb8a7e (diff)
parent7bf33493aa27a4462841eb8aa42eda5b974010b7 (diff)
Merge branch 'master' of https://github.com/krebscode/painload
Diffstat (limited to 'gold/scex/tracer/slurp.js')
-rw-r--r--gold/scex/tracer/slurp.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/gold/scex/tracer/slurp.js b/gold/scex/tracer/slurp.js
new file mode 100644
index 00000000..70319743
--- /dev/null
+++ b/gold/scex/tracer/slurp.js
@@ -0,0 +1,38 @@
+module.exports = (function () {
+
+ function join_buffers (buffers, length) {
+ var buffer = new Buffer(length);
+ var targetStart = 0;
+ buffers.forEach(function (x) {
+ x.copy(buffer, targetStart);
+ targetStart += x.length;
+ });
+ return buffer;
+ };
+
+ function finish_it (req, buffers, length, callback) {
+ req.content = join_buffers(buffers, length);
+ return callback(req.content);
+ };
+
+ function nop () {};
+
+ return function (req, callback) {
+ if (req.hasOwnProperty('content')) {
+ return callback(req.content);
+ };
+ var content = [];
+ var length = 0;
+ var end_handler = finish_it;
+ req.on('data', function (data) {
+ content.push(data);
+ length += data.length;
+ });
+ [ 'end', 'close' ].forEach(function (event) {
+ req.on(event, function () {
+ finish_it(req, content, length, callback);
+ end_handler = nop;
+ });
+ });
+ };
+})();