fcgi 0.8.6.1 → 0.8.7

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