Guest User

Untitled

a guest
May 7th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. From 00fcc655fefbaa10cc0c42ba84e18d0e6133cd4b Mon Sep 17 00:00:00 2001
  2. From: Standa Opichal <opichals@gmail.com>
  3. Date: Fri, 23 Apr 2010 19:02:07 +0200
  4. Subject: [PATCH] Migrating the XMLHTTPRequest to the current nodejs version 0.1.91.
  5.  
  6. Added relative URL support utilizing window.location.
  7. Added Cookie support through document.cookie.
  8.  
  9. It should still work nicely for environments wihtout the window or document instances.
  10. ---
  11. _base/node-xhr.js | 26 +++++++++++++++++++-------
  12. 1 files changed, 19 insertions(+), 7 deletions(-)
  13.  
  14. diff --git a/_base/node-xhr.js b/_base/node-xhr.js
  15. index 88c4438..4534fd2 100644
  16. --- a/_base/node-xhr.js
  17. +++ b/_base/node-xhr.js
  18. @@ -82,6 +82,13 @@ XMLHttpRequest = function(){
  19.  
  20. url = new dojo._Url(url);
  21. delete url.fragment;
  22. +
  23. + // get the default window location for relative URLs
  24. + if (!url.scheme &&
  25. + typeof window != "undefined" && window.location && window.location.protocol) {
  26. + url.scheme = window.location.protocol.match('[^:]+')[0];
  27. + }
  28. +
  29. if(!(url.scheme.toUpperCase() in SCHEMES)){ throw new NOT_SUPPORTED_ERR; }
  30. if(url.user){ temp_user = url.user; delete url.user; }
  31. if(url.password){ temp_password = url.password; delete url.password; }
  32. @@ -116,7 +123,7 @@ XMLHttpRequest = function(){
  33. // Not matching header or value format
  34. if(!header){ throw new SYNTAX_ERR; }
  35.  
  36. - if(!(header.toUpperCase() in RESERVED_HEADERS)){ return; }
  37. + if(header.toUpperCase() in RESERVED_HEADERS){ return; }
  38. if((/^(proxy-|sec-)/i).test(header)){ return; }
  39.  
  40. if(header in authorHeaders){
  41. @@ -152,16 +159,18 @@ XMLHttpRequest = function(){
  42. for(var h in authorHeaders){ headers[h] = authorHeaders[h].join(", "); }
  43. var url = request.url.path;
  44. if(request.url.query){ url += "?" + request.url.query; }
  45. + if (typeof document != "undefined" && document.cookie) {
  46. + headers['Cookie'] = document.cookie;
  47. + }
  48. var serverRequest = server.request(request.method, url, headers);
  49.  
  50. - if(data){ serverRequest.sendBody(data, encoding); }
  51. + if(data){ serverRequest.write(data, encoding); }
  52.  
  53. onreadystatechange = dojo.hitch(this, "onreadystatechange");
  54. - serverRequest.finish(function(serverResponse){
  55. + serverRequest.addListener('response', function(serverResponse){
  56. responseText = response.body = ""; // Assuming utf8 charset, Node should sort that out
  57.  
  58. - serverResponse.setBodyEncoding("utf8");
  59. - serverResponse.addListener("body", function(chunk){
  60. + serverResponse.addListener("data", function(chunk){
  61. if(error){ return; }
  62.  
  63. if(readyState == OPENED){
  64. @@ -173,8 +182,7 @@ XMLHttpRequest = function(){
  65.  
  66. responseText = response.body += chunk;
  67. });
  68. -
  69. - serverResponse.addListener("complete", function(){
  70. + serverResponse.addListener("end", function(){
  71. if(error){ return; }
  72.  
  73. status = serverResponse.statusCode;
  74. @@ -184,6 +192,9 @@ XMLHttpRequest = function(){
  75. for(var h in serverResponse.headers){
  76. response.headers[h] = serverResponse.headers[h];
  77. response._headers[h.toUpperCase()] = serverResponse.headers[h];
  78. + if (h.toUpperCase() == 'SET-COOKIE' && typeof document != "undefined" ) {
  79. + document.cookie = response.headers[h];
  80. + }
  81. }
  82.  
  83. readyState = DONE;
  84. @@ -192,6 +203,7 @@ XMLHttpRequest = function(){
  85.  
  86. // Need better error handling
  87. });
  88. + serverRequest.end();
  89. };
  90.  
  91. this.abort = function(){
  92. --
  93. 1.6.6
Add Comment
Please, Sign In to add comment