char *old_reply;
char *old_filepath;
char typecode;
- MemBuf listing;
+ MemBuf listing; ///< FTP directory listing in HTML format.
// \todo: optimize ctrl and data structs member order, to minimize size
/// FTP control channel info; the channel is opened once per transaction
void scheduleReadControlReply(int);
void handleControlReply();
void readStor();
- char *htmlifyListEntry(const char *line);
void parseListing();
+ MemBuf *htmlifyListEntry(const char *line);
void dataComplete();
void dataRead(const CommIoCbParams &io);
int checkAuth(const HttpHeader * req_hdr);
/* failed() closes ctrl.fd and frees ftpState */
}
-void
-FtpStateData::listingStart()
-{
-}
-
#if DEAD_CODE // obsoleted by ERR_FTP_LISTING template.
void
FtpStateData::listingFinish()
MemBuf *html;
char prefix[2048];
ftpListParts *parts;
- *icon = *href = *text = *size = *chdir = *view = *download = *link = *html = '\0';
+ *icon = *href = *text = *size = *chdir = *view = *download = *link = '\0';
if (strlen(line) > 1024) {
- html->Printf("<tr><td colspan="5">%s</td></tr>\n", line);
+ html = new MemBuf();
+ html->Printf("<tr><td colspan=\"5\">%s</td></tr>\n", line);
return html;
}
parts->size >>= 10;
parts->showname = xstrdup(parts->name);
- if (!Config.Ftp.list_wrap) {
- if (strlen(parts->showname) > width - 1) {
- *(parts->showname + width - 1) = '>';
- *(parts->showname + width - 0) = '\0';
- }
- }
-
/* {icon} {text} . . . {date}{size}{chdir}{view}{download}{link}\n */
xstrncpy(href, rfc1738_escape_part(parts->name), 2048);
html->Printf("<tr class=\"entry\">"
"<td class=\"icon\"><a href=\"%s%s\">%s</a></td>"
"<td class=\"filename\"><a href=\"%s%s\">%s</a></td>"
- "<td class="date">%s</td>"
- "<td class="size\">%s</td>"
+ "<td class=\"date\">%s</td>"
+ "<td class=\"size\">%s</td>"
"<td class=\"actions\">%s%s%s%s</td>"
"</tr>\n",
prefix, href, icon,
char *end;
char *line;
char *s;
- char *t;
+ MemBuf *t;
size_t linelen;
size_t usable;
StoreEntry *e = entry;