http_parser.rb 0.5.1-x86-mswin32-60 → 0.5.2-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile.lock +16 -16
  2. data/LICENSE-MIT +20 -0
  3. data/ext/ruby_http_parser/org/ruby_http_parser/RubyHttpParser.java +68 -11
  4. data/ext/ruby_http_parser/ruby_http_parser.c +74 -6
  5. data/ext/ruby_http_parser/vendor/http-parser-java/LICENSE-MIT +26 -1
  6. data/ext/ruby_http_parser/vendor/http-parser-java/README.md +23 -143
  7. data/ext/ruby_http_parser/vendor/http-parser-java/TODO +3 -0
  8. data/ext/ruby_http_parser/vendor/http-parser-java/build.xml +74 -0
  9. data/ext/ruby_http_parser/vendor/http-parser-java/http_parser.c +115 -61
  10. data/ext/ruby_http_parser/vendor/http-parser-java/http_parser.h +19 -3
  11. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPCallback.java +8 -0
  12. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPDataCallback.java +34 -0
  13. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPErrorCallback.java +12 -0
  14. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPException.java +4 -2
  15. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPMethod.java +64 -52
  16. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPParser.java +5 -0
  17. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/ParserSettings.java +323 -0
  18. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/{lolevel/Util.java → Util.java} +27 -28
  19. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPParser.java +259 -85
  20. data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/ParserSettings.java +1 -0
  21. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Message.java +324 -0
  22. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Requests.java +69 -0
  23. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Responses.java +51 -0
  24. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Test.java +15 -0
  25. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestHeaderOverflowError.java +47 -0
  26. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestLoaderNG.java +183 -447
  27. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestNoOverflowLongBody.java +61 -0
  28. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/UnitTest.java +2 -1
  29. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Upgrade.java +26 -0
  30. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Util.java +165 -0
  31. data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/WrongContentLength.java +58 -0
  32. data/ext/ruby_http_parser/vendor/http-parser-java/test.c +232 -29
  33. data/ext/ruby_http_parser/vendor/http-parser-java/test_permutations +1 -1
  34. data/ext/ruby_http_parser/vendor/http-parser-java/test_unit +1 -1
  35. data/ext/ruby_http_parser/vendor/http-parser-java/test_utf8 +1 -0
  36. data/ext/ruby_http_parser/vendor/http-parser-java/tests.dumped +154 -7
  37. data/ext/ruby_http_parser/vendor/http-parser-java/tests.utf8 +17 -0
  38. data/ext/ruby_http_parser/vendor/http-parser/LICENSE-MIT +1 -1
  39. data/ext/ruby_http_parser/vendor/http-parser/http_parser.c +52 -10
  40. data/ext/ruby_http_parser/vendor/http-parser/http_parser.h +3 -1
  41. data/ext/ruby_http_parser/vendor/http-parser/test.c +89 -3
  42. data/http_parser.rb.gemspec +8 -2
  43. data/lib/http_parser.rb +17 -0
  44. data/spec/parser_spec.rb +97 -6
  45. data/tasks/compile.rake +3 -1
  46. metadata +83 -20
  47. data/ext/ruby_http_parser/vendor/http-parser-java/CONTRIBUTIONS +0 -4
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "http_parser.rb"
3
- s.version = "0.5.1"
3
+ s.version = "0.5.2"
4
4
  s.summary = "Simple callback-based HTTP request/response parser"
5
5
  s.description = "Ruby bindings to http://github.com/ry/http-parser and http://github.com/a2800276/http-parser.java"
6
6
 
@@ -13,7 +13,13 @@ Gem::Specification.new do |s|
13
13
  s.require_paths = ["lib"]
14
14
  s.extensions = ["ext/ruby_http_parser/extconf.rb"]
15
15
 
16
- s.add_development_dependency 'rake-compiler', '>= 0.7.5'
16
+ s.add_development_dependency 'rake-compiler', '>= 0.7.9'
17
17
  s.add_development_dependency 'rspec', '>= 2.0.1'
18
18
  s.add_development_dependency 'json', '>= 1.4.6'
19
+
20
+ if RUBY_PLATFORM =~ /java/
21
+ s.add_development_dependency 'jruby-openssl'
22
+ else
23
+ s.add_development_dependency 'yajl-ruby', '>= 0.8.1'
24
+ end
19
25
  end
data/lib/http_parser.rb CHANGED
@@ -2,3 +2,20 @@ $:.unshift File.expand_path('../', __FILE__)
2
2
  require 'ruby_http_parser'
