author | Michael Krelin <hacker@klever.net> | 2009-04-04 23:51:03 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2009-04-05 00:41:00 (UTC) |
commit | 01eedb36de69f92fc896c525047df78b34f87324 (patch) (side-by-side diff) | |
tree | 05320addd7a51652d3f3ff34cfe17e81cf1b8889 /src | |
parent | 6b71fd1e4edd46b7caf47135740c961d5d4f051c (diff) | |
download | iii-01eedb36de69f92fc896c525047df78b34f87324.zip iii-01eedb36de69f92fc896c525047df78b34f87324.tar.gz iii-01eedb36de69f92fc896c525047df78b34f87324.tar.bz2 |
send back original transfer mode and timestamp
in an attempt to make it send more than one photo per session,
but it doesn't seem to help. Well, it doesn't hurt either.
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | src/eyefiservice.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/eyefiservice.cc b/src/eyefiservice.cc index 97cb33b..153a7c4 100644 --- a/src/eyefiservice.cc +++ b/src/eyefiservice.cc @@ -4,98 +4,98 @@ #include <stdexcept> #include <iterator> #include <syslog.h> #include <sys/wait.h> #include <autosprintf.h> #include "eyekinfig.h" #include "eyetil.h" #include "soapeyefiService.h" static bool detached_child() { pid_t p = fork(); if(p<0) throw std::runtime_error("failed to fork()"); if(!p) { p = fork(); if(p<0) { syslog(LOG_ERR,"Failed to re-fork child process"); _exit(-1); } if(!p) { setsid(); for(int i=getdtablesize();i>=0;--i) close(i); int i=open("/dev/null",O_RDWR); assert(i==0); i = dup(i); assert(i==1); i = dup(i); assert(i==2); return true; } _exit(0); } int rc; if(waitpid(p,&rc,0)<0) throw std::runtime_error("failed to waitpid()"); if(!WIFEXITED(rc)) throw std::runtime_error("error in forked process"); if(WEXITSTATUS(rc)) throw std::runtime_error("forked process signalled error"); return false; } int eyefiService::StartSession( std::string macaddress,std::string cnonce, int transfermode,long transfermodetimestamp, struct rns__StartSessionResponse &r ) { #ifndef NDEBUG syslog(LOG_DEBUG, "StartSession request from %s with cnonce=%s, transfermode=%d, transfermodetimestamp=%ld", macaddress.c_str(), cnonce.c_str(), transfermode, transfermodetimestamp ); #endif r.credential = binary_t(macaddress+cnonce+eyekinfig_t(macaddress).get_upload_key()).md5().hex(); /* TODO: better nonce generator */ time_t t = time(0); r.snonce = binary_t(&t,sizeof(t)).md5().hex(); - r.transfermode=2; - r.transfermodetimestamp=t; + r.transfermode=transfermode; + r.transfermodetimestamp=transfermodetimestamp; r.upsyncallowed=false; std::string cmd = eyekinfig_t(macaddress).get_on_start_session(); if(!cmd.empty()) { if(detached_child()) { putenv( gnu::autosprintf("EYEFI_MACADDRESS=%s",macaddress.c_str()) ); putenv( gnu::autosprintf("EYEFI_TRANSFERMODE=%d",transfermode) ); putenv( gnu::autosprintf("EYEFI_TRANSFERMODETIMESTAMP=%ld",transfermodetimestamp) ); char *argv[] = { (char*)"/bin/sh", (char*)"-c", (char*)cmd.c_str(), 0 }; execv("/bin/sh",argv); syslog(LOG_ERR,"Failed to execute '%s'",cmd.c_str()); _exit(-1); } } return SOAP_OK; } int eyefiService::GetPhotoStatus( std::string credential, std::string macaddress, std::string filename, long filesize, std::string filesignature, struct rns__GetPhotoStatusResponse &r ) { #ifndef NDEBUG syslog(LOG_DEBUG, "GetPhotoStatus request from %s with credential=%s, filename=%s, filesize=%ld, filesignature=%s", macaddress.c_str(), credential.c_str(), filename.c_str(), filesize, filesignature.c_str() ); #endif r.fileid = 1; r.offset = 0; return SOAP_OK; } int eyefiService::MarkLastPhotoInRoll( std::string macaddress, int mergedelta, struct rns__MarkLastPhotoInRollResponse &r ) { #ifndef NDEBUG syslog(LOG_DEBUG, "MarkLastPhotoInRoll request from %s with mergedelta=%d", macaddress.c_str(), mergedelta ); #endif std::string cmd = eyekinfig_t(macaddress).get_on_mark_last_photo_in_roll(); if(!cmd.empty()) { if(detached_child()) { putenv( gnu::autosprintf("EYEFI_MACADDRESS=%s",macaddress.c_str()) ); putenv( gnu::autosprintf("EYEFI_MERGEDELTA=%d",mergedelta) ); char *argv[] = { (char*)"/bin/sh", (char*)"-c", (char*)cmd.c_str(), 0 }; execv("/bin/sh",argv); syslog(LOG_ERR,"Failed to execute '%s'",cmd.c_str()); _exit(-1); } |