fix 'Can't call method "setup" on an undefined value' error when using into rates...
[freeside.git] / FS / bin / freeside-selfservice-xmlrpcd
index a902051..acf516a 100755 (executable)
@@ -15,7 +15,7 @@ use constant MAX_PROCESSES => 10;      # Total server process count.
 use constant SERVER_PORT   => 8080;    # Server port.
 use constant TESTING_CHURN => 0;       # Randomly test process respawning.
 
-use POE;                         # Base features.
+use POE 1.2;                     # Base features.
 use POE::Filter::HTTPD;          # For serving HTTP content.
 use POE::Wheel::ReadWrite;       # For socket I/O.
 use POE::Wheel::SocketFactory;   # For serving socket connections.
@@ -23,8 +23,8 @@ use POE::Wheel::SocketFactory;   # For serving socket connections.
 use XMLRPC::Transport::HTTP; #SOAP::Transport::HTTP;
 use XMLRPC::Lite; # for XMLRPC::Serializer
 
-use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 );
-use FS::UID qw(adminsuidsetup);
+use FS::Daemon qw( daemonize1 drop_root logfile daemonize2 );
+use FS::UID qw( adminsuidsetup forksuidsetup dbh );
 use FS::Conf;
 use FS::ClientAPI qw( load_clientapi_modules );
 use FS::ClientAPI_XMLRPC; #FS::SelfService::XMLRPC;
@@ -36,7 +36,7 @@ my $lock_file = "$FREESIDE_LOCK/selfservice-xmlrpcd.writelock";
 
 #freeside xmlrpc.cgi
 my %typelookup = (
-  base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'],
+#not utf-8 safe#  base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'],
   dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'],
   string => [40, sub {1}, 'as_string'],
 );
@@ -63,11 +63,17 @@ logfile("$FREESIDE_LOG/selfservice-xmlrpcd.log");
 
 daemonize2();
 
+FS::ClientAPI::Signup::clear_cache();
+
 my $conf = new FS::Conf;
 
 die "not running; selfservice-xmlrpc conf option is off\n"
   unless $conf->exists('selfservice-xmlrpc');
 
+#parent doesn't need to hold a DB connection open
+dbh->disconnect;
+undef $FS::UID::dbh;
+
 ###
 # the main loop
 ###
@@ -186,6 +192,9 @@ sub server_do_fork {
         $heap->{is_a_child} = 1;
         $heap->{children}   = {};
 
+        #freeside db connection, etc.
+        forksuidsetup($user);
+
         return;
     }
 }
@@ -280,7 +289,7 @@ sub client_stop {
 sub client_got_request {
     my ( $heap, $request ) = @_[ HEAP, ARG0 ];
 
-    freeside_kid_time();
+    forksuidsetup($user) unless dbh && dbh->ping;
 
     my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup);
 
@@ -305,20 +314,6 @@ sub client_got_request {
     $heap->{client}->put($response);
 }
 
-#setup the database connection and other things FS::SelfService::XMLRPC
-#expects to be in place.  aka "kid time" in freeside-selfservice-server
-sub freeside_kid_time {
-
-  #if we need a db connection in the parent
-  ##get new db handle
-  #$FS::UID::dbh->{InactiveDestroy} = 1;
-  #forksuidsetup($user);
-
-  adminsuidsetup($user);
-
-  #i guess that was it
-}
-
 ### The client handler received an error.  Stop the ReadWrite wheel,
 ### which also closes the socket.