MCPcopy
hub / github.com/google/tamperchrome / readFromSocket

Function readFromSocket

v1/app/background.js:81–204  ·  view source on GitHub ↗
(socketId)

Source from the content-addressed store, hash-verified

79};
80
81var readFromSocket = function(socketId) {
82
83 var headers = '';
84 var content = '';
85 var totalContentLength;
86 var contentLengthSoFar;
87
88 // get the first chunk
89 socket.read(socketId, function(readInfo) {
90 var data = arrayBufferToString(readInfo.data);
91 // the chrome socket read API only calls the callback if there's data, so we
92 // need to keep reading until content length is satisfied to know we're done
93 var headerEndLoc = data.indexOf("\r\n\r\n");
94 headers = data.substring(0, headerEndLoc)
95 content = data.substring(headerEndLoc + 4);
96
97 if (content.length == 0) {
98 handleRequest(headers);
99 } else {
100 // no unicode in the headers, so assume char == byte
101 contentLengthSoFar = readInfo.resultCode - headers.length - 4;
102 var lengthLoc = headers.indexOf("\nContent-Length: ");
103 var lengthEnd = data.indexOf("\r\n", lengthLoc);
104 totalContentLength = parseInt(
105 data.substring(lengthLoc + 16, lengthEnd), 10);
106 readChunk();
107 }
108 });
109
110 function readChunk() {
111 if (totalContentLength == contentLengthSoFar) {
112 handleRequest(headers, content);
113 } else {
114 socket.read(socketId, function(readInfo) {
115 content += arrayBufferToString(readInfo.data);
116 contentLengthSoFar += readInfo.resultCode;
117 readChunk();
118 });
119 }
120 }
121
122 function handleRequest(headers, content) {
123 var methodEnd = headers.indexOf(" ");
124 var uriEnd = headers.indexOf(" ", methodEnd + 1);
125 var method = headers.substring(0, methodEnd);
126 var uri = headers.substring(methodEnd + 1, uriEnd);
127 var R = /^Origin: chrome-extension:\/\/hifhgpdkfodlpnlmlnmhchnkepplebkb\r?$/;
128 var valid = headers.split('\n').some(function(header) {
129 return !!header.match(R);
130 });
131
132 if (method == 'GET') {
133 // handle "hello" requests
134 if (uri == '/hello') {
135 sendResponse(socketId, 'Hello');
136 } else {
137 sendResponse(socketId, 'I have no idea what you\'re talking about');
138 }

Callers 1

onAcceptFunction · 0.85

Calls 3

arrayBufferToStringFunction · 0.85
handleRequestFunction · 0.85
readChunkFunction · 0.85

Tested by

no test coverage detected