Annotation of embedaddon/curl/tests/serverhelp.pm, revision 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>