Use connection-unique data for conn_id, instead of local memory address
authorMike Rylander <mrylander@gmail.com>
Thu, 14 Aug 2014 17:22:16 +0000 (13:22 -0400)
committerMike Rylander <mrylander@gmail.com>
Thu, 14 Aug 2014 17:22:16 +0000 (13:22 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
SIPServer.pm

index 6aa38e7..db86454 100755 (executable)
@@ -243,7 +243,8 @@ sub check_pending_connections {
         eval $values->{$key}; # Data::Dumper->Dump string
 
         my $id = $VAR1->{id};
-        $active_connections{$id}{net_server} = $VAR1->{net_server_parts};
+        $active_connections{$id}{net_server}{$_} = $VAR1->{net_server_parts}{$_}
+            for (keys %{$VAR1->{net_server_parts}});
         delete $active_connections{$id} unless $VAR1->{success};
 
         # clean up ---
@@ -274,7 +275,12 @@ sub mux_input {
     # clear read data from the mux string ref
     $$str_ref = '';
 
-    my $conn_id = ''.$mux_fh;
+    my ($peeraddr, $peerport) = (
+        $mself->{net_server}->{server}->{peeraddr},
+        $mself->{net_server}->{server}->{peerport}
+    );
+
+    my $conn_id = "$peeraddr:$peerport";
 
     # check for kids that went away
     REAPER();
@@ -303,7 +309,7 @@ sub mux_input {
         $port     = $self->{server}->{sockport};
         $proto    = $self->{server}->{client}->NS_proto();
     
-        syslog('LOG_INFO', "Inbound connection from $sockaddr on port $port and proto $proto");
+        syslog('LOG_INFO', "Inbound connection from $peeraddr to $sockaddr on port $port and proto $proto");
     
         $self->{service} = $config->find_service( $sockaddr, $port, $proto );
     
@@ -400,6 +406,8 @@ sub mux_input {
 
     if ($pid == 0) { # in kid
 
+        syslog("LOG_DEBUG", "multi: $conn_id to be processed by child $$");
+
         # build the connection we deleted after logging in
         $self->{ils}->use; # module name in the parent
         $self->{ils} = $self->{ils}->new($self->{institution}, $self->{account}, $self->{state});