1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be
33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_FTP_FTP_DIRECTORY_LISTING_PARSER_H_
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_FTP_FTP_DIRECTORY_LISTING_PARSER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string>
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <vector>
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h"
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/string16.h"
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/time.h"
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net {
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstruct FtpDirectoryListingEntry {
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  enum Type {
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    FILE,
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DIRECTORY,
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    SYMLINK,
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  };
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FtpDirectoryListingEntry();
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  Type type;
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  string16 name;  // Name (UTF-16-encoded).
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string raw_name;  // Name in original character encoding.
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  int64 size;  // File size, in bytes. -1 if not applicable.
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Last modified time, in local time zone.
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  base::Time last_modified;
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Parses an FTP directory listing |text|. On success fills in |entries|.
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Returns network error code.
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint ParseFtpDirectoryListing(const std::string& text,
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             const base::Time& current_time,
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             std::vector<FtpDirectoryListingEntry>* entries);
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace net
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_FTP_FTP_DIRECTORY_LISTING_PARSER_H_
45