fcgi 0.8.6.1 → 0.8.7

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.
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ Sun Jun 25 12:46:14 JST 2006 moonwolf@moonwolf.com
2
+ * patch from http://www.kbmj.com/tech/index.php?itemid=26
3
+ * patch from http://sean.treadway.info/articles/2005/12/24/open-season-for-eagain
4
+
1
5
  Fri Apr 1 10:20:14 JST 2005 sugi@nemui.org
2
6
  * Include errno.h
3
7
 
data/README CHANGED
@@ -1,6 +1,6 @@
1
1
  = fcgi - FastCGI library for Ruby
2
2
 
3
- Version 0.8.5
3
+ Version 0.8.7
4
4
 
5
5
  == Depends
6
6
 
@@ -0,0 +1,3 @@
1
+ MANIFEST
2
+ extconf.rb
3
+ fcgi.c
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  require "mkmf"
4
2
 
5
3
  dir_config("fcgi")
@@ -1,13 +1,14 @@
1
1
  /*
2
2
  * fcgi.c
3
3
  * Copyright (C) 1998-1999 Network Applied Communication Laboratory, Inc.
4
- * Copyright (C) 2002 MoonWolf <moonwolf@moonwolf.com>
4
+ * Copyright (C) 2002-2006 MoonWolf <moonwolf@moonwolf.com>
5
5
  */
6
6
 
7
7
  #include <stdio.h>
8
8
  #include <sys/types.h>
9
9
  #include <unistd.h>
10
10
  #include <errno.h>
11
+ #include <fcntl.h>
11
12
 
12
13
  #include "ruby.h"
13
14
  #ifdef HAVE_FASTCGI_FCGIAPP_H
@@ -71,9 +72,18 @@ static VALUE fcgi_s_accept(VALUE self)
71
72
  status = FCGX_Accept_r(req);
