Changeset 730
- Timestamp:
- 11/15/06 20:53:45 (2 years ago)
- Files:
-
- trunk/DJabberd/lib/DJabberd.pm (modified) (2 diffs)
- trunk/DJabberd/lib/DJabberd/Component/External.pm (modified) (5 diffs)
- trunk/DJabberd/lib/DJabberd/Util.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/DJabberd/lib/DJabberd.pm
r729 r730 40 40 use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET SOCK_STREAM); 41 41 use Carp qw(croak); 42 use DJabberd::Util qw(tsub as_bool as_num as_abs_path );42 use DJabberd::Util qw(tsub as_bool as_num as_abs_path as_bind_addr); 43 43 44 44 our $VERSION = '0.81'; … … 133 133 sub set_config_clientport { 134 134 my ($self, $val) = @_; 135 $self->{c2s_port} = as_ num($val);135 $self->{c2s_port} = as_bind_addr($val); 136 136 } 137 137 138 138 sub set_config_serverport { 139 139 my ($self, $val) = @_; 140 $self->{s2s_port} = as_ num($val);140 $self->{s2s_port} = as_bind_addr($val); 141 141 } 142 142 143 143 sub set_config_adminport { 144 144 my ($self, $val) = @_; 145 $self->{admin_port} = as_ num($val);145 $self->{admin_port} = as_bind_addr($val); 146 146 } 147 147 trunk/DJabberd/lib/DJabberd/Component/External.pm
r643 r730 51 51 my ($self, $port) = @_; 52 52 53 $self->{listenport} = $port;53 return $self->set_config_listenaddr($port); 54 54 } 55 55 … … 63 63 my ($self, $addr) = @_; 64 64 65 $self->{listenaddr} = $addr;65 $self->{listenaddr} = DJabberd::Util::as_bind_addr($addr); 66 66 } 67 67 … … 69 69 my ($self) = @_; 70 70 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+$/; 79 73 80 74 $logger->logdie("No Secret specified for external component") unless $self->{secret}; … … 156 150 $logger->info("Started listener for component ".$self->domain." on UNIX domain socket $bindaddr"); 157 151 } else { 158 my $localaddr = $bindaddr.":".$self->{listenport};159 160 152 $server = IO::Socket::INET->new( 161 LocalAddr => $ localaddr,153 LocalAddr => $bindaddr, 162 154 Type => SOCK_STREAM, 163 155 Proto => IPPROTO_TCP, … … 166 158 Listen => 10 167 159 ); 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>"); 170 162 } 171 163 trunk/DJabberd/lib/DJabberd/Util.pm
r675 r730 3 3 require Exporter; 4 4 our @ISA = qw(Exporter); 5 our @EXPORT_OK = qw(exml tsub lbsub as_bool as_num as_abs_path );5 our @EXPORT_OK = qw(exml tsub lbsub as_bool as_num as_abs_path as_bind_addr); 6 6 7 7 sub as_bool { … … 15 15 my $val = shift; 16 16 return $val if $val =~ /^\d+$/; 17 die "Not a number\n"; 17 die "'$val' is not a number\n"; 18 } 19 20 sub 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"; 18 27 } 19 28
