-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbase.coffee
More file actions
46 lines (34 loc) · 1.36 KB
/
base.coffee
File metadata and controls
46 lines (34 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
StreamStack = require('stream-stack').StreamStack
Headers = require('header-stack').Headers
HeaderParser = require('header-stack').Parser
module.exports = class IceBaseStack extends StreamStack
httpVersion: "ICE/1.0"
constructor: (stream) ->
super stream, data:@_onData
@_headerParser = new HeaderParser emitFirstLine:true
@_headerParser.on "firstLine", (line) => @_onFirstLine(line)
write: (chunk,enc) ->
if @chunkedOutgoing
@_writeChunk chunk, enc
else
@stream.write chunk, enc
end: (chunk,enc) ->
@write chunk, enc if chunk
@stream.end()
_writeHeader: (firstline,headers) ->
@stream.write Headers(headers).toString firstLine:firstline
_onData: (data) ->
if @_headerParser
@_headerParser.parse(data)
else
@emit "data", data
_onFirstLine: (line) ->
stream = new StreamStack @
@_headerParser.on "headers", (headers,leftover) =>
@_onHeaders headers, leftover, stream
@_parseFirstLine line, stream
_onHeaders: (headers,leftover,stream) ->
@_headerParser = null
stream.headers = headers
@emit @_headerCompleteEvent, stream
@emit "data", leftover if leftover