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>