fuzed 0.1.0
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/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
|
+
|