Index: net/ftp/ftp_directory_listing_parser_mlsd.cc |
diff --git a/net/ftp/ftp_directory_listing_parser_mlsd.cc b/net/ftp/ftp_directory_listing_parser_mlsd.cc |
deleted file mode 100644 |
index d8ae618f191d6325dfd30e8ffeb72e19e3c9d3a9..0000000000000000000000000000000000000000 |
--- a/net/ftp/ftp_directory_listing_parser_mlsd.cc |
+++ /dev/null |
@@ -1,142 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/ftp/ftp_directory_listing_parser_mlsd.h" |
- |
-#include <map> |
-#include <vector> |
- |
-#include "base/stl_util-inl.h" |
-#include "base/string_number_conversions.h" |
-#include "base/string_split.h" |
-#include "base/string_util.h" |
-#include "base/utf_string_conversions.h" |
- |
-// You can read the specification of the MLSD format at |
-// http://tools.ietf.org/html/rfc3659#page-23. |
- |
-namespace { |
- |
-// The MLSD date listing is specified at |
-// http://tools.ietf.org/html/rfc3659#page-6. |
-bool MlsdDateListingToTime(const string16& text, base::Time* time) { |
- base::Time::Exploded time_exploded = { 0 }; |
- |
- // We will only test 12 characters, but RFC-3659 requires 14 (we ignore the |
- // last two digits, which contain the number of seconds). |
- if (text.length() < 14) |
- return false; |
- |
- if (!base::StringToInt(text.begin(), text.begin() + 4, &time_exploded.year)) |
- return false; |
- if (!base::StringToInt(text.begin() + 4, |
- text.begin() + 6, |
- &time_exploded.month)) |
- return false; |
- if (!base::StringToInt(text.begin() + 6, |
- text.begin() + 8, |
- &time_exploded.day_of_month)) |
- return false; |
- if (!base::StringToInt(text.begin() + 8, |
- text.begin() + 10, |
- &time_exploded.hour)) |
- return false; |
- if (!base::StringToInt(text.begin() + 10, |
- text.begin() + 12, |
- &time_exploded.minute)) |
- return false; |
- |
- // We don't know the time zone of the server, so just use local time. |
- *time = base::Time::FromLocalExploded(time_exploded); |
- return true; |
-} |
- |
-} // namespace |
- |
-namespace net { |
- |
-FtpDirectoryListingParserMlsd::FtpDirectoryListingParserMlsd() {} |
- |
-FtpDirectoryListingParserMlsd::~FtpDirectoryListingParserMlsd() {} |
- |
-bool FtpDirectoryListingParserMlsd::ConsumeLine(const string16& line) { |
- // The first space indicates where the filename begins. |
- string16::size_type first_space_pos = line.find(' '); |
- if (first_space_pos == string16::npos || first_space_pos < 1) |
- return false; |
- |
- string16 facts_string = line.substr(0, first_space_pos - 1); |
- string16 filename = line.substr(first_space_pos + 1); |
- std::vector<string16> facts_split; |
- base::SplitString(facts_string, ';', &facts_split); |
- |
- const char* keys[] = { |
- "modify", |
- "size", |
- "type", |
- }; |
- |
- std::map<std::string, string16> facts; |
- for (std::vector<string16>::const_iterator i = facts_split.begin(); |
- i != facts_split.end(); ++i) { |
- string16::size_type equal_sign_pos = i->find('='); |
- if (equal_sign_pos == string16::npos) |
- return false; |
- string16 key = i->substr(0, equal_sign_pos); |
- string16 value = i->substr(equal_sign_pos + 1); |
- |
- // If we're interested in a key, record its value. Note that we don't detect |
- // a case when the server is sending duplicate keys. We're not validating |
- // the input, just parsing it. |
- for (size_t j = 0; j < arraysize(keys); j++) |
- if (LowerCaseEqualsASCII(key, keys[j])) |
- facts[keys[j]] = value; |
- } |
- if (!ContainsKey(facts, "type")) |
- return false; |
- |
- FtpDirectoryListingEntry entry; |
- entry.name = filename; |
- |
- if (LowerCaseEqualsASCII(facts["type"], "dir")) { |
- entry.type = FtpDirectoryListingEntry::DIRECTORY; |
- entry.size = -1; |
- } else if (LowerCaseEqualsASCII(facts["type"], "file")) { |
- entry.type = FtpDirectoryListingEntry::FILE; |
- if (!ContainsKey(facts, "size")) |
- return false; |
- if (!base::StringToInt64(facts["size"], &entry.size)) |
- return false; |
- } else { |
- // Ignore other types of entries. They are either not interesting for us |
- // (cdir, pdir), or not regular files (OS-specific types). There is no |
- // specific type for symlink. Symlinks get a type of their target. |
- return true; |
- } |
- |
- if (!ContainsKey(facts, "modify")) |
- return false; |
- if (!MlsdDateListingToTime(facts["modify"], &entry.last_modified)) |
- return false; |
- |
- entries_.push(entry); |
- return true; |
-} |
- |
-bool FtpDirectoryListingParserMlsd::OnEndOfInput() { |
- return true; |
-} |
- |
-bool FtpDirectoryListingParserMlsd::EntryAvailable() const { |
- return !entries_.empty(); |
-} |
- |
-FtpDirectoryListingEntry FtpDirectoryListingParserMlsd::PopEntry() { |
- DCHECK(EntryAvailable()); |
- FtpDirectoryListingEntry entry = entries_.front(); |
- entries_.pop(); |
- return entry; |
-} |
- |
-} // namespace net |