From 621c1ae9b6a7a7293694b2258a81aaa77a222553 Mon Sep 17 00:00:00 2001 From: Olivier Bagot Date: Wed, 20 Nov 2013 12:57:52 +0100 Subject: [PATCH] Added API: snapshot, snapshot_list, snapshot_get. --- handlers.js | 77 +++++++++++++++++++++++++++++++++++++++-- img/snapshot.jpg | Bin 0 -> 9517 bytes img/snapshot.thumb.gif | Bin 0 -> 2751 bytes index.js | 3 ++ 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 img/snapshot.jpg create mode 100644 img/snapshot.thumb.gif diff --git a/handlers.js b/handlers.js index 2dad3c2..e4ab186 100644 --- a/handlers.js +++ b/handlers.js @@ -64,10 +64,17 @@ function homepage(res, req) { + '
  • sound(id), sound(url)
  • ' + '
  • sound_control(quit), sound_control(pause)
  • ' + '
  • tts
  • ' + + '
  • snapshot
  • ' + + '
  • snapshot_list
  • ' + + '
  • snapshot_get, snapshot_get(thumbnail)
  • ' + '' + '' + ''; res.writeHead(200, { - 'Content-Type' : 'text/html' + 'Server': 'OpenKarotz Emulator WebServer 1.0', + 'Connection': 'close', + 'Accept-Ranges': 'bytes', + 'Content-Type' : 'text/html', + 'Access-Control-Allow-Origin': '*' }); res.write(body); res.end(); @@ -78,8 +85,11 @@ exports.homepage = homepage; function sendResponse(res, data) { log.trace('sendResponse: ' + data); res.writeHead(200, { - 'Content-Type' : 'text/plain', - 'Access-Control-Allow-Origin' : '*' + 'Server': 'OpenKarotz WebServer 1.0', + 'Connection': 'close', + 'Accept-Ranges': 'bytes', + 'Content-type': 'text/plain', + 'Access-Control-Allow-Origin': '*' }); res.write(data); res.end(); @@ -344,3 +354,64 @@ function tts(res, req) { log.trace('tts: end'); } exports.tts = tts; + +function snapshot(res, req) { + log.trace('snapshot: begin'); + + var data = ''; + + // var silent = getParameter(req, "silent", 1); // Unused + var filename = 'snapshot_2013_11_10_09_00_00'; + data = '{"filename":"' + filename + '.jpg","thumb":"' + filename + '.thumb.gif","return":"0"}'; + + sendResponse(res, data); + log.trace('snapshot: end'); +} +exports.snapshot = snapshot; + +function snapshot_list(res, req) { + log.trace('snapshot_list: begin'); + + var data = '{"snapshots":[' + + '{"id":"snapshot_2013_11_10_09_00_00"},' + + '{"id":"snapshot_2013_11_10_09_01_00"},' + + '{"id":"snapshot_2013_11_10_09_02_00"},' + + '{"id":"snapshot_2013_11_10_09_03_00"}' + + '],"return":"0"}'; + + sendResponse(res, data); + log.trace('snapshot_list: end'); +} +exports.snapshot_list = snapshot_list; + +function snapshot_get(res, req) { + log.trace('snapshot_get: begin'); + + var filename = getParameter(req, 'filename'); + var gif = (filename && filename.indexOf('.gif') > 0); + var imageFile = gif ? 'img/snapshot.thumb.gif' : 'img/snapshot.jpg'; + + fs.readFile(imageFile, 'binary', function(err, file) { + if (err) { + var data = '{"return":"1","msg":"' + err + '"}'; + sendResponse(res, data); + } else { + res.writeHead(200, { + 'Server': 'OpenKarotz WebServer 1.0', + 'Connection': 'close', + 'Accept-Ranges': 'bytes', + // 'Content-Disposition' : 'attachment; filename=' + filename, + 'Cache-Control': 'private', + 'Pragma': 'private', + 'Content-type': (gif ? 'image/gif' : 'image/jpeg'), + 'Access-Control-Allow-Origin': '*' + }); + res.write(file, 'binary'); + res.end(); + } + }); + + log.trace('snapshot_get: end'); +} +exports.snapshot_get = snapshot_get; + diff --git a/img/snapshot.jpg b/img/snapshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..117e20a5c7967a4a21b61b5b55e144f0b70256d8 GIT binary patch literal 9517 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 literal 0 HcmV?d00001 diff --git a/img/snapshot.thumb.gif b/img/snapshot.thumb.gif new file mode 100644 index 0000000000000000000000000000000000000000..573b2587ddb2092ce31e3bf5a76014c771269919 GIT binary patch literal 2751 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 F06TKNcLV?c literal 0 HcmV?d00001 diff --git a/index.js b/index.js index e35feac..6bbf478 100644 --- a/index.js +++ b/index.js @@ -48,6 +48,9 @@ handle['/cgi-bin/ears_random'] = handlers.ears_random; handle['/cgi-bin/sound'] = handlers.sound; handle['/cgi-bin/sound_control'] = handlers.sound_control; handle['/cgi-bin/tts'] = handlers.tts; +handle['/cgi-bin/snapshot'] = handlers.snapshot; +handle['/cgi-bin/snapshot_list'] = handlers.snapshot_list; +handle['/cgi-bin/snapshot_get'] = handlers.snapshot_get; log.info('OpenKarotz Emulator'); server.start(router.route, handle);