<%@language = "javascript" %>
<% /*
    $Revision$
    $Id$

    YET UNUSED in 2022.3

    File            lfosmproxy.asp
    Description:    Proxy-bestand om max-tiles op te halen
                    Voorkomt dat we last krijgen van CORS(?)
    Parameters:     x, y, z
    Note:           Nog niet gebruikt in 2022.3 (er zit nog geen opruim mechanisme in)

*/

var JSON_Result = true;
var ANONYMOUS_Allowed = 1;
%>
<!-- #include file="../Shared/common.inc" -->
<%
    var x = getQParamInt("x");
    var y = getQParamInt("y");
    var z = getQParamInt("z");

    // TODO: per klant cachen of een folder hoger en dan delen?
    // TODO: limiteren tot max MB en max age. Daarbij ver ingezoomde tiles eerder verwijderen
    //       dan globalere
    var cacheName = shared.tempFolder() + "/tile_{0}_{1}_{2}.png".format(z, x, y);
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    if (!fso.FileExists(cacheName))
    {
        // let op: de https://tile.openstreetmap.org lijkt logisch maar die heeft
        // te scherpe TLS instellingen voor de FACWS001 lijkt het (an error in the secure channel support)
        // Op de SaaS servers gaat het verder wel goed. Waarschijnlijk Windows 2016 of later nodig?
        var target = "https://tile.openstreetmap.de/{0}/{1}/{2}.png".format(z, x, y);

        //var http_request = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1");
        var http_request = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");
        http_request.open("GET", target, false); // Synchroon
        http_request.send();
        if (http_request.status < 200 || http_request.status > 299)
        {
            Response.Status = http_request.status + " " + http_request.statusText;
            Response.AddHeader("Content-Type", http_request.getResponseHeader("Content-Type"));
            Response.BinaryWrite(http_request.responseBody);
            Response.End;
        }
        var oStream = Server.CreateObject("ADODB.Stream");
        oStream.Open();
        oStream.Type = 1; // adTypeBinary
        oStream.Write(http_request.responseBody);
        oStream.SaveToFile(cacheName, 2); // overwrite?
        oStream.Close();
    }
    // Nu vanuit cache opleveren
    var oStream = Server.CreateObject("ADODB.Stream");
    oStream.Open;
    oStream.Type = 1;

    oStream.LoadFromFile(cacheName);

    Response.clear;
    Response.contenttype = "image/png";
    Response.BinaryWrite(oStream.read(oStream.Size));

%>