Annotation of embedaddon/curl/tests/serverhelp.pm, revision 1.1.1.1
1.1 misho 1: #***************************************************************************
2: # _ _ ____ _
3: # Project ___| | | | _ \| |
4: # / __| | | | |_) | |
5: # | (__| |_| | _ <| |___
6: # \___|\___/|_| \_\_____|
7: #
8: # Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
9: #
10: # This software is licensed as described in the file COPYING, which
11: # you should have received as part of this distribution. The terms
12: # are also available at https://curl.haxx.se/docs/copyright.html.
13: #
14: # You may opt to use, copy, modify, merge, publish, distribute and/or sell
15: # copies of the Software, and permit persons to whom the Software is
16: # furnished to do so, under the terms of the COPYING file.
17: #
18: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19: # KIND, either express or implied.
20: #
21: #***************************************************************************
22:
23: package serverhelp;
24:
25: use strict;
26: use warnings;
27: use Exporter;
28:
29:
30: #***************************************************************************
31: # Global symbols allowed without explicit package name
32: #
33: use vars qw(
34: @ISA
35: @EXPORT_OK
36: );
37:
38:
39: #***************************************************************************
40: # Inherit Exporter's capabilities
41: #
42: @ISA = qw(Exporter);
43:
44:
45: #***************************************************************************
46: # Global symbols this module will export upon request
47: #
48: @EXPORT_OK = qw(
49: serverfactors
50: servername_id
51: servername_str
52: servername_canon
53: server_pidfilename
54: server_portfilename
55: server_logfilename
56: server_cmdfilename
57: server_inputfilename
58: server_outputfilename
59: mainsockf_pidfilename
60: mainsockf_logfilename
61: datasockf_pidfilename
62: datasockf_logfilename
63: );
64:
65:
66: #***************************************************************************
67: # Just for convenience, test harness uses 'https' and 'httptls' literals as
68: # values for 'proto' variable in order to differentiate different servers.
69: # 'https' literal is used for stunnel based https test servers, and 'httptls'
70: # is used for non-stunnel https test servers.
71:
72:
73: #***************************************************************************
74: # Return server characterization factors given a server id string.
75: #
76: sub serverfactors {
77: my $server = $_[0];
78: my $proto;
79: my $ipvnum;
80: my $idnum;
81:
82: if($server =~
83: /^((ftp|http|imap|pop3|smtp|http-pipe)s?)(\d*)(-ipv6|)$/) {
84: $proto = $1;
85: $idnum = ($3 && ($3 > 1)) ? $3 : 1;
86: $ipvnum = ($4 && ($4 =~ /6$/)) ? 6 : 4;
87: }
88: elsif($server =~
89: /^(tftp|sftp|socks|ssh|rtsp|gopher|httptls)(\d*)(-ipv6|)$/) {
90: $proto = $1;
91: $idnum = ($2 && ($2 > 1)) ? $2 : 1;
92: $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
93: }
94: else {
95: die "invalid server id: '$server'"
96: }
97: return($proto, $ipvnum, $idnum);
98: }
99:
100:
101: #***************************************************************************
102: # Return server name string formatted for presentation purposes
103: #
104: sub servername_str {
105: my ($proto, $ipver, $idnum) = @_;
106:
107: $proto = uc($proto) if($proto);
108: die "unsupported protocol: '$proto'" unless($proto &&
109: ($proto =~ /^(((FTP|HTTP|HTTP\/2|IMAP|POP3|SMTP|HTTP-PIPE)S?)|(TFTP|SFTP|SOCKS|SSH|RTSP|GOPHER|HTTPTLS|DICT|SMB|SMBS|TELNET|MQTT))$/));
110:
111: $ipver = (not $ipver) ? 'ipv4' : lc($ipver);
112: die "unsupported IP version: '$ipver'" unless($ipver &&
113: ($ipver =~ /^(4|6|ipv4|ipv6|-ipv4|-ipv6|unix)$/));
114: $ipver = ($ipver =~ /6$/) ? '-IPv6' : (($ipver =~ /unix$/) ? '-unix' : '');
115:
116: $idnum = 1 if(not $idnum);
117: die "unsupported ID number: '$idnum'" unless($idnum &&
118: ($idnum =~ /^(\d+)$/));
119: $idnum = '' unless($idnum > 1);
120:
121: return "${proto}${idnum}${ipver}";
122: }
123:
124:
125: #***************************************************************************
126: # Return server name string formatted for identification purposes
127: #
128: sub servername_id {
129: my ($proto, $ipver, $idnum) = @_;
130: return lc(servername_str($proto, $ipver, $idnum));
131: }
132:
133:
134: #***************************************************************************
135: # Return server name string formatted for file name purposes
136: #
137: sub servername_canon {
138: my ($proto, $ipver, $idnum) = @_;
139: my $string = lc(servername_str($proto, $ipver, $idnum));
140: $string =~ tr/-/_/;
141: $string =~ s/\//_v/;
142: return $string;
143: }
144:
145:
146: #***************************************************************************
147: # Return file name for server pid file.
148: #
149: sub server_pidfilename {
150: my ($proto, $ipver, $idnum) = @_;
151: my $trailer = '_server.pid';
152: return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
153: }
154:
155: #***************************************************************************
156: # Return file name for server port file.
157: #
158: sub server_portfilename {
159: my ($proto, $ipver, $idnum) = @_;
160: my $trailer = '_server.port';
161: return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
162: }
163:
164:
165: #***************************************************************************
166: # Return file name for server log file.
167: #
168: sub server_logfilename {
169: my ($logdir, $proto, $ipver, $idnum) = @_;
170: my $trailer = '_server.log';
171: $trailer = '_stunnel.log' if(lc($proto) =~ /^(ftp|http|imap|pop3|smtp)s$/);
172: return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
173: }
174:
175:
176: #***************************************************************************
177: # Return file name for server commands file.
178: #
179: sub server_cmdfilename {
180: my ($logdir, $proto, $ipver, $idnum) = @_;
181: my $trailer = '_server.cmd';
182: return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
183: }
184:
185:
186: #***************************************************************************
187: # Return file name for server input file.
188: #
189: sub server_inputfilename {
190: my ($logdir, $proto, $ipver, $idnum) = @_;
191: my $trailer = '_server.input';
192: return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
193: }
194:
195:
196: #***************************************************************************
197: # Return file name for server output file.
198: #
199: sub server_outputfilename {
200: my ($logdir, $proto, $ipver, $idnum) = @_;
201: my $trailer = '_server.output';
202: return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
203: }
204:
205:
206: #***************************************************************************
207: # Return file name for main or primary sockfilter pid file.
208: #
209: sub mainsockf_pidfilename {
210: my ($proto, $ipver, $idnum) = @_;
211: die "unsupported protocol: '$proto'" unless($proto &&
212: (lc($proto) =~ /^(ftp|imap|pop3|smtp)s?$/));
213: my $trailer = (lc($proto) =~ /^ftps?$/) ? '_sockctrl.pid':'_sockfilt.pid';
214: return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
215: }
216:
217:
218: #***************************************************************************
219: # Return file name for main or primary sockfilter log file.
220: #
221: sub mainsockf_logfilename {
222: my ($logdir, $proto, $ipver, $idnum) = @_;
223: die "unsupported protocol: '$proto'" unless($proto &&
224: (lc($proto) =~ /^(ftp|imap|pop3|smtp)s?$/));
225: my $trailer = (lc($proto) =~ /^ftps?$/) ? '_sockctrl.log':'_sockfilt.log';
226: return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
227: }
228:
229:
230: #***************************************************************************
231: # Return file name for data or secondary sockfilter pid file.
232: #
233: sub datasockf_pidfilename {
234: my ($proto, $ipver, $idnum) = @_;
235: die "unsupported protocol: '$proto'" unless($proto &&
236: (lc($proto) =~ /^ftps?$/));
237: my $trailer = '_sockdata.pid';
238: return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
239: }
240:
241:
242: #***************************************************************************
243: # Return file name for data or secondary sockfilter log file.
244: #
245: sub datasockf_logfilename {
246: my ($logdir, $proto, $ipver, $idnum) = @_;
247: die "unsupported protocol: '$proto'" unless($proto &&
248: (lc($proto) =~ /^ftps?$/));
249: my $trailer = '_sockdata.log';
250: return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
251: }
252:
253:
254: #***************************************************************************
255: # End of library
256: 1;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>