bossan 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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)