3
3
 
4
4
  Http = HTTP
5
+
6
+ module HTTP
7
+ class Parser
8
+ class << self
9
+ attr_reader :default_header_value_type
10
+
11
+ def default_header_value_type=(val)
12
+ if (val != :mixed && val != :strings && val != :arrays)
13
+ raise ArgumentError, "Invalid header value type"
14
+ end
15
+ @default_header_value_type = val
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ HTTP::Parser.default_header_value_type = :mixed
data/spec/parser_spec.rb CHANGED
@@ -27,8 +27,37 @@ describe HTTP::Parser do
27
27
  @parser.request_path.should be_nil
28
28
  @parser.query_string.should be_nil
29
29
  @parser.fragment.should be_nil
30
+
31
+ @parser.header_value_type.should == :mixed
32
+ end
33
+
34
+ it "should allow us to set the header value type" do
35
+ [:mixed, :arrays, :strings].each do |type|
36
+ @parser.header_value_type = type
37
+ @parser.header_value_type.should == type
38
+
39
+ parser_tmp = HTTP::Parser.new(nil, type)
40
+ parser_tmp.header_value_type.should == type
41
+ end
30
42
  end
31
43
 
44
+ it "should allow us to set the default header value type" do
45
+ [:mixed, :arrays, :strings].each do |type|
46
+ HTTP::Parser.default_header_value_type = type
47
+
48
+ parser = HTTP::Parser.new
49
+ parser.header_value_type.should == type
50
+ end
51
+ end
52
+
53
+ it "should throw an Argument Error if header value type is invalid" do
54
+ proc{ @parser.header_value_type = 'bob' }.should raise_error(ArgumentError)
55
+ end
56
+
57
+ it "should throw an Argument Error if default header value type is invalid" do
58
+ proc{ HTTP::Parser.default_header_value_type = 'bob' }.should raise_error(ArgumentError)
59
+ end
60
+
32
61
  it "should implement basic api" do
33
62
  @parser <<
34
63
  "GET /test?ok=1 HTTP/1.1\r\n" +
@@ -132,16 +161,57 @@ describe HTTP::Parser do
132
161
  }
133
162
  end
134
163
 
135
- it "should handle multiple headers" do
164
+ it "should handle multiple headers using strings" do
165
+ @parser.header_value_type = :strings
166
+
136
167
  @parser <<
137
168
  "GET / HTTP/1.0\r\n" +
138
- "Header: value 1\r\n" +
139
- "Header: value 2\r\n" +
169
+ "Set-Cookie: PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com\r\n" +
170
+ "Set-Cookie: NID=46jSHxPM; path=/; domain=.bob.com; HttpOnly\r\n" +
140
171
  "\r\n"
141
172
 
142
- @parser.headers.should == {
143
- 'Header' => 'value 1, value 2'
144
- }
173
+ @parser.headers["Set-Cookie"].should == "PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com, NID=46jSHxPM; path=/; domain=.bob.com; HttpOnly"
174
+ end
175
+
176
+ it "should handle multiple headers using strings" do
177
+ @parser.header_value_type = :arrays
178
+
179
+ @parser <<
180
+ "GET / HTTP/1.0\r\n" +
181
+ "Set-Cookie: PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com\r\n" +
182
+ "Set-Cookie: NID=46jSHxPM; path=/; domain=.bob.com; HttpOnly\r\n" +
183
+ "\r\n"
184
+
185
+ @parser.headers["Set-Cookie"].should == [
186
+ "PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com",
187
+ "NID=46jSHxPM; path=/; domain=.bob.com; HttpOnly"
188
+ ]
189
+ end
190
+
191
+ it "should handle multiple headers using mixed" do
192
+ @parser.header_value_type = :mixed
193
+
194
+ @parser <<
195
+ "GET / HTTP/1.0\r\n" +
196
+ "Set-Cookie: PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com\r\n" +
197
+ "Set-Cookie: NID=46jSHxPM; path=/; domain=.bob.com; HttpOnly\r\n" +
198
+ "\r\n"
199
+
200
+ @parser.headers["Set-Cookie"].should == [
201
+ "PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com",
202
+ "NID=46jSHxPM; path=/; domain=.bob.com; HttpOnly"
203
+ ]
204
+ end
205
+
206
+ it "should handle a single cookie using mixed" do
207
+ @parser.header_value_type = :mixed
208
+
209
+ @parser <<
210
+ "GET / HTTP/1.0\r\n" +
211
+ "Set-Cookie: PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com\r\n" +
212
+ "\r\n"
213
+
214
+ @parser.headers["Set-Cookie"].should == "PREF=ID=a7d2c98; expires=Fri, 05-Apr-2013 05:00:45 GMT; path=/; domain=.bob.com"
145
215
  end
