@@ -9,6 +9,8 @@ | |||||
#define TCP_CACHE_PROTO_H | #define TCP_CACHE_PROTO_H | ||||
#include <cppcms/cstdint.h> | #include <cppcms/cstdint.h> | ||||
#include <time.h> | |||||
#include <limits> | |||||
namespace cppcms { | namespace cppcms { | ||||
namespace impl { | namespace impl { | ||||
@@ -68,6 +70,21 @@ namespace impl { | |||||
} operations; | } operations; | ||||
}; | }; | ||||
inline time_t to_time_t(int64_t v) | |||||
{ | |||||
if(sizeof(time_t) < sizeof(v)) { | |||||
if(v > static_cast<int64_t>(std::numeric_limits<time_t>::max())) { | |||||
return std::numeric_limits<time_t>::max(); | |||||
} | |||||
else { | |||||
return static_cast<time_t>(v); | |||||
} | |||||
} | |||||
else { | |||||
return static_cast<time_t>(v); | |||||
} | |||||
} | |||||
} // namespace impl | } // namespace impl | ||||
} // Namespace cppcms | } // Namespace cppcms | ||||
@@ -49,7 +49,7 @@ bool tcp_storage::load(std::string const &sid,time_t &timeout,std::string &out) | |||||
std::string data=sid; | std::string data=sid; | ||||
tcp().get(sid).transmit(h,data); | tcp().get(sid).transmit(h,data); | ||||
if(h.opcode==opcodes::session_load_data) { | if(h.opcode==opcodes::session_load_data) { | ||||
timeout = h.operations.session_data.timeout; | |||||
timeout = to_time_t(h.operations.session_data.timeout); | |||||
out.swap(data); | out.swap(data); | ||||
return true; | return true; | ||||
} | } | ||||
@@ -67,7 +67,7 @@ int tcp_cache::fetch( std::string const &key, | |||||
if(h.opcode!=opcodes::data) | if(h.opcode!=opcodes::data) | ||||
return not_found; | return not_found; | ||||
timeout = h.operations.data.timeout; | |||||
timeout = to_time_t(h.operations.data.timeout); | |||||
generation=h.operations.data.generation; | generation=h.operations.data.generation; | ||||
@@ -183,7 +183,7 @@ public: | |||||
hout_.opcode=opcodes::error; | hout_.opcode=opcodes::error; | ||||
return; | return; | ||||
} | } | ||||
time_t timeout=hin_.operations.store.timeout; | |||||
time_t timeout=to_time_t(hin_.operations.store.timeout); | |||||
std::string key; | std::string key; | ||||
key.assign(data_in_.begin(),data_in_.begin()+hin_.operations.store.key_len); | key.assign(data_in_.begin(),data_in_.begin()+hin_.operations.store.key_len); | ||||
std::string data; | std::string data; | ||||
@@ -199,7 +199,7 @@ public: | |||||
hout_.opcode=opcodes::error; | hout_.opcode=opcodes::error; | ||||
return; | return; | ||||
} | } | ||||
time_t timeout=hin_.operations.session_save.timeout; | |||||
time_t timeout=to_time_t(hin_.operations.session_save.timeout); | |||||
std::string sid(data_in_.begin(),data_in_.begin()+32); | std::string sid(data_in_.begin(),data_in_.begin()+32); | ||||
std::string value(data_in_.begin()+32,data_in_.end()); | std::string value(data_in_.begin()+32,data_in_.end()); | ||||
sessions_->save(sid,timeout,value); | sessions_->save(sid,timeout,value); | ||||