(socketId)
| 79 | }; |
| 80 | |
| 81 | var 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 | } |
no test coverage detected