146
216
 
147
217
  it "should support alternative api" do
@@ -172,6 +242,27 @@ describe HTTP::Parser do
172
242
  @done.should be_true
173
243
  end
174
244
 
245
+ it 'sets upgrade_data if available' do
246
+ @parser <<
247
+ "GET /demo HTTP/1.1\r\n" +
248
+ "Connection: Upgrade\r\n" +
249
+ "Upgrade: WebSocket\r\n\r\n" +
250
+ "third key data"
251
+
252
+ @parser.upgrade?.should be_true
253
+ @parser.upgrade_data.should == 'third key data'
254
+ end
255
+
256
+ it 'sets upgrade_data to blank if un-available' do
257
+ @parser <<
258
+ "GET /demo HTTP/1.1\r\n" +
259
+ "Connection: Upgrade\r\n" +
260
+ "Upgrade: WebSocket\r\n\r\n"
261
+
262
+ @parser.upgrade?.should be_true
263
+ @parser.upgrade_data.should == ''
264
+ end
265
+
175
266
  %w[ request response ].each do |type|
176
267
  JSON.parse(File.read(File.expand_path("../support/#{type}s.json", __FILE__))).each do |test|
177
268
  test['headers'] ||= {}
data/tasks/compile.rake CHANGED
@@ -10,7 +10,9 @@ Rake::GemPackageTask.new(gemspec) do |pkg|
10
10
  end
11
11
 
12
12
  if RUBY_PLATFORM =~ /java/
13
- Rake::JavaExtensionTask.new("ruby_http_parser", gemspec)
13
+ Rake::JavaExtensionTask.new("ruby_http_parser", gemspec) do |ext|
14
+ ext.classpath = File.expand_path('../../ext/ruby_http_parser/vendor/http-parser-java/ext/primitives.jar', __FILE__)
15
+ end
14
16
  else
15
17
  Rake::ExtensionTask.new("ruby_http_parser", gemspec) do |ext|
16
18
  unless RUBY_PLATFORM =~ /mswin|mingw/
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_parser.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ hash: 15
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 2
10
+ version: 0.5.2
5
11
  platform: x86-mswin32-60
6
12
  authors:
7
13
  - Marc-Andre Cournoyer
@@ -10,39 +16,73 @@ autorequire:
10
16
  bindir: bin
11
17
  cert_chain: []
12
18
 
13
- date: 2011-01-25 00:00:00 -08:00
19
+ date: 2011-08-27 00:00:00 -07:00
14
20
  default_executable:
15
21
  dependencies:
16
22
  - !ruby/object:Gem::Dependency
17
23
  name: rake-compiler
18
- type: :development
19
- version_requirement:
20
- version_requirements: !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
21
27
  requirements:
22
28
  - - ">="
23
29
  - !ruby/object:Gem::Version
24
- version: 0.7.5
25
- version:
30
+ hash: 17
31
+ segments:
32
+ - 0
33
+ - 7
34
+ - 9
35
+ version: 0.7.9
36
+ type: :development
37
+ version_requirements: *id001
26
38
  - !ruby/object:Gem::Dependency
27
39
  name: rspec
28
- type: :development
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
31
43
  requirements:
32
44
  - - ">="
33
45
  - !ruby/object:Gem::Version
46
+ hash: 13
47
+ segments:
48
+ - 2
49
+ - 0
50
+ - 1
34
51
  version: 2.0.1
35
- version:
52
+ type: :development
53
+ version_requirements: *id002
36
54
  - !ruby/object:Gem::Dependency
37
55
  name: json
38
- type: :development
39
- version_requirement:
40
- version_requirements: !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
41
59
  requirements:
42
60
  - - ">="
43
61
  - !ruby/object:Gem::Version
62
+ hash: 11
63
+ segments:
64
+ - 1
65
+ - 4
66
+ - 6
44
67
  version: 1.4.6
45
- version:
68
+ type: :development
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: yajl-ruby
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 61
79
+ segments:
80
+ - 0
81
+ - 8
82
+ - 1
83
+ version: 0.8.1
84
+ type: :development
85
+ version_requirements: *id004
46
86
  description: Ruby bindings to http://github.com/ry/http-parser and http://github.com/a2800276/http-parser.java
