fuzed 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/LICENSE +23 -0
- data/Manifest.txt +32 -0
- data/README.txt +81 -0
- data/Rakefile +36 -0
- data/bin/fuzed +49 -0
- data/bin/fuzed-adapter +291 -0
- data/bin/fuzed-conf +23 -0
- data/elibs/port_wrapper.beam +0 -0
- data/elibs/port_wrapper.erl +55 -0
- data/elibs/rails_connection_pool.beam +0 -0
- data/elibs/rails_connection_pool.erl +147 -0
- data/elibs/rails_forwarder.beam +0 -0
- data/elibs/rails_forwarder.erl +112 -0
- data/elibs/resource_manager.beam +0 -0
- data/elibs/resource_manager.erl +108 -0
- data/elibs/test_rails_handler.beam +0 -0
- data/elibs/test_rails_handler.erl +11 -0
- data/join_cluster.beam +0 -0
- data/join_cluster.erl +26 -0
- data/lib/fuzed.rb +13 -0
- data/rails_responder +3 -0
- data/sample.fuzed.conf +38 -0
- data/start_node +6 -0
- data/start_yaws +5 -0
- data/templates/fuzed.conf +38 -0
- data/testing.conf +177 -0
- data/yaws_includes/erlsom.hrl +28 -0
- data/yaws_includes/soap.hrl +48 -0
- data/yaws_includes/yaws.hrl +271 -0
- data/yaws_includes/yaws_api.hrl +94 -0
- data/yaws_includes/yaws_dav.hrl +11 -0
- metadata +101 -0
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
-module(test_rails_handler).
|
2
|
+
-author('klacke@bluetail.com').
|
3
|
+
-include("../yaws_includes/yaws_api.hrl").
|
4
|
+
-compile(export_all).
|
5
|
+
|
6
|
+
|
7
|
+
out404(A, _GC, SC) ->
|
8
|
+
Resource = rails_connection_pool:get(),
|
9
|
+
Result = rails_forwarder:handle_request(Resource, A,SC, 5000),
|
10
|
+
rails_connection_pool:refund(Resource),
|
11
|
+
Result.
|
data/join_cluster.beam
ADDED
Binary file
|
data/join_cluster.erl
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
-module(join_cluster).
|
2
|
+
-compile(export_all).
|
3
|
+
|
4
|
+
start(Server, Command) ->
|
5
|
+
code:add_patha("./elibs"),
|
6
|
+
erlang:set_cookie(node(), 'AWZVAQXUPGVPKZQLYEUP'),
|
7
|
+
net_adm:ping(Server), sleep_in_HEAVENLY_PEACE(2),
|
8
|
+
start_resource_manager(Command, 4).
|
9
|
+
|
10
|
+
start_resource_manager(Command, N) ->
|
11
|
+
Spawner = fun() ->
|
12
|
+
Responder = port_wrapper:wrap(Command),
|
13
|
+
rails_connection_pool:add({node(), Responder}),
|
14
|
+
Responder
|
15
|
+
end,
|
16
|
+
Slayer = fun(Responder) ->
|
17
|
+
Responder ! shutdown,
|
18
|
+
rails_connection_pool:remove({node(), Responder})
|
19
|
+
end,
|
20
|
+
resource_manager:start(Spawner,Slayer,N).
|
21
|
+
|
22
|
+
sleep_in_HEAVENLY_PEACE(Secs) ->
|
23
|
+
receive
|
24
|
+
after Secs * 1000 ->
|
25
|
+
Secs * 1000
|
26
|
+
end.
|
data/lib/fuzed.rb
ADDED
data/rails_responder
ADDED
data/sample.fuzed.conf
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# conf for yaws
|
2
|
+
|
3
|
+
logdir = /usr/local/var/log/yaws
|
4
|
+
|
5
|
+
ebin_dir = /usr/local/lib/yaws/examples/ebin
|
6
|
+
|
7
|
+
include_dir = /usr/local/lib/yaws/examples/include
|
8
|
+
|
9
|
+
trace = false
|
10
|
+
|
11
|
+
copy_error_log = true
|
12
|
+
|
13
|
+
log_wrap_size = 1000000
|
14
|
+
|
15
|
+
log_resolve_hostname = false
|
16
|
+
|
17
|
+
fail_on_bind_err = true
|
18
|
+
|
19
|
+
auth_log = true
|
20
|
+
|
21
|
+
pick_first_virthost_on_nomatch = true
|
22
|
+
|
23
|
+
use_fdsrv = false
|
24
|
+
|
25
|
+
<server testing>
|
26
|
+
port = 8002
|
27
|
+
listen = 0.0.0.0
|
28
|
+
docroot = /Users/tom/dev/git/fuzed/helloworld/public
|
29
|
+
errormod_404 = test_rails_handler
|
30
|
+
</server>
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
data/start_node
ADDED
data/start_yaws
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# conf for yaws
|
2
|
+
|
3
|
+
logdir = /usr/local/var/log/yaws
|
4
|
+
|
5
|
+
ebin_dir = /usr/local/lib/yaws/examples/ebin
|
6
|
+
|
7
|
+
include_dir = /usr/local/lib/yaws/examples/include
|
8
|
+
|
9
|
+
trace = false
|
10
|
+
|
11
|
+
copy_error_log = true
|
12
|
+
|
13
|
+
log_wrap_size = 1000000
|
14
|
+
|
15
|
+
log_resolve_hostname = false
|
16
|
+
|
17
|
+
fail_on_bind_err = true
|
18
|
+
|
19
|
+
auth_log = true
|
20
|
+
|
21
|
+
pick_first_virthost_on_nomatch = true
|
22
|
+
|
23
|
+
use_fdsrv = false
|
24
|
+
|
25
|
+
<server testing>
|
26
|
+
port = {{ PORT }}
|
27
|
+
listen = 0.0.0.0
|
28
|
+
docroot = {{ RAILS_PUBLIC_DIR }}
|
29
|
+
errormod_404 = test_rails_handler
|
30
|
+
</server>
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
data/testing.conf
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
|
2
|
+
# conf for yaws
|
3
|
+
|
4
|
+
|
5
|
+
# first we have a set of globals
|
6
|
+
# That apply to all virtual servers
|
7
|
+
|
8
|
+
|
9
|
+
# This is the directory where all logfiles for
|
10
|
+
# all virtual servers will be written
|
11
|
+
|
12
|
+
logdir = /usr/local/var/log/yaws
|
13
|
+
|
14
|
+
# This the path to a directory where additional
|
15
|
+
# beam code can be placed. The daemon will add this
|
16
|
+
# directory to its search path
|
17
|
+
|
18
|
+
ebin_dir = /usr/local/lib/yaws/examples/ebin
|
19
|
+
|
20
|
+
|
21
|
+
# This is a directory where application specific .hrl
|
22
|
+
# files can be placed. application specifig .yaws code can
|
23
|
+
# then include these .hrl files
|
24
|
+
|
25
|
+
include_dir = /usr/local/lib/yaws/examples/include
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
# This is a debug variable, possible values are http | traffic | false
|
32
|
+
# It is also possible to set the trace (possibly to the tty) while
|
33
|
+
# invoking yaws from the shell as in
|
34
|
+
# yaws -i -T -x (see man yaws)
|
35
|
+
|
36
|
+
trace = false
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
# it is possible to have yaws start additional
|
43
|
+
# application specific code at startup
|
44
|
+
#
|
45
|
+
# runmod = mymodule
|
46
|
+
|
47
|
+
|
48
|
+
# By default yaws will copy the erlang error_log and
|
49
|
+
# end write it to a wrap log called report.log (in the logdir)
|
50
|
+
# this feature can be turned off. This would typically
|
51
|
+
# be the case when yaws runs within another larger app
|
52
|
+
|
53
|
+
copy_error_log = true
|
54
|
+
|
55
|
+
|
56
|
+
# Logs are wrap logs
|
57
|
+
|
58
|
+
log_wrap_size = 1000000
|
59
|
+
|
60
|
+
|
61
|
+
# Possibly resolve all hostnames in logfiles so webalizer
|
62
|
+
# can produce the nice geography piechart
|
63
|
+
|
64
|
+
log_resolve_hostname = false
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
# fail completely or not if yaws fails
|
69
|
+
# to bind a listen socket
|
70
|
+
fail_on_bind_err = true
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
# If yaws is started as root, it can, once it has opened
|
75
|
+
# all relevant sockets for listening, change the uid to a
|
76
|
+
# user with lower accessrights than root
|
77
|
+
|
78
|
+
# username = nobody
|
79
|
+
|
80
|
+
|
81
|
+
# If HTTP auth is used, it is possible to have a specific
|
82
|
+
# auth log.
|
83
|
+
|
84
|
+
auth_log = true
|
85
|
+
|
86
|
+
|
87
|
+
# When we're running multiple yaws systems on the same
|
88
|
+
# host, we need to give each yaws system an individual
|
89
|
+
# name. Yaws will write a number of runtime files under
|
90
|
+
# /tmp/yaws/${id}
|
91
|
+
# The default value is "default"
|
92
|
+
|
93
|
+
|
94
|
+
# id = myname
|
95
|
+
|
96
|
+
|
97
|
+
# earlier versions of Yaws picked the first virtual host
|
98
|
+
# in a list of hosts with the same IP/PORT when the Host:
|
99
|
+
# header doesn't match any name on any Host
|
100
|
+
# This is often nice in testing environments but not
|
101
|
+
# acceptable in real live hosting scenarios
|
102
|
+
|
103
|
+
pick_first_virthost_on_nomatch = true
|
104
|
+
|
105
|
+
|
106
|
+
# All unices are broken since it's not possible to bind to
|
107
|
+
# a privileged port (< 1024) unless uid==0
|
108
|
+
# There is a contrib in jungerl which makes it possible by means
|
109
|
+
# of an external setuid root programm called fdsrv to listen to
|
110
|
+
# to privileged port.
|
111
|
+
# If we use this feature, it requires fdsrv to be properly installed.
|
112
|
+
# Doesn't yet work with SSL.
|
113
|
+
|
114
|
+
use_fdsrv = false
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
# end then a set of virtual servers
|
120
|
+
# First two virthosted servers on the same IP (0.0.0.0)
|
121
|
+
# in this case, but an explicit IP can be given as well
|
122
|
+
|
123
|
+
#<server sean.desk.hq.powerset.com>
|
124
|
+
# port = 80
|
125
|
+
# listen = 0.0.0.0
|
126
|
+
# docroot = /usr/local/var/yaws/www
|
127
|
+
#</server>
|
128
|
+
|
129
|
+
#<server localhost>
|
130
|
+
# port = 80
|
131
|
+
# listen = 0.0.0.0
|
132
|
+
# docroot = /tmp
|
133
|
+
# dir_listings = true
|
134
|
+
# dav = true
|
135
|
+
# <auth>
|
136
|
+
# realm = foobar
|
137
|
+
# dir = /
|
138
|
+
# user = foo:bar
|
139
|
+
# user = baz:bar
|
140
|
+
# </auth>
|
141
|
+
#</server>
|
142
|
+
|
143
|
+
<server debug>
|
144
|
+
port = 8001
|
145
|
+
listen = 0.0.0.0
|
146
|
+
docroot = /Users/tom/dev/git/fuzed/helloworld/public
|
147
|
+
appmods = <pathelem, myappmod>
|
148
|
+
errormod_404 = myappmod
|
149
|
+
</server>
|
150
|
+
|
151
|
+
<server testing>
|
152
|
+
port = 8002
|
153
|
+
listen = 0.0.0.0
|
154
|
+
docroot = /Users/tom/dev/git/fuzed/helloworld/public
|
155
|
+
errormod_404 = test_rails_handler
|
156
|
+
</server>
|
157
|
+
|
158
|
+
# And then an ssl server
|
159
|
+
#
|
160
|
+
#<server sean.desk.hq.powerset.com>
|
161
|
+
# port = 443
|
162
|
+
# docroot = /tmp
|
163
|
+
# listen = 0.0.0.0
|
164
|
+
# dir_listings = true
|
165
|
+
# <ssl>
|
166
|
+
# keyfile = /usr/local/etc/yaws-key.pem
|
167
|
+
# certfile = /usr/local/etc/yaws-cert.pem
|
168
|
+
# </ssl>
|
169
|
+
#</server>
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
%%% ====================================================================
|
2
|
+
%%% Header file for erlsom
|
3
|
+
%%%
|
4
|
+
%%% Copyright (C) 2006 Willem de Jong
|
5
|
+
%%%
|
6
|
+
%%% This program is free software; you can redistribute it and/or modify
|
7
|
+
%%% it under the terms of the GNU General Public License as published by
|
8
|
+
%%% the Free Software Foundation; either version 2 of the License, or
|
9
|
+
%%% (at your option) any later version.
|
10
|
+
%%%
|
11
|
+
%%% This program is distributed in the hope that it will be useful, but
|
12
|
+
%%% WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
%%% General Public License for more details.
|
15
|
+
%%%
|
16
|
+
%%% You should have received a copy of the GNU General Public License
|
17
|
+
%%% along with this program; if not, write to the Free Software
|
18
|
+
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
19
|
+
%%% USA
|
20
|
+
%%%
|
21
|
+
%%% Author contact: w.a.de.jong@gmail.com
|
22
|
+
%%% ====================================================================
|
23
|
+
|
24
|
+
%%% version: 0.0.2
|
25
|
+
|
26
|
+
%% prefix=the prefix that will be used in the result
|
27
|
+
-record(ns, {uri, prefix}).
|
28
|
+
-record(qname, {uri, localPart, prefix, mappedPrefix}).
|
@@ -0,0 +1,48 @@
|
|
1
|
+
-record(wsdl, {operations, model, module}).
|
2
|
+
-record(port, {service, port, binding, address}).
|
3
|
+
-record(operation, {service, port, operation, binding, address, action}).
|
4
|
+
-record('soap:detail', {anyAttribs, choice}).
|
5
|
+
-record('soap:Fault', {anyAttribs, 'faultcode', 'faultstring', 'faultactor', 'detail'}).
|
6
|
+
-record('soap:Body', {anyAttribs, choice}).
|
7
|
+
-record('soap:Header', {anyAttribs, choice}).
|
8
|
+
-record('soap:Envelope', {anyAttribs, 'Header', 'Body', choice}).
|
9
|
+
-record('wsdl:tExtensibilityElement', {anyAttribs, 'wsdl:required'}).
|
10
|
+
-record('wsdl:tPort', {anyAttribs, 'name', 'binding', 'documentation', choice}).
|
11
|
+
-record('wsdl:tService', {anyAttribs, 'name', 'documentation', choice, 'port'}).
|
12
|
+
-record('wsdl:tBindingOperation', {anyAttribs, 'name', 'documentation', choice, 'input', 'output', 'fault'}).
|
13
|
+
-record('wsdl:tBindingOperationFault', {anyAttribs, 'name', 'documentation', choice}).
|
14
|
+
-record('wsdl:tBindingOperationMessage', {anyAttribs, 'name', 'documentation', choice}).
|
15
|
+
-record('wsdl:tBinding', {anyAttribs, 'name', 'type', 'documentation', choice, 'operation'}).
|
16
|
+
-record('wsdl:tFault', {anyAttribs, 'name', 'message', 'documentation'}).
|
17
|
+
-record('wsdl:tParam', {anyAttribs, 'name', 'message', 'documentation'}).
|
18
|
+
-record('wsdl:solicit-response-or-notification-operation', {anyAttribs, 'output', 'solicit-response-or-notification-operation/SEQ2'}).
|
19
|
+
-record('wsdl:solicit-response-or-notification-operation/SEQ2', {anyAttribs, 'input', 'fault'}).
|
20
|
+
-record('wsdl:request-response-or-one-way-operation', {anyAttribs, 'input', 'request-response-or-one-way-operation/SEQ1'}).
|
21
|
+
-record('wsdl:request-response-or-one-way-operation/SEQ1', {anyAttribs, 'output', 'fault'}).
|
22
|
+
-record('wsdl:tOperation', {anyAttribs, 'name', 'parameterOrder', 'documentation', any, choice}).
|
23
|
+
-record('wsdl:tPortType', {anyAttribs, 'name', 'documentation', 'operation'}).
|
24
|
+
-record('wsdl:tPart', {anyAttribs, 'name', 'element', 'type', 'documentation'}).
|
25
|
+
-record('wsdl:tMessage', {anyAttribs, 'name', 'documentation', choice, 'part'}).
|
26
|
+
-record('wsdl:tTypes', {anyAttribs, 'documentation', choice}).
|
27
|
+
-record('wsdl:tImport', {anyAttribs, 'namespace', 'location', 'documentation'}).
|
28
|
+
-record('wsdl:tDefinitions', {anyAttribs, 'targetNamespace', 'name', 'documentation', any, choice}).
|
29
|
+
-record('wsdl:anyTopLevelOptionalElement-service', {anyAttribs, 'service'}).
|
30
|
+
-record('wsdl:anyTopLevelOptionalElement-binding', {anyAttribs, 'binding'}).
|
31
|
+
-record('wsdl:anyTopLevelOptionalElement-portType', {anyAttribs, 'portType'}).
|
32
|
+
-record('wsdl:anyTopLevelOptionalElement-message', {anyAttribs, 'message'}).
|
33
|
+
-record('wsdl:anyTopLevelOptionalElement-types', {anyAttribs, 'types'}).
|
34
|
+
-record('wsdl:anyTopLevelOptionalElement-import', {anyAttribs, 'import'}).
|
35
|
+
-record('wsdl:anyTopLevelOptionalElement', {anyAttribs, choice}).
|
36
|
+
-record('wsdl:tExtensibleDocumented', {anyAttribs, 'documentation', choice}).
|
37
|
+
-record('wsdl:tExtensibleAttributesDocumented', {anyAttribs, 'documentation'}).
|
38
|
+
-record('wsdl:tDocumented', {anyAttribs, 'documentation'}).
|
39
|
+
-record('wsdl:tDocumentation-any', {anyAttribs, choice}).
|
40
|
+
-record('wsdl:tDocumentation', {anyAttribs, choice}).
|
41
|
+
-record('soap:tBinding', {anyAttribs, 'wsdl:required', 'transport', 'style'}).
|
42
|
+
-record('soap:tOperation', {anyAttribs, 'wsdl:required', 'soapAction', 'style'}).
|
43
|
+
-record('soap:tBody', {anyAttribs, 'wsdl:required', 'parts', 'namespace', 'use', 'encodingStyle'}).
|
44
|
+
-record('soap:tFaultRes', {anyAttribs, 'wsdl:required', 'parts', 'namespace', 'use', 'encodingStyle'}).
|
45
|
+
-record('soap:tFault', {anyAttribs, 'wsdl:required', 'parts', 'namespace', 'use', 'encodingStyle', 'name'}).
|
46
|
+
-record('soap:tHeader', {anyAttribs, 'wsdl:required', 'namespace', 'encodingStyle', 'use', 'part', 'message', 'headerfault'}).
|
47
|
+
-record('soap:tHeaderFault', {anyAttribs, 'namespace', 'encodingStyle', 'use', 'part', 'message'}).
|
48
|
+
-record('soap:tAddress', {anyAttribs, 'wsdl:required', 'location'}).
|
@@ -0,0 +1,271 @@
|
|
1
|
+
%%%----------------------------------------------------------------------
|
2
|
+
%%% File : yaws.hrl
|
3
|
+
%%% Author : Claes Wikstrom <klacke@hyber.org>
|
4
|
+
%%% Purpose :
|
5
|
+
%%% Created : 16 Jan 2002 by Claes Wikstrom <klacke@hyber.org>
|
6
|
+
%%%----------------------------------------------------------------------
|
7
|
+
|
8
|
+
-author('klacke@hyber.org').
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
%% flags for gconfs
|
13
|
+
-define(GC_TTY_TRACE, 1).
|
14
|
+
-define(GC_DEBUG, 2).
|
15
|
+
-define(GC_AUTH_LOG, 4).
|
16
|
+
-define(GC_COPY_ERRLOG, 8).
|
17
|
+
-define(GC_BACKWARDS_COMPAT_PARSE, 16).
|
18
|
+
-define(GC_LOG_RESOLVE_HOSTNAME, 32).
|
19
|
+
-define(GC_FAIL_ON_BIND_ERR, 64).
|
20
|
+
-define(GC_PICK_FIRST_VIRTHOST_ON_NOMATCH, 128).
|
21
|
+
-define(GC_USE_FDSRV, 256).
|
22
|
+
-define(GC_USE_LARGE_SSL_POOL, 512).
|
23
|
+
|
24
|
+
-define(GC_DEF, (?GC_AUTH_LOG bor ?GC_FAIL_ON_BIND_ERR)).
|
25
|
+
|
26
|
+
-define(gc_has_tty_trace(GC),
|
27
|
+
((GC#gconf.flags band ?GC_TTY_TRACE) /= 0)).
|
28
|
+
-define(gc_has_debug(GC),
|
29
|
+
((GC#gconf.flags band ?GC_DEBUG) /= 0)).
|
30
|
+
-define(gc_has_auth_log(GC),
|
31
|
+
((GC#gconf.flags band ?GC_AUTH_LOG) /= 0)).
|
32
|
+
-define(gc_has_copy_errlog(GC),
|
33
|
+
((GC#gconf.flags band ?GC_COPY_ERRLOG) /= 0)).
|
34
|
+
-define(gc_has_backwards_compat_parse(GC),
|
35
|
+
((GC#gconf.flags band ?GC_BACKWARDS_COMPAT_PARSE) /= 0)).
|
36
|
+
-define(gc_log_has_resolve_hostname(GC),
|
37
|
+
((GC#gconf.flags band ?GC_LOG_RESOLVE_HOSTNAME) /= 0)).
|
38
|
+
-define(gc_fail_on_bind_err(GC),
|
39
|
+
((GC#gconf.flags band ?GC_FAIL_ON_BIND_ERR) /= 0)).
|
40
|
+
-define(gc_pick_first_virthost_on_nomatch(GC),
|
41
|
+
((GC#gconf.flags band ?GC_PICK_FIRST_VIRTHOST_ON_NOMATCH) /= 0)).
|
42
|
+
-define(gc_use_fdsrv(GC),
|
43
|
+
((GC#gconf.flags band ?GC_USE_FDSRV) /= 0)).
|
44
|
+
-define(gc_use_large_ssl_pool(GC),
|
45
|
+
((GC#gconf.flags band ?GC_USE_LARGE_SSL_POOL) /= 0)).
|
46
|
+
|
47
|
+
-define(gc_set_tty_trace(GC, Bool),
|
48
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,?GC_TTY_TRACE, Bool)}).
|
49
|
+
-define(gc_set_debug(GC, Bool),
|
50
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags, ?GC_DEBUG, Bool)}).
|
51
|
+
-define(gc_set_auth_log(GC, Bool),
|
52
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags, ?GC_AUTH_LOG, Bool)}).
|
53
|
+
-define(gc_set_copy_errlog(GC, Bool),
|
54
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags, ?GC_COPY_ERRLOG, Bool)}).
|
55
|
+
-define(gc_set_backwards_compat_parse(GC, Bool),
|
56
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,
|
57
|
+
?GC_BACKWARDS_COMPAT_PARSE, Bool)}).
|
58
|
+
-define(gc_log_set_resolve_hostname(GC, Bool),
|
59
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,
|
60
|
+
?GC_LOG_RESOLVE_HOSTNAME, Bool)}).
|
61
|
+
-define(gc_set_fail_on_bind_err(GC, Bool),
|
62
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,?GC_FAIL_ON_BIND_ERR,Bool)}).
|
63
|
+
-define(gc_set_pick_first_virthost_on_nomatch(GC, Bool),
|
64
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,
|
65
|
+
?GC_PICK_FIRST_VIRTHOST_ON_NOMATCH,Bool)}).
|
66
|
+
-define(gc_set_use_fdsrv(GC, Bool),
|
67
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,?GC_USE_FDSRV,Bool)}).
|
68
|
+
|
69
|
+
-define(gc_set_use_large_ssl_pool(GC, Bool),
|
70
|
+
GC#gconf{flags = yaws:flag(GC#gconf.flags,?GC_USE_LARGE_SSL_POOL,Bool)}).
|
71
|
+
|
72
|
+
%% global conf
|
73
|
+
-record(gconf,{yaws_dir, %% topdir of Yaws installation
|
74
|
+
trace, %% false | {true,http}|{true,traffic}
|
75
|
+
flags = ?GC_DEF, %% boolean flags
|
76
|
+
logdir,
|
77
|
+
ebin_dir = [],
|
78
|
+
runmods = [], %% runmods for entire server
|
79
|
+
keepalive_timeout = 15000,
|
80
|
+
max_num_cached_files = 400,
|
81
|
+
max_num_cached_bytes = 1000000, %% 1 MEG
|
82
|
+
max_size_cached_file = 8000,
|
83
|
+
large_file_chunk_size = 10240,
|
84
|
+
log_wrap_size = 10000000, % wrap logs after 10M
|
85
|
+
cache_refresh_secs = 30, % seconds (auto zero when debug)
|
86
|
+
include_dir = [], %% list of inc dirs for .yaws files
|
87
|
+
phpexe = "php-cgi", %% cgi capable php executable
|
88
|
+
yaws, %% server string
|
89
|
+
%username, %% maybe run as a different user than root
|
90
|
+
%uid, %% unix uid of user that started yaws
|
91
|
+
id = "default", %% string identifying this instance of yaws
|
92
|
+
tmpdir,
|
93
|
+
enable_soap = false %% start yaws_soap_srv iff true
|
94
|
+
}).
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
-record(ssl,
|
99
|
+
{
|
100
|
+
keyfile,
|
101
|
+
certfile,
|
102
|
+
verify = 0,
|
103
|
+
depth = 1,
|
104
|
+
password,
|
105
|
+
cacertfile,
|
106
|
+
ciphers,
|
107
|
+
cachetimeout}).
|
108
|
+
|
109
|
+
|
110
|
+
%% flags for sconfs
|
111
|
+
-define(SC_ACCESS_LOG, 1).
|
112
|
+
-define(SC_ADD_PORT, 2).
|
113
|
+
-define(SC_TILDE_EXPAND, 8).
|
114
|
+
-define(SC_DIR_LISTINGS, 16).
|
115
|
+
-define(SC_DEFLATE, 32).
|
116
|
+
-define(SC_DIR_ALL_ZIP, 64).
|
117
|
+
-define(SC_DAV, 128).
|
118
|
+
|
119
|
+
-define(SC_DEF, ?SC_ACCESS_LOG bor ?SC_ADD_PORT).
|
120
|
+
|
121
|
+
-define(sc_has_access_log(SC),
|
122
|
+
(((SC)#sconf.flags band ?SC_ACCESS_LOG) /= 0)).
|
123
|
+
-define(sc_has_add_port(SC),
|
124
|
+
(((SC)#sconf.flags band ?SC_ADD_PORT) /= 0)).
|
125
|
+
-define(sc_has_tilde_expand(SC),
|
126
|
+
(((SC)#sconf.flags band ?SC_TILDE_EXPAND) /= 0)).
|
127
|
+
-define(sc_has_dir_listings(SC),
|
128
|
+
(((SC)#sconf.flags band ?SC_DIR_LISTINGS) /= 0)).
|
129
|
+
-define(sc_has_deflate(SC),
|
130
|
+
(((SC)#sconf.flags band ?SC_DEFLATE) /= 0)).
|
131
|
+
-define(sc_has_dir_all_zip(SC),
|
132
|
+
(((SC)#sconf.flags band ?SC_DIR_ALL_ZIP) /= 0)).
|
133
|
+
-define(sc_has_dav(SC),
|
134
|
+
(((SC)#sconf.flags band ?SC_DAV) /= 0)).
|
135
|
+
|
136
|
+
|
137
|
+
-define(sc_set_access_log(SC, Bool),
|
138
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_ACCESS_LOG, Bool)}).
|
139
|
+
-define(sc_set_add_port(SC, Bool),
|
140
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_ADD_PORT, Bool)}).
|
141
|
+
-define(sc_set_ssl(SC, Bool),
|
142
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags , ?SC_SSL, Bool)}).
|
143
|
+
-define(sc_set_tilde_expand(SC, Bool),
|
144
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_TILDE_EXPAND, Bool)}).
|
145
|
+
-define(sc_set_dir_listings(SC, Bool),
|
146
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_DIR_LISTINGS, Bool)}).
|
147
|
+
-define(sc_set_deflate(SC, Bool),
|
148
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_DEFLATE, Bool)}).
|
149
|
+
-define(sc_set_dir_all_zip(SC, Bool),
|
150
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_DIR_ALL_ZIP, Bool)}).
|
151
|
+
-define(sc_set_dav(SC, Bool),
|
152
|
+
SC#sconf{flags = yaws:flag(SC#sconf.flags, ?SC_DAV, Bool)}).
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
%% server conf
|
157
|
+
-record(sconf,
|
158
|
+
{port = 8000, %% which port is this server listening to
|
159
|
+
flags = ?SC_DEF,
|
160
|
+
redirect_map=[], %% redirect all requests to HostPort
|
161
|
+
rhost, %% forced redirect host (+ optional port)
|
162
|
+
rmethod, %% forced redirect method
|
163
|
+
docroot, %% path to the docs
|
164
|
+
xtra_docroots = [], %% if we have additional pseudo docroots
|
165
|
+
listen = {127,0,0,1}, %% bind to this IP, {0,0,0,0} is possible
|
166
|
+
servername = "localhost", %% servername is what Host: header is
|
167
|
+
ets, %% local store for this server
|
168
|
+
ssl,
|
169
|
+
authdirs = [],
|
170
|
+
partial_post_size = nolimit,
|
171
|
+
appmods = [], %% list of modules for this app
|
172
|
+
errormod_404 = yaws_404, %% the default 404 error module
|
173
|
+
errormod_crash = yaws_404, %% use the same module for crashes
|
174
|
+
arg_rewrite_mod = yaws,
|
175
|
+
opaque = [], %% useful in embedded mode
|
176
|
+
start_mod, %% user provided module to be started
|
177
|
+
allowed_scripts = [yaws],
|
178
|
+
revproxy = []
|
179
|
+
}).
|
180
|
+
|
181
|
+
%% we cannot compare sconfs directly due to the ets
|
182
|
+
%% field in #sconf{} use yaws_config:eq_sconfs/2
|
183
|
+
|
184
|
+
|
185
|
+
% Auth conf - from server conf and .yaws_auth
|
186
|
+
-record(auth,
|
187
|
+
{dir = [],
|
188
|
+
realm = "",
|
189
|
+
type = "Basic",
|
190
|
+
users = [],
|
191
|
+
mod = [], %% authentication module callback
|
192
|
+
pam = false %% should we use pam to auth a user
|
193
|
+
}).
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
%% this internal record is used and returned by the URL path parser
|
198
|
+
|
199
|
+
-record(urltype, {type, %% error | yaws | regular | directory |
|
200
|
+
%% forbidden | appmod
|
201
|
+
finfo,
|
202
|
+
path = [],
|
203
|
+
fullpath = [], %% deep list
|
204
|
+
dir = [], %% relative dir where the path leads to
|
205
|
+
%% flat | unflat need flat for authentication
|
206
|
+
data, %% Binary | FileDescriptor | DirListing | undefined
|
207
|
+
deflate, %% undefined | Binary | dynamic
|
208
|
+
mime = "text/html", %% MIME type
|
209
|
+
getpath, %% as GET'ed by client
|
210
|
+
pathinfo
|
211
|
+
}).
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
%% this record is constructed as we build up
|
217
|
+
%% the outgoing headers
|
218
|
+
|
219
|
+
-record(outh, {
|
220
|
+
status, %% int status code
|
221
|
+
|
222
|
+
doclose, %% bool
|
223
|
+
chunked, %% bool
|
224
|
+
encoding=identity,
|
225
|
+
%% identity, deflate
|
226
|
+
contlen, %% integer
|
227
|
+
act_contlen, %% actual content length for dynamic pages
|
228
|
+
|
229
|
+
|
230
|
+
%% and the total set of out headers we can have
|
231
|
+
%% as actual strings
|
232
|
+
connection,
|
233
|
+
server,
|
234
|
+
location,
|
235
|
+
cache_control,
|
236
|
+
date,
|
237
|
+
allow,
|
238
|
+
last_modified,
|
239
|
+
etag,
|
240
|
+
set_cookie,
|
241
|
+
content_range,
|
242
|
+
content_length,
|
243
|
+
content_type,
|
244
|
+
content_encoding,
|
245
|
+
transfer_encoding,
|
246
|
+
www_authenticate,
|
247
|
+
other %% misc other headers
|
248
|
+
}).
|
249
|
+
|
250
|
+
|
251
|
+
|
252
|
+
-define(READ_TIMEOUT, 30000).
|
253
|
+
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
-record(appmodspec, {
|
258
|
+
type, %% atom, pair or absolute
|
259
|
+
data}).
|
260
|
+
|
261
|
+
|
262
|
+
%% as read by application:get_env()
|
263
|
+
-record(env, {debug,
|
264
|
+
trace,
|
265
|
+
traceoutput,
|
266
|
+
conf,
|
267
|
+
runmod,
|
268
|
+
embedded,
|
269
|
+
id
|
270
|
+
}).
|
271
|
+
|