Changeset 730

Show
Ignore:
Timestamp:
11/15/06 20:53:45 (2 years ago)
Author:
mart
Message:

Allow addr:port type specifications for the various port settings. Previously the connection code allowed for it but the config file parser didn't.

Additionally, cleaned up the way external components are configured to make its port specification consistent with everyone else's port specification. The default is still to bind to localhost rather than 0.0.0.0, though. 0.0.0.0:port will override this if necessary.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/DJabberd/lib/DJabberd.pm

    r729 r730  
    4040use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET SOCK_STREAM); 
    4141use Carp qw(croak); 
    42 use DJabberd::Util qw(tsub as_bool as_num as_abs_path); 
     42use DJabberd::Util qw(tsub as_bool as_num as_abs_path as_bind_addr); 
    4343 
    4444our $VERSION = '0.81'; 
     
    133133sub set_config_clientport { 
    134134    my ($self, $val) = @_; 
    135     $self->{c2s_port} = as_num($val); 
     135    $self->{c2s_port} = as_bind_addr($val); 
    136136} 
    137137 
    138138sub set_config_serverport { 
    139139    my ($self, $val) = @_; 
    140     $self->{s2s_port} = as_num($val); 
     140    $self->{s2s_port} = as_bind_addr($val); 
    141141} 
    142142 
    143143sub set_config_adminport { 
    144144    my ($self, $val) = @_; 
    145     $self->{admin_port} = as_num($val); 
     145    $self->{admin_port} = as_bind_addr($val); 
    146146} 
    147147 
  • trunk/DJabberd/lib/DJabberd/Component/External.pm

    r643 r730  
    5151    my ($self, $port) = @_; 
    5252     
    53     $self->{listenport} = $port
     53    return $self->set_config_listenaddr($port)
    5454} 
    5555 
     
    6363    my ($self, $addr) = @_; 
    6464     
    65     $self->{listenaddr} = $addr
     65    $self->{listenaddr} = DJabberd::Util::as_bind_addr($addr)
    6666} 
    6767 
     
    6969    my ($self) = @_; 
    7070     
    71     # If the address starts with a slash, it's a unix domain socket 
    72     if ($self->{listenaddr} =~ m!^/!) { 
    73         $logger->logdie("Can't specify ListenPort for external component on a UNIX domain socket") if $self->{listenport}; 
    74     } 
    75     else { 
    76         $logger->logdie("No ListenPort specified for external component") unless $self->{listenport}; 
    77         $self->{listenaddr} ||= "127.0.0.1"; 
    78     } 
     71    $logger->logdie("No ListenPort specified for external component") unless $self->{listenaddr}; 
     72    $self->{listenaddr} = "127.0.0.1:".$self->{listenaddr} if $self->{listenaddr} =~ /^\d+$/; 
    7973 
    8074    $logger->logdie("No Secret specified for external component") unless $self->{secret}; 
     
    156150        $logger->info("Started listener for component ".$self->domain." on UNIX domain socket $bindaddr"); 
    157151    } else { 
    158         my $localaddr = $bindaddr.":".$self->{listenport}; 
    159  
    160152        $server = IO::Socket::INET->new( 
    161             LocalAddr => $localaddr, 
     153            LocalAddr => $bindaddr, 
    162154            Type      => SOCK_STREAM, 
    163155            Proto     => IPPROTO_TCP, 
     
    166158            Listen    => 10 
    167159        ); 
    168         $logger->logdie("Error creating listen socket for <$localaddr>: $@") unless $server; 
    169         $logger->info("Started listener for component ".$self->domain." on TCP socket <$localaddr>"); 
     160        $logger->logdie("Error creating listen socket for <$bindaddr>: $@") unless $server; 
     161        $logger->info("Started listener for component ".$self->domain." on TCP socket <$bindaddr>"); 
    170162    } 
    171163 
  • trunk/DJabberd/lib/DJabberd/Util.pm

    r675 r730  
    33require Exporter; 
    44our @ISA = qw(Exporter); 
    5 our @EXPORT_OK = qw(exml tsub lbsub as_bool as_num as_abs_path); 
     5our @EXPORT_OK = qw(exml tsub lbsub as_bool as_num as_abs_path as_bind_addr); 
    66 
    77sub as_bool { 
     
    1515    my $val = shift; 
    1616    return $val if $val =~ /^\d+$/; 
    17     die "Not a number\n"; 
     17    die "'$val' is not a number\n"; 
     18
     19 
     20sub as_bind_addr { 
     21    my $val = shift; 
     22    # Must either be like 127.0.0.1:1234, a bare port number or an absolute path to a unix domain socket 
     23    if ($val =~ /^(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?:)?\d+$/ || ($val =~ m!^/! && -e $val)) { 
     24        return $val; 
     25    } 
     26    die "'$val' is not a valid bind address or port\n"; 
    1827} 
    1928