diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-10-02 12:41:22 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-10-02 12:41:22 -0700 |
commit | d62af69d5347f670c678efae81d3dbf69bb88fd4 (patch) | |
tree | ecd74993712237c6635f674ccf4a894475584895 /src | |
parent | 0035201655ece68da0e1f201e2028562869328d5 (diff) |
support for connecting to sockets with fake ips from gethostbyname
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js index 5d97b41f..57a107ea 100644 --- a/src/library.js +++ b/src/library.js @@ -6412,7 +6412,7 @@ LibraryManager.library = { return fd; }, - connect__deps: ['$Sockets', '_inet_ntop_raw', 'ntohs'], + connect__deps: ['$Sockets', '_inet_ntop_raw', 'ntohs', 'gethostbyname'], connect: function(fd, addr, addrlen) { var info = Sockets.fds[fd]; if (!info) return -1; @@ -6420,6 +6420,14 @@ LibraryManager.library = { info.addr = getValue(addr + Sockets.sockaddr_in_layout.sin_addr, 'i32'); info.port = _ntohs(getValue(addr + Sockets.sockaddr_in_layout.sin_port, 'i16')); info.host = __inet_ntop_raw(info.addr); + // Support 'fake' ips from gethostbyname + var parts = info.host.split('.'); + if (parts[0] == '172' && parts[1] == '29') { + var low = Number(parts[2]); + var high = Number(parts[3]); + info.host = _gethostbyname.table[low + 0xff*high]; + assert(info.host, 'problem translating fake ip ' + parts); + } info.socket = new WebSocket('ws://' + info.host + ':' + info.port, ['arraybuffer']); info.socket.binaryType = 'arraybuffer'; info.buffer = new Uint8Array(Sockets.BUFFER_SIZE); |