
智能语音电销机器人开源代码\freeswitch\bin
智能语音电销机器人开源代码\freeswitch\bin
·
#!/usr/bin/perl
#
# FreeSWITCH fsxs
#
# (C) 2006-2008 Stefan Knoblich <stkn@netdomination.org>
use strict;
#
# @FOO@ will be replaced by the freeswitch build process
#
my %vars = (
CC => 'gcc',
LD => 'gcc',
MKDIR => '/usr/bin/mkdir -p',
INSTALL => '/usr/bin/install -c',
LIBS => '',
CFLAGS => '-g -O2 -g -O2 -pthread -D_REENTRANT -D_GNU_SOURCE',
INCLUDES => '-I/usr/local/freeswitch/include',
LDFLAGS => '-L/usr/local/freeswitch/lib',
SOLINK => '-shared -Xlinker -x',
MODULESDIR => '/usr/local/freeswitch/mod',
LIBDIR => '/usr/local/freeswitch/lib',
BINDIR => '/usr/local/freeswitch/bin',
INCLUDEDIR => '/usr/local/freeswitch/include/freeswitch',
DBDIR => '/usr/local/freeswitch/db',
CONFDIR => '/usr/local/freeswitch/conf',
PREFIX => '/usr/local/freeswitch'
);
#
# Misc variables
#
my @files = ();
my $command;
my $target;
my $needs_target = 1;
my $debug = 0;
#
# functions
#
sub do_exec {
my $retval = system( "@_ >/dev/null" );
if( $retval ) {
exit $retval;
}
}
sub fsxs_usage {
print "FreeSWITCH fsxs\n(C) 2006-2008 Stefan Knoblich <stkn\@netdomination.org>\n";
print "\n";
print "Usage:\n";
print "\t$0 compile [options] <file1 ...>\n";
print "\t$0 link [options] <target> <file1 ...>\n";
print "\t$0 build [options] <target> <file1 ...>\n";
print "\t$0 install [options] <file1 ...>\n\n";
print "\t$0 show <var1 ...varN>\n";
print "\t$0 <--var1 ...--varN>\n\n";
print "Command description:\n";
print "\tcompile: Compile source file(s) into object file(s)\n";
print "\tlink: Create module from object file(s)\n";
print "\tbuild: Build module from source file(s) (compile + link)\n";
print "\tinstall: Install module(s) into FreeSWITCH module directory\n";
print "\tshow: Show defined variable(s)\n";
print "\n";
print "Options:\n";
print "\t--add-cflags Append custom cflags [compile, build]\n";
print "\t--set-cflags Override cflags [compile, build]\n";
print "\n";
print "\t--add-ldflags Append custom ldflags [link, build]\n";
print "\t--set-ldflags Override ldflags [link, build]\n";
print "\t--add-libs Append additional libs [link, build]\n";
print "\t--set-libs Override libs [link, build]\n";
print "\n";
print "\t--destdir Installation prefix [install]\n";
print "\n";
print "Variable names for \"fsxs show\" / \"fsxs --var\":\n";
print "\tcflags ldflags libs solink includes cc ld mkdir install\n";
print "\tprefix libdir modulesdir dbdir includedir confdir bindir\n";
print "\n";
print "Examples:\n";
print "\t$0 compile --add-cflags=\"-DFOO=1 -DBAR\" mod_test.c mod_test2.c\n\n";
print "\t$0 link --add-ldflags=\"-ltest\" mod_test.so mod_test.o mod_test2.o\n\n";
print "\t$0 build --add-cflags=\"-DFOO\" --add-ldflags=\"-ltest\" mod_test.so mod_test.c mod_test2.c\n\n";
exit 1;
}
sub fsxs_compile {
my $cc_cmd;
$cc_cmd = "$vars{CC}";
if( defined( $vars{INCLUDES} ) && $vars{INCLUDES} ) {
$cc_cmd = $cc_cmd . " $vars{INCLUDES}"
}
$cc_cmd = $cc_cmd . " $vars{CFLAGS} -c -o";
foreach( @_ ) {
chomp( $_ );
# replace file extension
my $outfile = $_;
$outfile =~ s/\.(cpp|cc|c)$/.o/;
print "CC\t$_\n";
if( $debug ) {
print "$cc_cmd $outfile $_\n"
}
do_exec( "$cc_cmd $outfile $_" );
}
}
sub fsxs_link {
my $target = shift;
my @objs = @_;
my $ld_cmd;
$ld_cmd = "$vars{LD}";
$ld_cmd = $ld_cmd . " $vars{LDFLAGS} $vars{SOLINK} -o";
print "LD\t$target\t[@objs]\n";
if( $debug ) {
print "$ld_cmd $target @objs $vars{LIBS}\n"
}
do_exec( "$ld_cmd $target @objs $vars{LIBS}" );
}
sub fsxs_install {
my @files = @_;
my $destination = $vars{DESTDIR} . $vars{MODULESDIR};
# check if destination exists, create if it doesn't
if( ! -e $destination ) {
if( $debug ) {
print "$vars{MKDIR} $destination\n";
}
do_exec( "$vars{MKDIR} $destination" );
}
if( $debug ) {
print "$vars{INSTALL} -m644 @files $destination\n";
}
do_exec( "$vars{INSTALL} -m644 @files $destination" );
}
sub fsxs_show {
my @varlist = @_;
if( $#varlist < 0 ) {
# none requested, show all variables with names
my $key;
foreach $key ( keys %vars ) {
print "$key: $vars{$key}\n";
}
}
elsif( $#varlist > 0 ) {
# more than one requested, show with name
foreach( @varlist ) {
if( defined $vars{$_} ) {
print "$_: $vars{$_}\n";
}
}
} else {
# show only one variable, without name
if( defined $vars{$varlist[0]} ) {
print "$vars{$varlist[0]}\n";
}
}
}
sub fsxs_showq {
my @varlist = @_;
my $count = 0;
if( $#varlist >= 0 ) {
foreach( @varlist ) {
if( defined $vars{$_} ) {
print "$vars{$_}" . (($count < $#varlist) ? " " : "");
}
$count++;
}
}
}
#
# main part
#
if( $#ARGV < 0 ) {
fsxs_usage;
}
if( @ARGV[0] =~ /^\--.+$/ ) {
# 'show' shortcut for using fsxs in scripts
$needs_target = 0;
$command = "showq";
}
else {
chomp( $command = shift @ARGV );
if( $command =~ /^install|build|link|compile|show$/ ) {
# add -lfreeswitch to the front of the library list
# we don't want it to be in the show / showq output
# but we still want to be able to override it with --set-libs
if( $command ne "show" ) {
$vars{LIBS} = "-lfreeswitch $vars{LIBS}";
}
if( $command =~ /^show|compile|install$/ ) {
$needs_target = 0;
}
}
else {
print STDERR "Unknown command: $command\n";
fsxs_usage;
}
}
# parse environment variables
if( defined $ENV{DEBUG} && $ENV{DEBUG} ) {
$debug = 1;
}
# parse arguments
foreach(@ARGV) {
chomp( $_ );
if( $command ne "show" && $command ne "showq" )
{
if( /^\--add-cflags=(.*)$/ ) {
$vars{CFLAGS} = "$vars{CFLAGS} $1";
}
elsif( /^\--set-cflags=(.*)$/ ) {
$vars{CFLAGS} = "$1";
}
elsif( /^\--add-ldflags=(.*)$/ ) {
$vars{LDFLAGS} = "$vars{LDFLAGS} $1";
}
elsif( /^\--set-ldflags=(.*)$/ ) {
$vars{LDFLAGS} = "$1";
}
elsif( /^\--add-libs=(.*)$/ ) {
$vars{LIBS} = "$vars{LIBS} $1";
}
elsif( /^\--set-libs=(.*)$/ ) {
$vars{LIBS} = "$1";
}
elsif( /^\--destdir=(.*)$/ ) {
$vars{DESTDIR} = "$1";
}
elsif( /^\--debug$/ ) {
$debug = 1;
}
elsif( /^(DESTDIR|CFLAGS|CC|LDFLAGS|LD|LIBS)=(.*)$/ ) {
if( $debug ) {
print "Overriding $1 (new value: $2)\n";
}
$vars{$1} = "$2";
}
elsif( /^([^\-]+.*)$/ ) {
if( $needs_target ) {
$target = "$1";
$needs_target = 0;
} else {
push(@files, "$1");
}
}
} else {
# show command has different parameter handling
if( /^\--(.*)$/ ) {
push( @files, uc "$1" );
}
elsif( /^([^\-]+.*)$/ ) {
push( @files, uc "$1" );
}
}
}
#
# execute commands
#
if( $command eq 'link' ) {
fsxs_link( $target, @files );
}
elsif( $command eq 'compile' ) {
fsxs_compile( @files );
}
elsif( $command eq 'build' ) {
my @objs = ();
fsxs_compile( @files );
foreach( @files ) {
chomp( $_ );
$_ =~ s/\.(cpp|cc|c)$/.o/;
push( @objs, "$_" );
}
fsxs_link( $target, @objs );
}
elsif( $command eq 'show' ) {
fsxs_show( @files );
}
elsif( $command eq 'showq' ) {
fsxs_showq( @files );
}
elsif( $command eq 'install' ) {
fsxs_install( @files );
}
else {
fsxs_usage;
}
exit 0;
#!/bin/sh
CONFDIR=/usr/local/freeswitch/certs
DAYS=2190
KEY_SIZE=2048
export KEY_SIZE=${KEY_SIZE}
TMPFILE="/tmp/fs-ca-$$-$(date +%Y%m%d%H%M%S)"
COMMON_NAME="FreeSWITCH CA"
ALT_NAME="DNS:test.freeswitch.org"
ORG_NAME="FreeSWITCH"
OUTFILE="agent.pem"
umask 037
check_ca() {
for x in cacert.pem cakey.pem config.tpl; do
if [ ! -e "${CONFDIR}/CA/${x}" ]; then
return 1
fi
done
return 0
}
setup_ca() {
if check_ca; then
echo "Existing CA found in \"${CONFDIR}/CA\""
echo "(Use \"gentls_cert remove\" to delete)"
exit 1
fi
echo "Creating new CA..."
if [ ! -d "${CONFDIR}/CA" ]; then
mkdir -p -m 750 "${CONFDIR}/CA" || exit 1
fi
if [ -e "${CONFDIR}/CA/config.tpl" ]; then
if [ $0 -nt "${CONFDIR}/CA/config.tpl" ]; then
echo "WARNING! genttls_cert has a modified time more recent than ${CONFDIR}/CA/config.tpl remove config.tpl to re-generate it"
fi
else
cat > "${CONFDIR}/CA/config.tpl" <<-EOF
[ req ]
default_bits = \$ENV::KEY_SIZE
prompt = no
distinguished_name = req_dn
x509_extensions = v3_ca
[ req_dn ]
commonName = %CN%
organizationName = %ORG%
[ server ]
nsComment="FS Server Cert"
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
subjectAltName=%ALTNAME%
nsCertType=server
extendedKeyUsage=serverAuth
[ client ]
nsComment="FS Client Cert"
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
subjectAltName=%ALTNAME%
nsCertType=client
extendedKeyUsage=clientAuth
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints=CA:TRUE
EOF
fi
sed \
-e "s|%CN%|$COMMON_NAME|" \
-e "s|%ORG%|$ORG_NAME|" \
-e "/%ALTNAME%/d" \
-e "s|CA:FALSE|CA:TRUE|" \
"${CONFDIR}/CA/config.tpl" \
> "${TMPFILE}.cfg" || exit 1
openssl req -out "${CONFDIR}/CA/cacert.pem" \
-new -x509 -keyout "${CONFDIR}/CA/cakey.pem" \
-config "${TMPFILE}.cfg" -nodes -days ${DAYS} -sha1 >/dev/null || exit 1
cat "${CONFDIR}/CA/cacert.pem" > "${CONFDIR}/cafile.pem"
cp $TMPFILE.cfg /tmp/ssl.cfg
rm "${TMPFILE}.cfg"
echo "DONE"
}
generate_cert() {
local val=""
if ! check_ca; then
echo "No existing CA found, please create one with \"gentls_cert setup\" first"
exit 1
fi
echo "Generating new certificate..."
echo
echo "--------------------------------------------------------"
echo "CN: \"${COMMON_NAME}\""
echo "ORG_NAME: \"${ORG_NAME}\""
echo "ALT_NAME: \"${ALT_NAME}\""
echo
echo "Certificate filename \"${OUTFILE}\""
echo
echo "[Is this OK? (y/N)]"
read val
if [ "${val}" != "y" ] && [ "${val}" != "Y" ]; then
echo "Aborted"
return 2
fi
sed \
-e "s|%CN%|$COMMON_NAME|" \
-e "s|%ALTNAME%|$ALT_NAME|" \
-e "s|%ORG%|$ORG_NAME|" \
"${CONFDIR}/CA/config.tpl" \
> "${TMPFILE}.cfg" || exit 1
openssl req -new -out "${TMPFILE}.req" \
-newkey rsa:${KEY_SIZE} -keyout "${TMPFILE}.key" \
-config "${TMPFILE}.cfg" -nodes -sha1 >/dev/null || exit 1
openssl x509 -req -CAkey "${CONFDIR}/CA/cakey.pem" -CA "${CONFDIR}/CA/cacert.pem" -CAcreateserial \
-in "${TMPFILE}.req" -out "${TMPFILE}.crt" -extfile "${TMPFILE}.cfg" \
-extensions "${EXTENSIONS}" -days ${DAYS} -sha1 >/dev/null || exit 1
cat "${TMPFILE}.crt" "${TMPFILE}.key" > "${CONFDIR}/${OUTFILE}"
rm "${TMPFILE}.cfg" "${TMPFILE}.crt" "${TMPFILE}.key" "${TMPFILE}.req"
echo "DONE"
}
remove_ca() {
echo "Removing CA"
if [ -d "${CONFDIR}/CA" ]; then
rm "${CONFDIR}/CA/"*
rmdir "${CONFDIR}/CA"
fi
echo "DONE"
}
OUTFILESET="0"
command="$1"
shift
while [ $# -gt 0 ]; do
case $1 in
-cn)
shift
COMMON_NAME="$1"
;;
-alt)
shift
ALT_NAME="$1"
;;
-org)
shift
ORG_NAME="$1"
;;
-out)
shift
OUTFILE="$1"
OUTFILESET="1"
;;
-days)
shift
DAYS="$1"
;;
esac
shift
done
case ${command} in
setup)
setup_ca
;;
create)
EXTENSIONS="server"
generate_cert
;;
create_server)
EXTENSIONS="server"
generate_cert
;;
create_client)
EXTENSIONS="client"
if [ "${OUTFILESET}" = "0" ]; then
OUTFILE="client.pem"
fi
generate_cert
;;
remove)
echo "Are you sure you want to delete the CA? [YES to delete]"
read val
if [ "${val}" = "YES" ]; then
remove_ca
else
echo "Not deleting CA"
fi
;;
*)
cat <<-EOF
$0 <setup|create_server|create_client|clean> [options]
* commands:
setup - Setup new CA
remove - Remove CA
create_server - Create new certificate (overwriting existing!)
create_client - Create a new client certificate (overwrites existing!)
* options:
-cn Set common name
-alt Set alternative name (use prefix 'DNS:' or 'URI:')
-org Set organization name
-out Filename for new certificate (create only)
-days Certificate expires in X days (default: 365)
EOF
exit 1
;;
esac

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)