47
87
  email:
48
88
  - macournoyer@gmail.com
@@ -58,6 +98,7 @@ files:
58
98
  - .gitmodules
59
99
  - Gemfile
60
100
  - Gemfile.lock
101
+ - LICENSE-MIT
61
102
  - README.md
62
103
  - Rakefile
63
104
  - bench/thin.rb
@@ -86,13 +127,17 @@ files:
86
127
  - ext/ruby_http_parser/vendor/http-parser/Makefile
87
128
  - ext/ruby_http_parser/vendor/http-parser/README.md
88
129
  - ext/ruby_http_parser/vendor/http-parser/test.c
130
+ - ext/ruby_http_parser/vendor/http-parser-java/build.xml
89
131
  - ext/ruby_http_parser/vendor/http-parser-java/compile
90
- - ext/ruby_http_parser/vendor/http-parser-java/CONTRIBUTIONS
132
+ - ext/ruby_http_parser/vendor/http-parser-java/ext/primitives.jar
91
133
  - ext/ruby_http_parser/vendor/http-parser-java/http_parser.c
92
134
  - ext/ruby_http_parser/vendor/http-parser-java/http_parser.h
93
135
  - ext/ruby_http_parser/vendor/http-parser-java/LICENSE-MIT
94
136
  - ext/ruby_http_parser/vendor/http-parser-java/Makefile
95
137
  - ext/ruby_http_parser/vendor/http-parser-java/README.md
138
+ - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPCallback.java
139
+ - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPDataCallback.java
140
+ - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPErrorCallback.java
96
141
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPException.java
97
142
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPMethod.java
98
143
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPParser.java
@@ -101,14 +146,26 @@ files:
101
146
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPErrorCallback.java
102
147
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPParser.java
103
148
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/ParserSettings.java
104
- - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/Util.java
149
+ - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/ParserSettings.java
105
150
  - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/ParserType.java
151
+ - ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/Util.java
152
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Message.java
153
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Requests.java
154
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Responses.java
155
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Test.java
156
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestHeaderOverflowError.java
106
157
  - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestLoaderNG.java
158
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestNoOverflowLongBody.java
107
159
  - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/UnitTest.java
160
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Upgrade.java
161
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Util.java
162
+ - ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/WrongContentLength.java
108
163
  - ext/ruby_http_parser/vendor/http-parser-java/test.c
109
164
  - ext/ruby_http_parser/vendor/http-parser-java/test_permutations
110
165
  - ext/ruby_http_parser/vendor/http-parser-java/test_unit
166
+ - ext/ruby_http_parser/vendor/http-parser-java/test_utf8
111
167
  - ext/ruby_http_parser/vendor/http-parser-java/tests.dumped
168
+ - ext/ruby_http_parser/vendor/http-parser-java/tests.utf8
112
169
  - ext/ruby_http_parser/vendor/http-parser-java/TODO
113
170
  - ext/ruby_http_parser/vendor/http-parser-java/tools/byte_constants.rb
114
171
  - ext/ruby_http_parser/vendor/http-parser-java/tools/const_char.rb
@@ -127,21 +184,27 @@ rdoc_options: []
127
184
  require_paths:
128
185
  - lib
129
186
  required_ruby_version: !ruby/object:Gem::Requirement
187
+ none: false
130
188
  requirements:
131
189
  - - ">="
132
190
  - !ruby/object:Gem::Version
191
+ hash: 3
192
+ segments:
193
+ - 0
133
194
  version: "0"
134
- version:
135
195
  required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
136
197
  requirements:
137
198
  - - ">="
138
199
  - !ruby/object:Gem::Version
200
+ hash: 3
201
+ segments:
202
+ - 0
139
203
  version: "0"
140
- version:
141
204
  requirements: []
142
205
 
143
206
  rubyforge_project:
144
- rubygems_version: 1.3.5
207
+ rubygems_version: 1.6.2
145
208
  signing_key:
146
209
  specification_version: 3
147
210
  summary: Simple callback-based HTTP request/response parser
@@ -1,4 +0,0 @@
1
- Contributors must agree to the Contributor License Agreement before patches
2
- can be accepted.
3
-
4
- http://spreadsheets2.google.com/viewform?hl=en&formkey=dDJXOGUwbzlYaWM4cHN1MERwQS1CSnc6MQ