X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2Fbin%2Ffreeside-selfservice-xmlrpcd;h=9a8481e4d83d39d38c95cfc7168497bd8e40c36d;hb=17a8b72b78ba455b58d53731fe557a471e0f2947;hp=d7b30b0aa65c088f69aeba93dd92792daa2ad789;hpb=fe104b1e0f896ed93d0cab8c9c1b514f3090899e;p=freeside.git diff --git a/FS/bin/freeside-selfservice-xmlrpcd b/FS/bin/freeside-selfservice-xmlrpcd index d7b30b0aa..9a8481e4d 100755 --- a/FS/bin/freeside-selfservice-xmlrpcd +++ b/FS/bin/freeside-selfservice-xmlrpcd @@ -3,9 +3,11 @@ # based on http://www.perlmonks.org/?node_id=582781 by Justin Hawkins # and http://poe.perl.org/?POE_Cookbook/Web_Server_With_Forking -### -# modules and constants and variables, oh my -### +=head1 NAME + +freeside-selfservice-xmlrpcd + +=cut use warnings; use strict; @@ -23,11 +25,12 @@ 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; +use FS::TicketSystem; #freeside my $FREESIDE_LOG = "%%%FREESIDE_LOG%%%"; @@ -36,7 +39,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 +66,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 +195,12 @@ sub server_do_fork { $heap->{is_a_child} = 1; $heap->{children} = {}; + #freeside db connection, etc. + forksuidsetup($user); + + #why isn't this needed ala freeside-selfservice-server?? + #FS::TicketSystem->init(); + return; } } @@ -280,7 +295,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); @@ -300,23 +315,12 @@ sub client_got_request { $soap->request($request); $soap->handle; - my $response = $soap->response; - - $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 { + $FS::UID::dbh->commit() if $FS::UID::dbh; #XXX handle commit error - #if we need a db connection in the parent - ##get new db handle - #$FS::UID::dbh->{InactiveDestroy} = 1; - #forksuidsetup($user); - - adminsuidsetup($user); + my $response = $soap->response; - #i guess that was it + $heap->{client}->put($response); } ### The client handler received an error. Stop the ReadWrite wheel,