@@ -4,10 +4,10 @@ var http = require('http');
4
4
5
5
var port = parseInt ( process . env . PORT || 8000 ) ;
6
6
7
- var fixed = 'C' . repeat ( 20 * 1024 ) ,
8
- storedBytes = { } ,
9
- storedBuffer = { } ,
10
- storedUnicode = { } ;
7
+ var fixed = 'C' . repeat ( 20 * 1024 ) ;
8
+ var storedBytes = Object . create ( null ) ;
9
+ var storedBuffer = Object . create ( null ) ;
10
+ var storedUnicode = Object . create ( null ) ;
11
11
12
12
var useDomains = process . env . NODE_USE_DOMAINS ;
13
13
@@ -29,11 +29,13 @@ var server = module.exports = http.createServer(function(req, res) {
29
29
dom . add ( res ) ;
30
30
}
31
31
32
- var commands = req . url . split ( '/' ) ;
33
- var command = commands [ 1 ] ;
32
+ // URL format: /<type>/<length>/<chunks>/<responseBehavior>
33
+ var params = req . url . split ( '/' ) ;
34
+ var command = params [ 1 ] ;
34
35
var body = '' ;
35
- var arg = commands [ 2 ] ;
36
- var n_chunks = parseInt ( commands [ 3 ] , 10 ) ;
36
+ var arg = params [ 2 ] ;
37
+ var n_chunks = parseInt ( params [ 3 ] , 10 ) ;
38
+ var resHow = ( params . length >= 5 ? params [ 4 ] : 'normal' ) ;
37
39
var status = 200 ;
38
40
39
41
var n , i ;
@@ -45,7 +47,6 @@ var server = module.exports = http.createServer(function(req, res) {
45
47
storedBytes [ n ] = 'C' . repeat ( n ) ;
46
48
}
47
49
body = storedBytes [ n ] ;
48
-
49
50
} else if ( command === 'buffer' ) {
50
51
n = ~ ~ arg ;
51
52
if ( n <= 0 )
@@ -57,7 +58,6 @@ var server = module.exports = http.createServer(function(req, res) {
57
58
}
58
59
}
59
60
body = storedBuffer [ n ] ;
60
-
61
61
} else if ( command === 'unicode' ) {
62
62
n = ~ ~ arg ;
63
63
if ( n <= 0 )
@@ -66,23 +66,30 @@ var server = module.exports = http.createServer(function(req, res) {
66
66
storedUnicode [ n ] = '\u263A' . repeat ( n ) ;
67
67
}
68
68
body = storedUnicode [ n ] ;
69
-
70
69
} else if ( command === 'quit' ) {
71
70
res . connection . server . close ( ) ;
72
71
body = 'quitting' ;
73
-
74
72
} else if ( command === 'fixed' ) {
75
73
body = fixed ;
76
-
77
74
} else if ( command === 'echo' ) {
78
- const headers = {
79
- 'Content-Type' : 'text/plain' ,
80
- 'Transfer-Encoding' : 'chunked'
81
- } ;
82
- res . writeHead ( 200 , headers ) ;
75
+ switch ( resHow ) {
76
+ case 'setHeader' :
77
+ res . statusCode = 200 ;
78
+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
79
+ res . setHeader ( 'Transfer-Encoding' , 'chunked' ) ;
80
+ break ;
81
+ case 'setHeaderWH' :
82
+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
83
+ res . writeHead ( 200 , { 'Transfer-Encoding' : 'chunked' } ) ;
84
+ break ;
85
+ default :
86
+ res . writeHead ( 200 , {
87
+ 'Content-Type' : 'text/plain' ,
88
+ 'Transfer-Encoding' : 'chunked'
89
+ } ) ;
90
+ }
83
91
req . pipe ( res ) ;
84
92
return ;
85
-
86
93
} else {
87
94
status = 404 ;
88
95
body = 'not found\n' ;
@@ -91,11 +98,22 @@ var server = module.exports = http.createServer(function(req, res) {
91
98
// example: http://localhost:port/bytes/512/4
92
99
// sends a 512 byte body in 4 chunks of 128 bytes
93
100
if ( n_chunks > 0 ) {
94
- const headers = {
95
- 'Content-Type' : 'text/plain' ,
96
- 'Transfer-Encoding' : 'chunked'
97
- } ;
98
- res . writeHead ( status , headers ) ;
101
+ switch ( resHow ) {
102
+ case 'setHeader' :
103
+ res . statusCode = status ;
104
+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
105
+ res . setHeader ( 'Transfer-Encoding' , 'chunked' ) ;
106
+ break ;
107
+ case 'setHeaderWH' :
108
+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
109
+ res . writeHead ( status , { 'Transfer-Encoding' : 'chunked' } ) ;
110
+ break ;
111
+ default :
112
+ res . writeHead ( status , {
113
+ 'Content-Type' : 'text/plain' ,
114
+ 'Transfer-Encoding' : 'chunked'
115
+ } ) ;
116
+ }
99
117
// send body in chunks
100
118
var len = body . length ;
101
119
var step = Math . floor ( len / n_chunks ) || 1 ;
@@ -105,12 +123,22 @@ var server = module.exports = http.createServer(function(req, res) {
105
123
}
106
124
res . end ( body . slice ( ( n_chunks - 1 ) * step ) ) ;
107
125
} else {
108
- const headers = {
109
- 'Content-Type' : 'text/plain' ,
110
- 'Content-Length' : body . length . toString ( )
111
- } ;
112
-
113
- res . writeHead ( status , headers ) ;
126
+ switch ( resHow ) {
127
+ case 'setHeader' :
128
+ res . statusCode = status ;
129
+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
130
+ res . setHeader ( 'Content-Length' , body . length . toString ( ) ) ;
131
+ break ;
132
+ case 'setHeaderWH' :
133
+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
134
+ res . writeHead ( status , { 'Content-Length' : body . length . toString ( ) } ) ;
135
+ break ;
136
+ default :
137
+ res . writeHead ( status , {
138
+ 'Content-Type' : 'text/plain' ,
139
+ 'Content-Length' : body . length . toString ( )
140
+ } ) ;
141
+ }
114
142
res . end ( body ) ;
115
143
}
116
144
} ) ;
0 commit comments