3 # freeside-selfservice-xmlrpc-server
10 use XMLRPC::Transport::HTTP;
11 use XMLRPC::Lite; # for XMLRPC::Serializer;
12 use FS::SelfService::XMLRPC;
14 use vars qw( $opt_p $opt_d );
15 use vars qw( $DEBUG );
19 my $tag = $opt_p ? ':'.$opt_p : '';
22 base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'],
23 dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'],
24 string => [40, sub {1}, 'as_string'],
26 my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup);
28 my $log_file = "/usr/local/freeside/selfservice.xmlrpc$tag.log";
31 defined($pid) or die "Can't fork to start: $!";
32 print "Started daemon with pid $pid\n" if $pid;
36 open STDIN, "/dev/null" or die "Can't get rid of STDIN";
37 open STDOUT, ">/dev/null" or die "Can't get rid of STDOUT";
38 open STDERR, ">&STDOUT" or die "Can't get rid of STDERR";
40 $SIG{__WARN__} = \&_logmsg;
41 $SIG{__DIE__} = sub { &_logmsg(@_); exit };
43 my $daemon = XMLRPC::Transport::HTTP::Daemon
44 ->new(LocalPort => $opt_p ? $opt_p : 8080)
45 ->dispatch_to('FS::SelfService::XMLRPC')
46 ->serializer($serializer);
48 warn "Handling request at ", $daemon->url, "\n";
52 chomp( my $msg = shift );
53 my $log = new IO::File ">>$log_file";
56 print $log "[". scalar(localtime). "] [$$] $msg\n";