bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */
a81d5c3f5a4ad5d100b258d10d4c75f4a02ab1f6Stephan Bosch
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#include "lib.h"
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#include "array.h"
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch#include "ioloop.h"
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#include "istream.h"
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#include "http-response.h"
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Boschvoid
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Boschhttp_response_init(struct http_response *resp,
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch unsigned int status, const char *reason)
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch{
efe78d3ba24fc866af1c79b9223dc0809ba26cadStephan Bosch i_zero(resp);
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch resp->version_major = 1;
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch resp->version_minor = 1;
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch resp->date = ioloop_time;
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch resp->status = status;
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch resp->reason = reason;
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch}
c9779bb27bb927a49de946e66f178126ecd451b6Stephan Bosch
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Boschbool http_response_has_connection_option(const struct http_response *resp,
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch const char *option)
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch{
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch const char *const *opt_idx;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch if (!array_is_created(&resp->connection_options))
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch return FALSE;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch array_foreach(&resp->connection_options, opt_idx) {
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch if (strcasecmp(*opt_idx, option) == 0)
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch return TRUE;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch }
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch return FALSE;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch}
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Boschint http_response_get_payload_size(const struct http_response *resp,
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch uoff_t *size_r)
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch{
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch if (resp->payload == NULL) {
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch *size_r = 0;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch return 1;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch }
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch return i_stream_get_size(resp->payload, TRUE, size_r);
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch}
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch