summaryrefslogtreecommitdiffabout
path: root/src/eyefiworker.cc
Unidiff
Diffstat (limited to 'src/eyefiworker.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/eyefiworker.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/eyefiworker.cc b/src/eyefiworker.cc
index c051482..9dcd048 100644
--- a/src/eyefiworker.cc
+++ b/src/eyefiworker.cc
@@ -1,36 +1,42 @@
1#include <signal.h> 1#include <signal.h>
2#include <stdexcept> 2#include <stdexcept>
3#include "eyefiworker.h" 3#include "eyefiworker.h"
4#ifdef HAVE_SQLITE
5# include "sqlite3.h"
6#endif
4 7
5eyefiworker::eyefiworker() 8eyefiworker::eyefiworker()
6 : eyefiService(SOAP_IO_STORE|SOAP_IO_KEEPALIVE) { 9 : eyefiService(SOAP_IO_STORE|SOAP_IO_KEEPALIVE) {
7 bind_flags = SO_REUSEADDR; max_keep_alive = 0; 10 bind_flags = SO_REUSEADDR; max_keep_alive = 0;
8 socket_flags = 11 socket_flags =
9#if defined(MSG_NOSIGNAL) 12#if defined(MSG_NOSIGNAL)
10 MSG_NOSIGNAL 13 MSG_NOSIGNAL
11#elif defined(SO_NOSIGPIPE) 14#elif defined(SO_NOSIGPIPE)
12 SO_NOSIGPIPE 15 SO_NOSIGPIPE
13#else 16#else
14#error Something is wrong with sigpipe prevention on the platform 17#error Something is wrong with sigpipe prevention on the platform
15#endif 18#endif
16 ; 19 ;
17 } 20 }
18 21
19int eyefiworker::run(int bindport) { 22int eyefiworker::run(int bindport) {
23#ifdef HAVE_SQLITE
24 sqlite3_initialize();
25#endif
20 if(!soap_valid_socket(bind(0,bindport,64))) 26 if(!soap_valid_socket(bind(0,bindport,64)))
21 throw std::runtime_error("failed to bind()"); 27 throw std::runtime_error("failed to bind()");
22 signal(SIGCHLD,SIG_IGN); 28 signal(SIGCHLD,SIG_IGN);
23 while(true) { 29 while(true) {
24 if(!soap_valid_socket(accept())) 30 if(!soap_valid_socket(accept()))
25 throw std::runtime_error("failed to accept()"); 31 throw std::runtime_error("failed to accept()");
26 pid_t p = fork(); 32 pid_t p = fork();
27 if(p<0) throw std::runtime_error("failed to fork()"); 33 if(p<0) throw std::runtime_error("failed to fork()");
28 if(!p) { 34 if(!p) {
29 recv_timeout = 600; send_timeout = 120; 35 recv_timeout = 600; send_timeout = 120;
30 (void)serve(); 36 (void)serve();
31 soap_destroy(this); soap_end(this); soap_done(this); 37 soap_destroy(this); soap_end(this); soap_done(this);
32 _exit(0); 38 _exit(0);
33 } 39 }
34 close(socket); socket = SOAP_INVALID_SOCKET; 40 close(socket); socket = SOAP_INVALID_SOCKET;
35 } 41 }
36} 42}