Skip to content

Commit

Permalink
Fix event handling in HTTP components so it doesn't leak
Browse files Browse the repository at this point in the history
  • Loading branch information
bergie committed Jun 7, 2011
1 parent 596039d commit 4c6d120
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 19 deletions.
12 changes: 7 additions & 5 deletions components/HTTP/BasicAuth.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@
connect = require "connect"

outSocket = null
inRequest = null

authenticate = (login, password) ->
login is "user" and password is "pass"

exports.getInputs = ->
in: (socket) ->
socket.on "data", (request) ->
inRequest = request
connect.basicAuth(authenticate) request.req, request.res, () ->
outSocket.on "connect", ->
outSocket.send request
outSocket.disconnect()

outSocket.connect()

exports.getOutputs = ->
out: (socket) -> outSocket = socket
out: (socket) ->
outSocket = socket
socket.on "connect", ->
socket.send inRequest
socket.disconnect()
12 changes: 7 additions & 5 deletions components/HTTP/Profiler.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@
connect = require "connect"

outSocket = null
inRequest = null

exports.getInputs = ->
in: (socket) ->
socket.on "data", (request) ->
inRequest = request
connect.profiler() request.req, request.res, () ->
outSocket.on "connect", ->
outSocket.send request
outSocket.disconnect()

outSocket.connect()

exports.getOutputs = ->
out: (socket) -> outSocket = socket
out: (socket) ->
outSocket = socket
socket.on "connect", ->
socket.send inRequest
socket.disconnect()
5 changes: 4 additions & 1 deletion components/HTTP/SendResponse.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@

exports.getInputs = ->
in: (socket) ->
sendRequest = null
socket.on "data", (request) ->
request.res.end()
sendRequest = request
socket.on "disconnect", (request) ->
sendRequest.res.end()
19 changes: 11 additions & 8 deletions components/HTTP/WriteResponse.coffee
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
# This component receives a request and a string on the input ports, writes
# that string to the request's response and forwards the request

outSocket = null
string = ""
inRequest = null
outSocket = null

exports.getInputs = ->
string: (socket) ->
socket.on "data", (data) ->
string += data
in: (socket) ->
socket.on "data", (request) ->
request.res.write string
socket.on "disconnect", ->
outSocket.on "connect", ->
outSocket.send request
outSocket.disconnect()
outSocket.connect()
inRequest = request
inRequest.res.write string
socket.on "disconnect", ->
outSocket.connect()

exports.getOutputs = ->
out: (socket) -> outSocket = socket
out: (socket) ->
outSocket = socket
socket.on "connect", ->
socket.send inRequest
socket.disconnect()
9 changes: 9 additions & 0 deletions noflo.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,15 @@ class NoFlo
addEdge: (edge) ->
socket = internalSocket.createSocket()

# logSocket = (message) ->
# console.error "#{socket.connection} #{edge.from.node}:#{socket.from.port} -> #{edge.to.node}:#{socket.to.port} #{message}"
# socket.on "connect", ->
# logSocket "CONN"
# socket.on "disconnect", ->
# logSocket "DISC"
# socket.on "data", ->
# logSocket "DATA"

from = @getNode edge.from.node
unless from
throw new Error "No process defined for outbound node #{edge.from.node}"
Expand Down

0 comments on commit 4c6d120

Please sign in to comment.