bossan 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 943923d13677bcb0574eae13e2bfe1145af1fd0a
4
- data.tar.gz: b16bc4e09fb61dca0f8f84a4f011f744e1a15ed6
3
+ metadata.gz: e969be8e7c6867dcf66c449d02c4972699230b18
4
+ data.tar.gz: 2ac87fd5dc7533b0d48ef502223c6bb3f4406033
5
5
  SHA512:
6
- metadata.gz: dfc563ed9e3ba7221fb7099b2ccfdc5cc2e20588b34fbf967a31f7cf2d89423851c60033679a699d2290f1350f9d890caa353ab4bd09bb0bae589c2684d57ca6
7
- data.tar.gz: 0164c6c0bee4469c55077a81a1e6457c913fec1c4cb31b1ebba099530b329670f58305482489607de785cdf99011ea86c29deaf24a058c95e2c076709bd0ea44
6
+ metadata.gz: 09880b9fd1622640b6f1eaada5e2b6d62c1f282fa5f0e0810495bc7a7bd4cfa8362318bc753b9c679c6466f26dea164e0dd3fae5d5d5df1cf1c5c1cea929aed8
7
+ data.tar.gz: 9c042fb1d4d6593a237883af46d14bbeb72e03a4ef095295420a62ae310a4f77c5a0969f61b38b5b4e9feb5a36b65d322122d0f4f540c167ca6c1e3a43dc7dbf
@@ -1,5 +1,11 @@
1
1
  # CHANGELOG
2
2
 
3
+ ### v0.4.3
4
+
5
+ (Bug release. release 2013-07-27)
6
+
7
+ * fix keepalive
8
+
3
9
  ### v0.4.2
4
10
 
