/* Copyright (C) 2005-2009 Michel de Boer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "hdr_request_disposition.h" #include #include "util.h" t_hdr_request_disposition::t_hdr_request_disposition() : t_header("Request-Disposition", "d"), proxy_directive(PROXY_NULL), cancel_directive(CANCEL_NULL), fork_directive(FORK_NULL), recurse_directive(RECURSE_NULL), parallel_directive(PARALLEL_NULL), queue_directive(QUEUE_NULL) {} void t_hdr_request_disposition::set_proxy_directive(t_proxy_directive directive) { populated = true; proxy_directive = directive; } void t_hdr_request_disposition::set_cancel_directive(t_cancel_directive directive) { populated = true; cancel_directive = directive; } void t_hdr_request_disposition::set_fork_directive(t_fork_directive directive) { populated = true; fork_directive = directive; } void t_hdr_request_disposition::set_recurse_directive(t_recurse_directive directive) { populated = true; recurse_directive = directive; } void t_hdr_request_disposition::set_parallel_directive(t_parallel_directive directive) { populated = true; parallel_directive = directive; } void t_hdr_request_disposition::set_queue_directive(t_queue_directive directive) { populated = true; queue_directive = directive; } bool t_hdr_request_disposition::set_directive(const string &s) { if (s == REQDIS_PROXY) { if (proxy_directive == REDIRECT) return false; set_proxy_directive(PROXY); return true; } if (s == REQDIS_REDIRECT) { if (proxy_directive == PROXY) return false; set_proxy_directive(REDIRECT); return true; } if (s == REQDIS_CANCEL) { if (cancel_directive == NO_CANCEL) return false; set_cancel_directive(CANCEL); return true; } if (s == REQDIS_NO_CANCEL) { if (cancel_directive == CANCEL) return false; set_cancel_directive(NO_CANCEL); return true; } if (s == REQDIS_FORK) { if (fork_directive == NO_FORK) return false; set_fork_directive(FORK); return true; } if (s == REQDIS_NO_FORK) { if (fork_directive == FORK) return false; set_fork_directive(NO_FORK); return true; } if (s == REQDIS_RECURSE) { if (recurse_directive == NO_RECURSE) return false; set_recurse_directive(RECURSE); return true; } if (s == REQDIS_NO_RECURSE) { if (recurse_directive == RECURSE) return false; set_recurse_directive(NO_RECURSE); return true; } if (s == REQDIS_PARALLEL) { if (parallel_directive == SEQUENTIAL) return false; set_parallel_directive(PARALLEL); return true; } if (s == REQDIS_SEQUENTIAL) { if (parallel_directive == PARALLEL) return false; set_parallel_directive(SEQUENTIAL); return true; } if (s == REQDIS_QUEUE) { if (queue_directive == NO_QUEUE) return false; set_queue_directive(QUEUE); return true; } if (s == REQDIS_NO_QUEUE) { if (queue_directive == QUEUE) return false; set_queue_directive(NO_QUEUE); return true; } return false; } string t_hdr_request_disposition::encode_value(void) const { if (!populated) return ""; vector v; switch (proxy_directive) { case PROXY: v.push_back(REQDIS_PROXY); break; case REDIRECT: v.push_back(REQDIS_REDIRECT); break; default: break; } switch (cancel_directive) { case CANCEL: v.push_back(REQDIS_CANCEL); break; case NO_CANCEL: v.push_back(REQDIS_NO_CANCEL); break; default: break; } switch (fork_directive) { case FORK: v.push_back(REQDIS_FORK); break; case NO_FORK: v.push_back(REQDIS_NO_FORK); break; default: break; } switch (recurse_directive) { case RECURSE: v.push_back(REQDIS_RECURSE); break; case NO_RECURSE: v.push_back(REQDIS_NO_RECURSE); break; default: break; } switch (parallel_directive) { case PARALLEL: v.push_back(REQDIS_PARALLEL); break; case SEQUENTIAL: v.push_back(REQDIS_SEQUENTIAL); break; default: break; } switch (queue_directive) { case QUEUE: v.push_back(REQDIS_QUEUE); break; case NO_QUEUE: v.push_back(REQDIS_NO_QUEUE); break; default: break; } string s = join_strings(v, ","); return s; }