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 +4 -0
- data/README +1 -1
- data/ext/fcgi/MANIFEST +3 -0
- data/ext/{extconf.rb → fcgi/extconf.rb} +0 -2
- data/ext/{fcgi.c → fcgi/fcgi.c} +17 -8
- data/{fcgi.rb → lib/fcgi.rb} +13 -1
- metadata +33 -25
- data/Rakefile +0 -164
data/ChangeLog
CHANGED
data/README
CHANGED
data/ext/fcgi/MANIFEST
ADDED
data/ext/{fcgi.c → fcgi/fcgi.c}
RENAMED
@@ -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
|
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
|
75
|
-
VALUE
|
76
|
-
char
|
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 (
|
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",
|
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);
|
data/{fcgi.rb → lib/fcgi.rb}
RENAMED
@@ -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.
|
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.
|
7
|
-
date:
|
8
|
-
summary: FastCGI
|
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:
|
12
|
-
homepage:
|
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:
|
18
|
+
has_rdoc: false
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
-
|
39
|
-
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
40
45
|
executables: []
|
46
|
+
|
41
47
|
extensions:
|
42
|
-
|
48
|
+
- ext/fcgi/extconf.rb
|
43
49
|
requirements: []
|
44
|
-
|
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
|
-
|