/////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2008-2012 Artyom Beilis (Tonkikh) // // See accompanying file COPYING.TXT file for licensing details. // /////////////////////////////////////////////////////////////////////////////// #ifndef TCP_CACHE_PROTO_H #define TCP_CACHE_PROTO_H #include #include #include namespace cppcms { namespace impl { namespace opcodes { enum { fetch, rise, clear, store ,stats, error, done, data, no_data, uptodate, out_stats, session_save, session_load, session_load_data, session_remove}; inline char const *to_name(int v) { char const *names[] = { "fetch","rise", "clear", "store" ,"stats", "error", "done", "data", "no_data", "uptodate", "out_stats", "session_save", "session_load", "session_load_data", "session_remove" }; if(v<0 || v>session_remove) return "unknown"; return names[v]; } } struct tcp_operation_header { uint32_t opcode; uint32_t size; uint32_t filler[2]; union { struct { uint64_t current_gen; uint32_t key_len; uint32_t transfer_triggers : 1; uint32_t transfer_if_not_uptodate : 1; uint32_t reserver : 30; } fetch; struct { uint32_t trigger_len; } rise; struct { int64_t timeout; uint32_t key_len; uint32_t data_len; uint32_t triggers_len; } store; struct { uint64_t generation; int64_t timeout; uint32_t data_len; uint32_t triggers_len; } data; struct { uint32_t keys; uint32_t triggers; } out_stats; struct { int64_t timeout; } session_save; struct { int64_t timeout; } session_data; } operations; }; inline time_t to_time_t(int64_t v) { if(sizeof(time_t) < sizeof(v)) { if(v > static_cast(std::numeric_limits::max())) { return std::numeric_limits::max(); } else { return static_cast(v); } } else { return static_cast(v); } } } // namespace impl } // Namespace cppcms #endif