PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` "use strict"; var makeChannel = require('culvert'); var wrapHandler = require('../lib/wrap-handler'); var net = require('net'); module.exports = connect; function connect(host, port, onError) { port = port|0; host = String(host); if (!port || !host) throw new TypeError("host and port are required"); // Wrap event handlers from node stream onConnect = wrap(onConnect, onError); pump = wrap(pump, onError); onEnd = wrap(onEnd, onError); onDrain = wrap(onDrain, onError); // Wrap event handlers from culvert socket onTake = wrapHandler(onTake, onError); var serverChannel = makeChannel(); var clientChannel = makeChannel(); var socket = { put: serverChannel.put, drain: serverChannel.drain, take: clientChannel.take }; var client = net.connect({ host: host, port: port }, onConnect); if (onError) client.on("error", onError); return { put: clientChannel.put, drain: clientChannel.drain, take: serverChannel.take }; function onConnect() { socket.take(onTake); client.on("end", onEnd); client.on("readable", pump); client.on("drain", onDrain); client.on("error", onError); } function pump() { var chunk; do { chunk = client.read(); if (!chunk) return; } while (socket.put(chunk)); socket.drain(pump); } function onEnd() { socket.put(); } function onTake(data) { if (data === undefined) { client.end(); } else if (client.write(data)) { socket.take(onTake); } } function onDrain() { socket.take(onTake); } } function wrap(fn, onError) { return function () { try { return fn.apply(this, arguments); } catch (err) { onError(err); } }; }