Ignore:
Timestamp:
Jul 13, 2017, 9:01:05 AM (21 months ago)
Author:
Juanma
Message:

Initial release

File:
1 edited

Legend:

Unmodified
Added
Removed
  • squid-ssl/trunk/fuentes/tools/cachemgr.cc

    r5495 r5496  
    1212#include "html_quote.h"
    1313#include "ip/Address.h"
    14 #include "MemBuf.h"
    1514#include "rfc1123.h"
    1615#include "rfc1738.h"
     
    425424}
    426425
    427 static void
    428 munge_menu_line(MemBuf &out, const char *buf, cachemgr_request * req)
     426static const char *
     427munge_menu_line(const char *buf, cachemgr_request * req)
    429428{
    430429    char *x;
     
    434433    char *a_url;
    435434    char *buf_copy;
    436 
    437     const char bufLen = strlen(buf);
    438     if (bufLen < 1 || *buf != ' ') {
    439         out.append(buf, bufLen);
    440         return;
    441     }
    442 
    443     buf_copy = x = xstrndup(buf, bufLen);
     435    static char html[2 * 1024];
     436
     437    if (strlen(buf) < 1)
     438        return buf;
     439
     440    if (*buf != ' ')
     441        return buf;
     442
     443    buf_copy = x = xstrdup(buf);
    444444
    445445    a = xstrtok(&x, '\t');
     
    453453    /* no reason to give a url for a disabled action */
    454454    if (!strcmp(p, "disabled"))
    455         out.Printf("<LI type=\"circle\">%s (disabled)<A HREF=\"%s\">.</A>\n", d, a_url);
     455        snprintf(html, sizeof(html), "<LI type=\"circle\">%s (disabled)<A HREF=\"%s\">.</A>\n", d, a_url);
    456456    else
    457457        /* disable a hidden action (requires a password, but password is not in squid.conf) */
    458458        if (!strcmp(p, "hidden"))
    459             out.Printf("<LI type=\"circle\">%s (hidden)<A HREF=\"%s\">.</A>\n", d, a_url);
     459            snprintf(html, sizeof(html), "<LI type=\"circle\">%s (hidden)<A HREF=\"%s\">.</A>\n", d, a_url);
    460460        else
    461461            /* disable link if authentication is required and we have no password */
    462462            if (!strcmp(p, "protected") && !req->passwd)
    463                 out.Printf("<LI type=\"circle\">%s (requires <a href=\"%s\">authentication</a>)<A HREF=\"%s\">.</A>\n",
    464                             d, menu_url(req, "authenticate"), a_url);
     463                snprintf(html, sizeof(html), "<LI type=\"circle\">%s (requires <a href=\"%s\">authentication</a>)<A HREF=\"%s\">.</A>\n",
     464                         d, menu_url(req, "authenticate"), a_url);
    465465            else
    466466                /* highlight protected but probably available entries */
    467467                if (!strcmp(p, "protected"))
    468                     out.Printf("<LI type=\"square\"><A HREF=\"%s\"><font color=\"#FF0000\">%s</font></A>\n",
    469                                 a_url, d);
     468                    snprintf(html, sizeof(html), "<LI type=\"square\"><A HREF=\"%s\"><font color=\"#FF0000\">%s</font></A>\n",
     469                             a_url, d);
    470470
    471471    /* public entry or unknown type of protection */
    472472                else
    473                     out.Printf("<LI type=\"disk\"><A HREF=\"%s\">%s</A>\n", a_url, d);
     473                    snprintf(html, sizeof(html), "<LI type=\"disk\"><A HREF=\"%s\">%s</A>\n", a_url, d);
    474474
    475475    xfree(a_url);
    476476
    477477    xfree(buf_copy);
    478 }
    479 
    480 static void
    481 munge_other_line(MemBuf &out, const char *buf, cachemgr_request *)
     478
     479    return html;
     480}
     481
     482static const char *
     483munge_other_line(const char *buf, cachemgr_request * req)
    482484{
    483485    static const char *ttags[] = {"td", "th"};
    484486
     487    static char html[4096];
    485488    static int table_line_num = 0;
    486489    static int next_is_header = 0;
     
    489492    char *buf_copy;
    490493    char *x, *p;
     494    int l = 0;
    491495    /* does it look like a table? */
    492496
    493497    if (!strchr(buf, '\t') || *buf == '\t') {
    494498        /* nope, just text */
    495         if (table_line_num)
    496             out.append("</table>\n<pre>", 14);
    497         out.Printf("%s", html_quote(buf));
     499        snprintf(html, sizeof(html), "%s%s",
     500                 table_line_num ? "</table>\n<pre>" : "", html_quote(buf));
    498501        table_line_num = 0;
    499         return;
     502        return html;
    500503    }
    501504
    502505    /* start html table */
    503506    if (!table_line_num) {
    504         out.append("</pre><table cellpadding=\"2\" cellspacing=\"1\">\n", 46);
     507        l += snprintf(html + l, sizeof(html) - l, "</pre><table cellpadding=\"2\" cellspacing=\"1\">\n");
    505508        next_is_header = 0;
    506509    }
     
    512515
    513516    /* record starts */
    514     out.append("<tr>", 4);
     517    l += snprintf(html + l, sizeof(html) - l, "<tr>");
    515518
    516519    /* substitute '\t' */
     
    529532        }
    530533
    531         out.Printf("<%s colspan=\"%d\" align=\"%s\">%s</%s>",
    532                     ttag, column_span,
    533                     is_header ? "center" : is_number(cell) ? "right" : "left",
    534                     html_quote(cell), ttag);
     534        l += snprintf(html + l, sizeof(html) - l, "<%s colspan=\"%d\" align=\"%s\">%s</%s>",
     535                      ttag, column_span,
     536                      is_header ? "center" : is_number(cell) ? "right" : "left",
     537                      html_quote(cell), ttag);
    535538    }
    536539
    537540    xfree(buf_copy);
    538541    /* record ends */
    539     out.append("</tr>\n", 6);
     542    snprintf(html + l, sizeof(html) - l, "</tr>\n");
    540543    next_is_header = is_header && strstr(buf, "\t\t");
    541544    ++table_line_num;
     545    return html;
    542546}
    543547
     
    696700
    697701        case isBody:
    698         {
    699702            /* interpret [and reformat] cache response */
    700             MemBuf out;
    701             out.init();
     703
    702704            if (parse_menu)
    703                 munge_menu_line(out, buf, req);
     705                fputs(munge_menu_line(buf, req), stdout);
    704706            else
    705                 munge_other_line(out, buf, req);
    706 
    707             fputs(out.buf, stdout);
    708         }
    709         break;
     707                fputs(munge_other_line(buf, req), stdout);
     708
     709            break;
    710710
    711711        case isForward:
Note: See TracChangeset for help on using the changeset viewer.