default to a session cookie instead of setting an explicit timeout, weird timezone...
[freeside.git] / fs_selfservice / FS-SelfService / freeside-selfservice-soap-server
1 #!/usr/bin/perl -w
2
3 =head1 NAME
4
5 freeside-selfservice-soap-server
6
7 =cut
8
9 use strict;
10 use Fcntl qw(:flock);
11 use POSIX;
12 use Getopt::Std;
13 use SOAP::Transport::HTTP;
14 use FS::SelfService;
15
16 use vars qw( $opt_p $opt_d $opt_s );
17 use vars qw( $DEBUG );
18
19 getopts("s:p:d");
20 $DEBUG = $opt_d;
21 my $tag = $opt_s ? $opt_s : '';
22 $tag = ($opt_s ? ':' : '') . $opt_p ? ':'.$opt_p : '';
23
24 my $log_file = "/usr/local/freeside/selfservice.soap$tag.log";
25
26 my $pid = fork;
27 defined($pid) or die "Can't fork to start: $!";
28 print "Started daemon with pid $pid\n" if $pid;
29 exit if $pid;
30
31 POSIX::setsid();
32 open STDIN, "/dev/null" or die "Can't get rid of STDIN";
33 open STDOUT, ">/dev/null" or die "Can't get rid of STDOUT";
34 open STDERR, ">&STDOUT" or die "Can't get rid of STDERR";
35
36 $SIG{__WARN__} = \&_logmsg;
37 $SIG{__DIE__} = sub { &_logmsg(@_); exit };
38
39 my $daemon = SOAP::Transport::HTTP::Daemon
40   ->new($opt_s ? (LocalAddr => $opt_s) : (), LocalPort => $opt_p ? $opt_p : 8080)
41   ->dispatch_to('/usr/local/freeside/SOAP/') #, 'FS::SelfService'
42   ->objects_by_reference('iZoomOnlineProvisionService')
43   ->handle;
44
45 warn "Handling request at ", $daemon->url, "\n";
46 $daemon->handle;
47
48 sub _logmsg {
49   chomp( my $msg = shift );
50   my $log = new IO::File ">>$log_file";
51   flock($log, LOCK_EX);
52   seek($log, 0, 2);
53   print $log "[". scalar(localtime). "] [$$] $msg\n";
54   flock($log, LOCK_UN);
55   close $log;
56 }