5
11
  (Bug release. release 2013-07-25)
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/kubo39/bossan.png?branch=master)](http://travis-ci.org/kubo39/bossan)
4
4
 
5
- Bossan is a high performance asynchronous ruby's rack-compliant web server.
5
+ Bossan is a high performance asynchronous ruby's rack web server.
6
6
 
7
7
  ## Requirements
8
8
 
@@ -12,16 +12,17 @@ Bossan supports Linux, FreeBSD and MacOSX(need gcc>=4.2).
12
12
 
13
13
  ## Installation
14
14
 
15
- from rubygems
15
+ Install from rubygems:
16
16
 
17
17
  `gem install bossan`
18
18
 
19
- from source(github)
19
+ Install from source(github):
20
20
 
21
21
  ```
22
22
  git clone git://github.com/kubo39/bossan.git
23
23
  cd bossan
24
24
  rake
25
+ rake install
25
26
  ```
26
27
 
27
28
  ## Usage
@@ -45,6 +46,10 @@ Bossan.run(proc {|env|
45
46
  })
46
47
  ```
47
48
 
49
+ with rackup:
50
+
51
+ `$ rackup config.ru -s bossan`
52
+
48
53
  ## Contributing
49
54
 
50
55
  1. Fork it
@@ -0,0 +1,17 @@
1
+ require_relative '../lib/bossan'
2
+
3
+
4
+ app = lambda do |env|
5
+ body = (1..Float::INFINITY).lazy.map(&:to_s)
6
+ [
7
+ 200, # Status code
8
+ { # Response headers
9
+ 'Content-Type' => 'text/html',
10
+ },
11
+ body # Response body
12
+ ]
13
+ end
14
+
15
+ Bossan.set_keepalive(10)
16
+ Bossan.listen('127.0.0.1', 8000)
17
+ Bossan.run(app)
@@ -23,7 +23,7 @@
23
23
  #define CRLF "\r\n"
24
24
  #define DELIM ": "
25
25
 
26
- #define SERVER "bossan/0.4.2"
26
+ #define SERVER "bossan/0.4.3"
27
27
 
28
28
  #define H_MSG_500 "HTTP/1.0 500 Internal Server Error\r\nContent-Type: text/html\r\nServer: " SERVER "\r\n\r\n"
29
29
 
@@ -701,12 +701,15 @@ write_headers(client_t *client, char *data, size_t datalen)
701
701
  }
702
702
 
703
703
 
704
- static void
704
+ response_status
705
705
  close_response(client_t *client)
706
706
  {
707
- //send all response
708
- //closing reponse object
709
- client->response_closed = 1;
707
+ if (!client->response_closed) {
708
+ //send all response
709
+ //closing reponse object
710
+ client->response_closed = 1;
711
+ }
712
+ return STATUS_OK;
710
713
  }
711
714
 
712
715
 
@@ -784,21 +787,21 @@ processs_write(client_t *client)
784
787
  break;
785
788
  }
786
789
  }
790
+ }
787
791
 
788
- if(client->chunked_response){
789
- DEBUG("write last chunk");
790
- //last packet
791
- bucket = new_write_bucket(client->fd, 3);
792
- if(bucket == NULL){
793
- return STATUS_ERROR;
794
- }
795
- set_last_chunked_data(bucket);
796
- writev_bucket(bucket);
797
- free_write_bucket(bucket);
792
+ if(client->chunked_response){
793
+ DEBUG("write last chunk");
794
+ //last packet
795
+ bucket = new_write_bucket(client->fd, 3);
796
+ if(bucket == NULL){
797
+ return STATUS_ERROR;
798
798
  }
799
- close_response(client);
799
+ set_last_chunked_data(bucket);
800
+ writev_bucket(bucket);
801
+ free_write_bucket(bucket);
802
+ return close_response(client);
800
803
  }
801
- return STATUS_OK;
804
+ return close_response(client);
802
805
  }
803
806
 
804
807
 
@@ -1,3 +1,3 @@
1
1
  module Bossan
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -1,8 +1,8 @@
1
1
  require_relative '../lib/bossan'
2
+ require_relative './util'
2
3
  require 'minitest/unit'
3
4
  require 'test/unit/testcase'
4
5
  require 'uri'
5
- require 'net/http'
6
6
 
7
7
 
8
8
  DEFAULT_HOST = "localhost"
@@ -38,20 +38,6 @@ class RackChunkResponseTest < Test::Unit::TestCase
38
38
  end
39
39
 
40
40
 
41
- def server_is_wake_up? n=100
42
- n.times {
43
- begin
44
- Net::HTTP.start(DEFAULT_HOST, DEFAULT_PORT)
45
- rescue
46
- next
47
- end
48
- $stderr.puts "*** running success ***"
49
- return true
50
- }
51
- return false
52
- end
53
-
54
-
55
41
  begin
56
42
  $stderr.puts RUBY_DESCRIPTION
57
43
 
@@ -22,8 +22,7 @@ class RackEnvSimpleGetTest < Test::Unit::TestCase
22
22
  # I have no idea how to check this two values..
23
23
  @env.delete "rack.input"
24
24
  @env.delete "rack.errors"
25
- # pp @env
26
- w.write @env
25
+ w.write Marshal.dump(@env)
27
26
  w.close
28
27
  body = RESPONSE
29
28
  [200,
@@ -43,12 +42,9 @@ class RackEnvSimpleGetTest < Test::Unit::TestCase
43
42
  }
44
43
 
45
44
  w.close
46
- env = r.read
45
+ env = Marshal.load(r.read)
47
46
  r.close
48
47
 
49
- env = eval "Hash[" + env + "]"
50
- # pp env
51
-
52
48
  assert_equal(env["PATH_INFO"], "/")
53
49
  assert_equal(env["SCRIPT_NAME"], "")
54
50
  assert_equal(env["QUERY_STRING"], "")
@@ -22,7 +22,7 @@ class RackEnvSimpleQueryTest < Test::Unit::TestCase
22
22
  # I have no idea how to check this two values..
23
23
  @env.delete "rack.input"
24
24
  @env.delete "rack.errors"
25
- w.write @env
25
+ w.write Marshal.dump(@env)
26
26
  w.close
27
27
  body = RESPONSE
28
28
  [200,
@@ -42,12 +42,9 @@ class RackEnvSimpleQueryTest < Test::Unit::TestCase
42
42
  }
43
43
 
44
44
  w.close
45
- env = r.read
45
+ env = Marshal.load(r.read)
46
46
  r.close
47
47
 
48
- # env = eval "Hash[" + env.gsub("\"", "'") + "]"
49
- env = eval "Hash[" + env + "]"
50
-
51
48
  assert_equal(env["PATH_INFO"], "/ABC/DEF")
52
49
  assert_equal(env["QUERY_STRING"], "a=1234&bbbb=ccc")
53
50
  ensure
@@ -1,7 +1,7 @@
1
1
  require_relative '../lib/bossan'
2
+ require_relative './util'
2
3
  require 'minitest/unit'
3
4
  require 'test/unit/testcase'
4
- require 'net/http'
5
5
 
6
6
 
7
7
  DEFAULT_HOST = "localhost"
@@ -34,21 +34,6 @@ class RackErrSpecTest < Test::Unit::TestCase
34
34
  end
35
35
 
36
36
 
37
- def server_is_wake_up? n=100
38
- n.times {
39
- begin
40
- Net::HTTP.start(DEFAULT_HOST, DEFAULT_PORT)
41
- rescue
42
- next
43
- end
44
- $stderr.puts "*** running success ***"
45
- return true
46
- }
47
- return false
48
- end
49
-
50
-
51
-
52
37
  begin
53
38
  $stderr.puts RUBY_DESCRIPTION
54
39
  pid = fork do
@@ -1,8 +1,8 @@
1
1
  require_relative '../lib/bossan'
2
+ require_relative './util'
2
3
  require 'minitest/unit'
3
4
  require 'test/unit/testcase'
4
5
  require 'socket'
5
- require 'net/http'
6
6
 
7
7
 
8
8
  ASSERT_RESPONSE = "Hello world!"
@@ -93,20 +93,6 @@ class BadHttpMethodTest < Test::Unit::TestCase
93
93
  end
94
94
 
95
95
 
96
- def server_is_wake_up? n=100
97
- n.times {
98
- begin
99
- Net::HTTP.start(DEFAULT_HOST, DEFAULT_PORT)
100
- rescue
101
- next
102
- end
103
- $stderr.puts "*** running success ***"
104
- return true
105
- }
106
- return false
107
- end
108
-
109
-
110
96
  begin
111
97
  $stderr.puts RUBY_DESCRIPTION
112
98
 
@@ -1,8 +1,8 @@
1
1
  require_relative '../lib/bossan'
2
+ require_relative './util'
2
3
  require 'minitest/unit'
3
4
  require 'test/unit/testcase'
4
5
  require 'uri'
5
- require 'net/http'
6
6
 
7
7
 
8
8
  DEFAULT_HOST = "localhost"
@@ -45,20 +45,6 @@ class RackSpecTest < Test::Unit::TestCase
45
45
  end
46
46
 
47
47
 
48
- def server_is_wake_up? n=100
49
- n.times {
50
- begin
51
- Net::HTTP.start(DEFAULT_HOST, DEFAULT_PORT)
52
- rescue
53
- next
54
- end
55
- $stderr.puts "*** running success ***"
56
- return true
57
- }
58
- return false
59
- end
60
-
61
-
62
48
  begin
63
49
  $stderr.puts RUBY_DESCRIPTION
64
50
  pid = fork do
@@ -0,0 +1,14 @@
1
+ require 'net/http'
2
+
3
+ def server_is_wake_up? n=100
4
+ n.times {
5
+ begin
6
+ Net::HTTP.start(DEFAULT_HOST, DEFAULT_PORT)
7
+ rescue
8
+ next
9
+ end
10
+ $stderr.puts "*** running success ***"
11
+ return true
12
+ }
13
+ return false
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bossan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroki Noda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-25 00:00:00.000000000 Z
11
+ date: 2013-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -49,8 +49,8 @@ files:
49
49
  - examples/config.ru
50
50
  - examples/fork_sample.rb
51
51
  - examples/hello.rb
52
+ - examples/inifinity.rb
52
53
  - examples/sinatra_app.rb
53
- - examples/uploads.rb
54
54
  - examples/views/index.haml
55
55
  - examples/views_sample.rb
56
56
  - ext/bossan/bossan.h
@@ -78,6 +78,7 @@ files:
78
78
  - test/test_rack_err_spec.rb
79
79
  - test/test_rack_evil.rb
80
80
  - test/test_rack_spec.rb
81
+ - test/util.rb
81
82
  homepage: https://github.com/kubo39/bossan
82
83
  licenses:
83
84
  - BSD
@@ -1,55 +0,0 @@
1
- require_relative '../lib/bossan'
2
- require 'rack'
3
- require 'tempfile'
4
-
5
-
6
- def view_file req
7
- tempfile = Tempfile.new('raw-upload.')
8
- req.env['rack.input'].each do |chunk|
9
- if chunk.respond_to?(:force_encoding)
10
- tempfile << chunk.force_encoding('UTF-8')
11
- else
12
- tempfile << chunk
13
- end
14
- end
15
-
16
- req.env['rack.input'].rewind
17
-
18
- tempfile.flush
19
- tempfile.rewind
20
-
21
- return Rack::Response.new(tempfile,
22
- 200,
23
- { "Content-Length" => req.env["CONTENT_LENGTH"],
24
- "Content-Type" => 'image/jpeg'})
25
- end
26
-
27
-
28
- def upload_file req
29
- return Rack::Response.new([<<-EOF
30
- <h1>Upload File</h1>
31
- <form action="" method="post" enctype="multipart/form-data">
32
- <input type="file" name="uploaded_file"><input type="submit" value="Upload">
33
- </form>
34
- EOF
35
- ],
36
- 200,
37
- )
38
- end
39
-
40
-
41
- app = ->(env) {
42
- req = Rack::Request.new(env)
43
- resp = if req.request_method == 'POST'
44
- view_file req
45
- else
46
- upload_file req
47
- end
48
- # p resp
49
- return resp
50
- }
51
-
52
-
53
- Bossan.set_max_content_length(1024 * 1024 * 1024)
54
- Bossan.listen('localhost', 8000)
55
- Bossan.run(app)