ous.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. var fs = require('fs');
  2. var page = require('webpage').create();
  3. var initial_done = false;
  4. var initial_bytes = '';
  5. var totalbytes = 0;
  6. var downstreamdata = {};
  7. var upstream_data = {};
  8. var ous_in_data = '';
  9. var slitheenID = '';
  10. var server = require('webserver').create();
  11. var ous_in = server.listen('127.0.0.1:8888', function(request, response) {
  12. console.log("Read in " + request.post);
  13. if(slitheenID == ''){
  14. slitheenID = request.post + ' ';
  15. } else {
  16. ous_in_data += request.post;
  17. }
  18. response.close();
  19. });
  20. if(!ous_in){
  21. console.log('Failed to listen on port 8888');
  22. phantom.exit();
  23. } else {
  24. console.log('Listening :)');
  25. }
  26. var output = fs.open("OUS_out", {mode: 'wb'});
  27. page.captureContent = ['.*'];
  28. page.onResourceRequested = function(request, network) {
  29. //console.log('Request ' + JSON.stringify(request, undefined, 4));
  30. if( ous_in_data != ''){
  31. var bytes = ous_in_data;
  32. ous_in_data = '';
  33. bytes.replace(/\r?\n|\r/g, "");
  34. network.setHeader('X-Slitheen', slitheenID + bytes);
  35. console.log('Sent X-Slitheen: ' + slitheenID + bytes);
  36. upstream_data[request.id] = bytes;
  37. } else {
  38. network.setHeader('X-Slitheen', slitheenID);
  39. console.log('Sent X-Slitheen: ' + slitheenID);
  40. }
  41. };
  42. page.onResourceReceived = function(response) {
  43. //console.log('Receive ' + JSON.stringify(response, undefined, 4));
  44. var id = response.id;
  45. if (response.stage == "start"){
  46. downstreamdata[response.id] = response.bodySize;
  47. }
  48. if (response.stage == "end"){
  49. totalbytes += downstreamdata[response.id];
  50. //console.log("totalbytes is now " + totalbytes);
  51. }
  52. //check to see if request successfully carried data
  53. if(upstream_data.hasOwnProperty(id)){
  54. if(response.status != 0){
  55. delete upstream_data[id];
  56. }
  57. }
  58. if(response.stage == "end" && response.contentType == "slitheen"){
  59. fs.write("slitheen.out", response.body, 'a');
  60. fs.write("slitheen.out", '\n', 'a');
  61. output.write(response.bodySize + '\n' + response.body);
  62. output.flush();
  63. }
  64. };
  65. var count = 1;
  66. function loadpage(){
  67. page.clearMemoryCache();
  68. totalbytes = 0;
  69. var t = Date.now();
  70. page.open('https://gmail.com', function(status) {
  71. console.log("Status for page load "+ count + " : " + status);
  72. if(status === "success") {
  73. t = Date.now() - t;
  74. count += 1;
  75. //if(count > 102){
  76. // phantom.exit();
  77. //}
  78. fs.write("timing1.out", t + ',', 'a');
  79. fs.write("size1.out", totalbytes + ',', 'a');
  80. } else {
  81. fs.write("timing1.out", '-1,', 'a');
  82. fs.write("size1.out", '-1,', 'a');
  83. }
  84. for( var id in upstream_data){
  85. ous_in_data += upstream_data[id];
  86. }
  87. loadpage();
  88. });
  89. }
  90. loadpage();