72
73
  if (status >= 0) {
73
74
  fcgi_data *data;
74
- char **env;
75
- VALUE obj,key, value;
76
- char *pkey,*pvalue;
75
+ char **env;
76
+ VALUE obj,key, value;
77
+ char *pkey,*pvalue;
78
+ int flags, fd;
79
+
80
+ /* Unset NONBLOCKING */
81
+ fd = ((FCGX_Request*) req)->ipcFd;
82
+ flags = fcntl(fd, F_GETFL);
83
+
84
+ if (flags & O_NONBLOCK) {
85
+ fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
86
+ }
77
87
 
78
88
  obj = Data_Make_Struct(self, fcgi_data, fcgi_mark, fcgi_free_req, data);
79
89
  data->req = req;
@@ -82,7 +92,7 @@ static VALUE fcgi_s_accept(VALUE self)
82
92
  data->err = Data_Wrap_Struct(cFCGIStream, 0, 0, req->err);
83
93
  data->env = rb_hash_new();
84
94
  env = req->envp;
85
- for (env; *env; env++) {
95
+ for (; *env; env++) {
86
96
  int size = 0;
87
97
  pkey = *env;
88
98
  pvalue = pkey;
@@ -497,8 +507,7 @@ static VALUE fcgi_stream_setsync(VALUE self,VALUE sync)
497
507
 
498
508
 
499
509
 
500
- void Init_fcgi()
501
- {
510
+ void Init_fcgi() {
502
511
 
503
512
  FCGX_Init();
504
513
 
@@ -508,7 +517,7 @@ void Init_fcgi()
508
517
  rb_define_singleton_method(cFCGI, "each", fcgi_s_each, 0);
509
518
  rb_define_singleton_method(cFCGI, "each_request", fcgi_s_each, 0);
510
519
  rb_define_singleton_method(cFCGI, "is_cgi?", fcgi_s_iscgi, 0);
511
- rb_define_method(cFCGI, "in", fcgi_in, 0);
520
+ rb_define_method(cFCGI, "in", fcgi_in, 0);
512
521
  rb_define_method(cFCGI, "out", fcgi_out, 0);
513
522
  rb_define_method(cFCGI, "err", fcgi_err, 0);
514
523
  rb_define_method(cFCGI, "env", fcgi_env, 0);
@@ -363,6 +363,10 @@ rescue LoadError
363
363
 
364
364
  attr_reader :role
365
365
  attr_reader :flags
366
+
367
+ def make_body
368
+ [@role, @flags, 0, 0, 0, 0, 0].pack(BODY_FORMAT)
369
+ end
366
370
  end
367
371
 
368
372
  class AbortRequestRecord < Record
@@ -526,6 +530,12 @@ rescue LoadError
526
530
  end
527
531
  end
528
532
 
533
+ class StdoutDataRecord < GenericDataRecord
534
+ def initialize(id, flagment)
535
+ super FCGI_STDOUT, id, flagment
536
+ end
537
+ end
538
+
529
539
  class DataRecord < GenericDataRecord
530
540
  def initialize(id, flagment)
531
541
  super FCGI_DATA, id, flagment
@@ -540,7 +550,9 @@ rescue LoadError
540
550
  FCGI_ABORT_REQUEST => AbortRequestRecord,
541
551
  FCGI_PARAMS => ParamsRecord,
542
552
  FCGI_STDIN => StdinDataRecord,
543
- FCGI_DATA => DataRecord
553
+ FCGI_DATA => DataRecord,
554
+ FCGI_STDOUT => StdoutDataRecord,
555
+ FCGI_END_REQUEST => EndRequestRecord
544
556
  }
545
557
  end
546
558
 
metadata CHANGED
@@ -1,44 +1,52 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.10
2
+ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: fcgi
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.8.6.1
7
- date: 2005-06-18
8
- summary: FastCGI ruby binding.
6
+ version: 0.8.7
7
+ date: 2006-07-04 00:00:00 +09:00
8
+ summary: FastCGI library for Ruby.
9
9
  require_paths:
10
- - "."
11
- email: moonwolf@moonwolf.com
12
- homepage: http://rwiki.moonwolf.com/rw-cgi.cgi?cmd=view;name=fcgi
13
- rubyforge_project:
14
- description:
10
+ - lib
11
+ email:
12
+ homepage:
13
+ rubyforge_project: fcgi
14
+ description: FastCGI is a language independent, scalable, open extension to CGI that provides high performance without the limitations of server specific APIs. For more information, see http://www.fastcgi.com/.
15
15
  autorequire: fcgi
16
16
  default_executable:
17
17
  bindir: bin
18
- has_rdoc: true
18
+ has_rdoc: false
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
26
+ signing_key:
27
+ cert_chain:
27
28
  authors: []
29
+
28
30
  files:
29
- - ChangeLog
30
- - Rakefile
31
- - README
32
- - README.signals
33
- - fcgi.rb
34
- - ext/fcgi.c
35
- - ext/extconf.rb
31
+ - lib/fcgi.rb
32
+ - ext/fcgi
33
+ - ext/fcgi/extconf.rb
34
+ - ext/fcgi/fcgi.c
35
+ - ext/fcgi/MANIFEST
36
+ - ChangeLog
37
+ - README
38
+ - README.signals
36
39
  test_files: []
40
+
37
41
  rdoc_options: []
38
- extra_rdoc_files:
39
- - README
42
+
43
+ extra_rdoc_files: []
44
+
40
45
  executables: []
46
+
41
47
  extensions:
42
- - ext/extconf.rb
48
+ - ext/fcgi/extconf.rb
43
49
  requirements: []
44
- dependencies: []
50
+
51
+ dependencies: []
52
+
data/Rakefile DELETED
@@ -1,164 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'rake/testtask'
4
- require 'rake/rdoctask'
5
- require 'rake/gempackagetask'
6
- require 'rake/contrib/rubyforgepublisher'
7
-
8
- PKG_VERSION = "0.8.6.1"
9
- PKG_NAME = "fcgi"
10
- PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
11
-
12
- PKG_FILES = ["ChangeLog", "Rakefile", "README", "README.signals", "fcgi.rb", "ext/fcgi.c", "ext/extconf.rb"]
13
-
14
-
15
- # Publish beta gem
16
- desc "Publish the gem on leetsoft"
17
- task :publish => [:package] do
18
- Rake::SshFilePublisher.new("leetsoft.com", "dist/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
19
- Rake::SshFilePublisher.new("leetsoft.com", "dist/pkg", "pkg", "#{PKG_FILE_NAME}.tgz").upload
20
- `ssh tobi@leetsoft.com './gemupdate'`
21
- end
22
-
23
- spec = Gem::Specification.new do |s|
24
- s.name = PKG_NAME
25
- s.version = PKG_VERSION
26
- s.platform = Gem::Platform::RUBY
27
- s.summary = %q{FastCGI ruby binding.}
28
- s.email = %q{moonwolf@moonwolf.com}
29
- s.homepage = %q{http://rwiki.moonwolf.com/rw-cgi.cgi?cmd=view;name=fcgi}
30
- s.has_rdoc = true
31
- s.files = PKG_FILES
32
- s.extra_rdoc_files = ["README"]
33
- s.require_path = "."
34
- s.autorequire = "fcgi"
35
- s.extensions = ["ext/extconf.rb"]
36
- end
37
-
38
- Rake::GemPackageTask.new(spec) do |p|
39
- p.need_tar = true
40
- end
41
-
42
- # --- Ruby forge release manager by florian gross -------------------------------------------------
43
-
44
- RUBY_FORGE_PROJECT = 'fcgi'
45
- RUBY_FORGE_USER = 'xal'
46
- RELEASE_NAME = "REL #{PKG_VERSION}"
47
-
48
- desc "Publish the release files to RubyForge."
49
- task :release => [:gem] do
50
- files = ["gem"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
51
-
52
- if RUBY_FORGE_PROJECT then
53
- require 'net/http'
54
- require 'open-uri'
55
-
56
- project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
57
- project_data = open(project_uri) { |data| data.read }
58
- group_id = project_data[/[?&]group_id=(\d+)/, 1]
59
- raise "Couldn't get group id" unless group_id
60
-
61
- # This echos password to shell which is a bit sucky
62
- if ENV["RUBY_FORGE_PASSWORD"]
63
- password = ENV["RUBY_FORGE_PASSWORD"]
64
- else
65
- print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
66
- password = STDIN.gets.chomp
67
- end
68
-
69
- login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
70
- data = [
71
- "login=1",
72
- "form_loginname=#{RUBY_FORGE_USER}",
73
- "form_pw=#{password}"
74
- ].join("&")
75
- http.post("/account/login.php", data)
76
- end
77
-
78
- cookie = login_response["set-cookie"]
79
- raise "Login failed" unless cookie
80
- headers = { "Cookie" => cookie }
81
-
82
- release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
83
- release_data = open(release_uri, headers) { |data| data.read }
84
- package_id = release_data[/[?&]package_id=(\d+)/, 1]
85
- raise "Couldn't get package id" unless package_id
86
-
87
- first_file = true
88
- release_id = ""
89
-
90
- files.each do |filename|
91
- basename = File.basename(filename)
92
- file_ext = File.extname(filename)
93
- file_data = File.open(filename, "rb") { |file| file.read }
94
-
95
- puts "Releasing #{basename}..."
96
-
97
- release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
98
- release_date = Time.now.strftime("%Y-%m-%d %H:%M")
99
- type_map = {
100
- ".zip" => "3000",
101
- ".tgz" => "3110",
102
- ".gz" => "3110",
103
- ".gem" => "1400"
104
- }; type_map.default = "9999"
105
- type = type_map[file_ext]
106
- boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
107
-
108
- query_hash = if first_file then
109
- {
110
- "group_id" => group_id,
111
- "package_id" => package_id,
112
- "release_name" => RELEASE_NAME,
113
- "release_date" => release_date,
114
- "type_id" => type,
115
- "processor_id" => "8000", # Any
116
- "release_notes" => "",
117
- "release_changes" => "",
118
- "preformatted" => "1",
119
- "submit" => "1"
120
- }
121
- else
122
- {
123
- "group_id" => group_id,
124
- "release_id" => release_id,
125
- "package_id" => package_id,
126
- "step2" => "1",
127
- "type_id" => type,
128
- "processor_id" => "8000", # Any
129
- "submit" => "Add This File"
130
- }
131
- end
132
-
133
- query = "?" + query_hash.map do |(name, value)|
134
- [name, URI.encode(value)].join("=")
135
- end.join("&")
136
-
137
- data = [
138
- "--" + boundary,
139
- "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
140
- "Content-Type: application/octet-stream",
141
- "Content-Transfer-Encoding: binary",
142
- "", file_data, ""
143
- ].join("\x0D\x0A")
144
-
145
- release_headers = headers.merge(
146
- "Content-Type" => "multipart/form-data; boundary=#{boundary}"
147
- )
148
-
149
- target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
150
- http.post(target + query, data, release_headers)
151
- end
152
-
153
- if first_file then
154
- release_id = release_response.body[/release_id=(\d+)/, 1]
155
- raise("Couldn't get release id") unless release_id
156
- end
157
-
158
- first_file = false
159
- end
160
- end
161
- end
162
-
163
-
164
-