mirror of
https://github.com/moparisthebest/curl
synced 2024-11-15 14:05:03 -05:00
tests: run the RTSP test server on a dynamic port number
To avoid port collisions. Closes #5272
This commit is contained in:
parent
018dd775c8
commit
bae87dc0d9
@ -44,6 +44,7 @@ my $ipvnum = 4; # default IP version of rtsp server
|
|||||||
my $idnum = 1; # default rtsp server instance number
|
my $idnum = 1; # default rtsp server instance number
|
||||||
my $proto = 'rtsp'; # protocol the rtsp server speaks
|
my $proto = 'rtsp'; # protocol the rtsp server speaks
|
||||||
my $pidfile; # rtsp server pid file
|
my $pidfile; # rtsp server pid file
|
||||||
|
my $portfile;
|
||||||
my $logfile; # rtsp server log file
|
my $logfile; # rtsp server log file
|
||||||
my $srcdir;
|
my $srcdir;
|
||||||
|
|
||||||
@ -58,6 +59,12 @@ while(@ARGV) {
|
|||||||
shift @ARGV;
|
shift @ARGV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elsif($ARGV[0] eq '--portfile') {
|
||||||
|
if($ARGV[1]) {
|
||||||
|
$portfile = $ARGV[1];
|
||||||
|
shift @ARGV;
|
||||||
|
}
|
||||||
|
}
|
||||||
elsif($ARGV[0] eq '--logfile') {
|
elsif($ARGV[0] eq '--logfile') {
|
||||||
if($ARGV[1]) {
|
if($ARGV[1]) {
|
||||||
$logfile = $ARGV[1];
|
$logfile = $ARGV[1];
|
||||||
@ -107,7 +114,9 @@ if(!$logfile) {
|
|||||||
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
|
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
$flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
|
$flags .= "--pidfile \"$pidfile\" ".
|
||||||
|
"--portfile \"$portfile\" ".
|
||||||
|
"--logfile \"$logfile\" ";
|
||||||
$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
|
$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
|
||||||
|
|
||||||
exec("server/rtspd".exe_ext('SRV')." $flags");
|
exec("server/rtspd".exe_ext('SRV')." $flags");
|
||||||
|
@ -2025,7 +2025,6 @@ sub runtftpserver {
|
|||||||
#
|
#
|
||||||
sub runrtspserver {
|
sub runrtspserver {
|
||||||
my ($verbose, $ipv6) = @_;
|
my ($verbose, $ipv6) = @_;
|
||||||
my $port = $RTSPPORT;
|
|
||||||
my $ip = $HOSTIP;
|
my $ip = $HOSTIP;
|
||||||
my $proto = 'rtsp';
|
my $proto = 'rtsp';
|
||||||
my $ipvnum = 4;
|
my $ipvnum = 4;
|
||||||
@ -2039,13 +2038,13 @@ sub runrtspserver {
|
|||||||
if($ipv6) {
|
if($ipv6) {
|
||||||
# if IPv6, use a different setup
|
# if IPv6, use a different setup
|
||||||
$ipvnum = 6;
|
$ipvnum = 6;
|
||||||
$port = $RTSP6PORT;
|
|
||||||
$ip = $HOST6IP;
|
$ip = $HOST6IP;
|
||||||
}
|
}
|
||||||
|
|
||||||
$server = servername_id($proto, $ipvnum, $idnum);
|
$server = servername_id($proto, $ipvnum, $idnum);
|
||||||
|
|
||||||
$pidfile = $serverpidfile{$server};
|
$pidfile = $serverpidfile{$server};
|
||||||
|
my $portfile = $serverportfile{$server};
|
||||||
|
|
||||||
# don't retry if the server doesn't work
|
# don't retry if the server doesn't work
|
||||||
if ($doesntrun{$pidfile}) {
|
if ($doesntrun{$pidfile}) {
|
||||||
@ -2063,9 +2062,11 @@ sub runrtspserver {
|
|||||||
$logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
|
$logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
|
||||||
|
|
||||||
$flags .= "--verbose " if($debugprotocol);
|
$flags .= "--verbose " if($debugprotocol);
|
||||||
$flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
|
$flags .= "--pidfile \"$pidfile\" ".
|
||||||
|
"--portfile \"$portfile\" ".
|
||||||
|
"--logfile \"$logfile\" ";
|
||||||
$flags .= "--id $idnum " if($idnum > 1);
|
$flags .= "--id $idnum " if($idnum > 1);
|
||||||
$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
|
$flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
|
||||||
|
|
||||||
my $cmd = "$perl $srcdir/rtspserver.pl $flags";
|
my $cmd = "$perl $srcdir/rtspserver.pl $flags";
|
||||||
my ($rtsppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
|
my ($rtsppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
|
||||||
@ -2079,6 +2080,8 @@ sub runrtspserver {
|
|||||||
return (0,0);
|
return (0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $port = pidfromfile($portfile);
|
||||||
|
|
||||||
# Server is up. Verify that we can speak to it.
|
# Server is up. Verify that we can speak to it.
|
||||||
my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
|
my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
|
||||||
if(!$pid3) {
|
if(!$pid3) {
|
||||||
@ -2092,12 +2095,12 @@ sub runrtspserver {
|
|||||||
$pid2 = $pid3;
|
$pid2 = $pid3;
|
||||||
|
|
||||||
if($verbose) {
|
if($verbose) {
|
||||||
logmsg "RUN: $srvrname server is now running PID $rtsppid\n";
|
logmsg "RUN: $srvrname server PID $rtsppid port $port\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
return ($rtsppid, $pid2);
|
return ($rtsppid, $pid2, $port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3154,14 +3157,10 @@ sub checksystem {
|
|||||||
|
|
||||||
if($verbose) {
|
if($verbose) {
|
||||||
logmsg "* Ports: ";
|
logmsg "* Ports: ";
|
||||||
logmsg sprintf("RTSP/%d ", $RTSPPORT);
|
|
||||||
if($stunnel) {
|
if($stunnel) {
|
||||||
logmsg sprintf("FTPS/%d ", $FTPSPORT);
|
logmsg sprintf("FTPS/%d ", $FTPSPORT);
|
||||||
logmsg sprintf("HTTPS/%d ", $HTTPSPORT);
|
logmsg sprintf("HTTPS/%d ", $HTTPSPORT);
|
||||||
}
|
}
|
||||||
if($http_ipv6) {
|
|
||||||
logmsg sprintf("RTSP-IPv6/%d ", $RTSP6PORT);
|
|
||||||
}
|
|
||||||
logmsg sprintf("\n* SSH/%d ", $SSHPORT);
|
logmsg sprintf("\n* SSH/%d ", $SSHPORT);
|
||||||
if($httptlssrv) {
|
if($httptlssrv) {
|
||||||
logmsg sprintf("HTTPTLS/%d ", $HTTPTLSPORT);
|
logmsg sprintf("HTTPTLS/%d ", $HTTPTLSPORT);
|
||||||
@ -4718,7 +4717,7 @@ sub startservers {
|
|||||||
stopserver('rtsp');
|
stopserver('rtsp');
|
||||||
}
|
}
|
||||||
if(!$run{'rtsp'}) {
|
if(!$run{'rtsp'}) {
|
||||||
($pid, $pid2) = runrtspserver($verbose);
|
($pid, $pid2, $RTSPPORT) = runrtspserver($verbose);
|
||||||
if($pid <= 0) {
|
if($pid <= 0) {
|
||||||
return "failed starting RTSP server";
|
return "failed starting RTSP server";
|
||||||
}
|
}
|
||||||
@ -4732,7 +4731,7 @@ sub startservers {
|
|||||||
stopserver('rtsp-ipv6');
|
stopserver('rtsp-ipv6');
|
||||||
}
|
}
|
||||||
if(!$run{'rtsp-ipv6'}) {
|
if(!$run{'rtsp-ipv6'}) {
|
||||||
($pid, $pid2) = runrtspserver($verbose, "ipv6");
|
($pid, $pid2, $RTSP6PORT) = runrtspserver($verbose, "ipv6");
|
||||||
if($pid <= 0) {
|
if($pid <= 0) {
|
||||||
return "failed starting RTSP-IPv6 server";
|
return "failed starting RTSP-IPv6 server";
|
||||||
}
|
}
|
||||||
@ -5446,8 +5445,6 @@ $minport = $base; # original base port number
|
|||||||
$HTTPSPORT = $base++; # HTTPS (stunnel) server port
|
$HTTPSPORT = $base++; # HTTPS (stunnel) server port
|
||||||
$FTPSPORT = $base++; # FTPS (stunnel) server port
|
$FTPSPORT = $base++; # FTPS (stunnel) server port
|
||||||
$SSHPORT = $base++; # SSH (SCP/SFTP) port
|
$SSHPORT = $base++; # SSH (SCP/SFTP) port
|
||||||
$RTSPPORT = $base++; # RTSP server port
|
|
||||||
$RTSP6PORT = $base++; # RTSP IPv6 server port
|
|
||||||
$HTTPTLSPORT = $base++; # HTTP TLS (non-stunnel) server port
|
$HTTPTLSPORT = $base++; # HTTP TLS (non-stunnel) server port
|
||||||
$HTTPTLS6PORT = $base++; # HTTP TLS (non-stunnel) IPv6 server port
|
$HTTPTLS6PORT = $base++; # HTTP TLS (non-stunnel) IPv6 server port
|
||||||
$HTTP2PORT = $base++; # HTTP/2 port
|
$HTTP2PORT = $base++; # HTTP/2 port
|
||||||
|
@ -1049,6 +1049,7 @@ int main(int argc, char *argv[])
|
|||||||
int flag;
|
int flag;
|
||||||
unsigned short port = DEFAULT_PORT;
|
unsigned short port = DEFAULT_PORT;
|
||||||
const char *pidname = ".rtsp.pid";
|
const char *pidname = ".rtsp.pid";
|
||||||
|
const char *portfile = NULL;
|
||||||
struct httprequest req;
|
struct httprequest req;
|
||||||
int rc;
|
int rc;
|
||||||
int error;
|
int error;
|
||||||
@ -1075,6 +1076,11 @@ int main(int argc, char *argv[])
|
|||||||
if(argc>arg)
|
if(argc>arg)
|
||||||
pidname = argv[arg++];
|
pidname = argv[arg++];
|
||||||
}
|
}
|
||||||
|
else if(!strcmp("--portfile", argv[arg])) {
|
||||||
|
arg++;
|
||||||
|
if(argc>arg)
|
||||||
|
portfile = argv[arg++];
|
||||||
|
}
|
||||||
else if(!strcmp("--logfile", argv[arg])) {
|
else if(!strcmp("--logfile", argv[arg])) {
|
||||||
arg++;
|
arg++;
|
||||||
if(argc>arg)
|
if(argc>arg)
|
||||||
@ -1099,12 +1105,6 @@ int main(int argc, char *argv[])
|
|||||||
if(argc>arg) {
|
if(argc>arg) {
|
||||||
char *endptr;
|
char *endptr;
|
||||||
unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
|
unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
|
||||||
if((endptr != argv[arg] + strlen(argv[arg])) ||
|
|
||||||
(ulnum < 1025UL) || (ulnum > 65535UL)) {
|
|
||||||
fprintf(stderr, "rtspd: invalid --port argument (%s)\n",
|
|
||||||
argv[arg]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
port = curlx_ultous(ulnum);
|
port = curlx_ultous(ulnum);
|
||||||
arg++;
|
arg++;
|
||||||
}
|
}
|
||||||
@ -1121,6 +1121,7 @@ int main(int argc, char *argv[])
|
|||||||
" --version\n"
|
" --version\n"
|
||||||
" --logfile [file]\n"
|
" --logfile [file]\n"
|
||||||
" --pidfile [file]\n"
|
" --pidfile [file]\n"
|
||||||
|
" --portfile [file]\n"
|
||||||
" --ipv4\n"
|
" --ipv4\n"
|
||||||
" --ipv6\n"
|
" --ipv6\n"
|
||||||
" --port [port]\n"
|
" --port [port]\n"
|
||||||
@ -1188,6 +1189,49 @@ int main(int argc, char *argv[])
|
|||||||
goto server_cleanup;
|
goto server_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!port) {
|
||||||
|
/* The system was supposed to choose a port number, figure out which
|
||||||
|
port we actually got and update the listener port value with it. */
|
||||||
|
curl_socklen_t la_size;
|
||||||
|
srvr_sockaddr_union_t localaddr;
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
if(!use_ipv6)
|
||||||
|
#endif
|
||||||
|
la_size = sizeof(localaddr.sa4);
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
else
|
||||||
|
la_size = sizeof(localaddr.sa6);
|
||||||
|
#endif
|
||||||
|
memset(&localaddr.sa, 0, (size_t)la_size);
|
||||||
|
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
|
||||||
|
error = SOCKERRNO;
|
||||||
|
logmsg("getsockname() failed with error: (%d) %s",
|
||||||
|
error, strerror(error));
|
||||||
|
sclose(sock);
|
||||||
|
goto server_cleanup;
|
||||||
|
}
|
||||||
|
switch(localaddr.sa.sa_family) {
|
||||||
|
case AF_INET:
|
||||||
|
port = ntohs(localaddr.sa4.sin_port);
|
||||||
|
break;
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
port = ntohs(localaddr.sa6.sin6_port);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(!port) {
|
||||||
|
/* Real failure, listener port shall not be zero beyond this point. */
|
||||||
|
logmsg("Apparently getsockname() succeeded, with listener port zero.");
|
||||||
|
logmsg("A valid reason for this failure is a binary built without");
|
||||||
|
logmsg("proper network library linkage. This might not be the only");
|
||||||
|
logmsg("reason, but double check it before anything else.");
|
||||||
|
sclose(sock);
|
||||||
|
goto server_cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
logmsg("Running %s version on port %d", ipv_inuse, (int)port);
|
logmsg("Running %s version on port %d", ipv_inuse, (int)port);
|
||||||
|
|
||||||
/* start accepting connections */
|
/* start accepting connections */
|
||||||
@ -1208,6 +1252,12 @@ int main(int argc, char *argv[])
|
|||||||
if(!wrotepidfile)
|
if(!wrotepidfile)
|
||||||
goto server_cleanup;
|
goto server_cleanup;
|
||||||
|
|
||||||
|
if(portfile) {
|
||||||
|
wrotepidfile = write_portfile(portfile, port);
|
||||||
|
if(!wrotepidfile)
|
||||||
|
goto server_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
msgsock = accept(sock, NULL, NULL);
|
msgsock = accept(sock, NULL, NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user