/* * Copyright 2020 Vincent Sanders * * This file is part of NetSurf. * * NetSurf 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; version 2 of the License. * * NetSurf 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 . */ /** * \file * content generator for the about scheme query privacy page */ #include #include #include #include #include #include #include "utils/errors.h" #include "utils/messages.h" #include "content/fetch.h" #include "private.h" #include "query.h" #include "query_fetcherror.h" /** * Handler to generate about scheme fetch error query page * * \param ctx The fetcher context. * \return true if handled false if aborted. */ bool fetch_about_query_fetcherror_handler(struct fetch_about_context *ctx) { nserror res; char *url_s; size_t url_l; const char *reason = ""; const char *title; struct nsurl *siteurl = NULL; char *description = NULL; const struct fetch_multipart_data *curmd; /* mutipart data iterator */ /* extract parameters from multipart post data */ curmd = fetch_about_get_multipart(ctx); while (curmd != NULL) { if (strcmp(curmd->name, "siteurl") == 0) { res = nsurl_create(curmd->value, &siteurl); if (res != NSERROR_OK) { return fetch_about_srverror(ctx); } } else if (strcmp(curmd->name, "reason") == 0) { reason = curmd->value; } curmd = curmd->next; } if (siteurl == NULL) { return fetch_about_srverror(ctx); } /* content is going to return ok */ fetch_about_set_http_code(ctx, 200); /* content type */ if (fetch_about_send_header(ctx, "Content-Type: text/html; charset=utf-8")) { goto fetch_about_query_fetcherror_handler_aborted; } title = messages_get("FetchErrorTitle"); res = fetch_about_ssenddataf(ctx, "\n\n" "%s\n" "\n" "\n" "\n" "

%s

\n", title, title); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } res = fetch_about_ssenddataf(ctx, "
"); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } res = get_query_description(siteurl, "FetchErrorDescription", &description); if (res == NSERROR_OK) { res = fetch_about_ssenddataf(ctx, "

%s

", description); free(description); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } } res = fetch_about_ssenddataf(ctx, "

%s

", reason); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } res = fetch_about_ssenddataf(ctx, "
" "" "" "
", messages_get("Backtoprevious"), messages_get("TryAgain")); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } res = nsurl_get(siteurl, NSURL_COMPLETE, &url_s, &url_l); if (res != NSERROR_OK) { url_s = strdup(""); } res = fetch_about_ssenddataf(ctx, "", url_s); free(url_s); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } res = fetch_about_ssenddataf(ctx, "
\n\n"); if (res != NSERROR_OK) { goto fetch_about_query_fetcherror_handler_aborted; } fetch_about_send_finished(ctx); nsurl_unref(siteurl); return true; fetch_about_query_fetcherror_handler_aborted: nsurl_unref(siteurl); return false; }