FtpServerConnection.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * FtpServerConnection.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "Network/TcpConnection.h"
14 #include <IpAddress.h>
15 #include "WString.h"
16 #include <IFS/FileSystem.h>
17 
24 class CustomFtpServer;
25 class FtpDataStream;
26 
28 {
29  friend class FtpDataStream;
30  friend class CustomFtpServer;
31 
32 public:
33  struct User {
36 
37  bool isValid() const
38  {
39  return role != IFS::UserRole::None;
40  }
41  };
42 
43  static constexpr size_t MAX_FTP_CMD{255};
44 
45  FtpServerConnection(CustomFtpServer& parentServer, tcp_pcb* clientTcp);
46 
47  err_t onReceive(pbuf* buf) override;
48  err_t onSent(uint16_t len) override;
49 
50  void dataTransferFinished(TcpConnection* connection);
51  void dataStreamDestroyed(TcpConnection* connection);
52 
53  const User& getUser() const
54  {
55  return user;
56  }
57 
58  // Get the active filesystem, send an error response if undefined
60 
61  virtual void response(int code, String text = nullptr, char sep = ' ');
62 
63 protected:
64  virtual void onCommand(String cmd, String data);
65 
66  void cmdPort(const String& data);
67  void setDataConnection(FtpDataStream* connection);
68  String resolvePath(const char* name);
69  bool checkFileAccess(const char* filename, IFS::OpenFlags flags);
70 
71 private:
72  CustomFtpServer& server;
73  User user{};
74  CString renameFrom;
75 
76  IpAddress ip;
77  uint16_t port{20};
78  bool readyForData{false};
79  CString cwd;
80  FtpDataStream* dataConnection{nullptr};
81 };
82 
String resolvePath(const char *name)
Definition: FtpServerConnection.h:27
virtual void response(int code, String text=nullptr, char sep=' ')
void dataTransferFinished(TcpConnection *connection)
The String class.
Definition: WString.h:136
IFS::FileSystem * getFileSystem()
FtpServerConnection(CustomFtpServer &parentServer, tcp_pcb *clientTcp)
void cmdPort(const String &data)
static constexpr size_t MAX_FTP_CMD
Definition: FtpServerConnection.h:43
Class to manage a NUL-terminated C-style string When storing persistent strings in RAM the regular St...
Definition: CString.h:26
Definition: FtpDataStream.h:40
Installable File System base class.
Definition: Components/IFS/src/include/IFS/FileSystem.h:39
bool isValid() const
Definition: FtpServerConnection.h:37
const User & getUser() const
Definition: FtpServerConnection.h:53
Manage a set of bit values using enumeration.
Definition: BitSet.h:44
IFS::UserRole role
Definition: FtpServerConnection.h:35
virtual void onCommand(String cmd, String data)
CString name
Definition: FtpServerConnection.h:34
UserRole
Definition: UserRole.h:55
A class to make it easier to handle and pass around IP addresses.
Definition: IpAddress.h:44
Definition: FtpServerConnection.h:33
Definition: TcpConnection.h:39
void setDataConnection(FtpDataStream *connection)
err_t onReceive(pbuf *buf) override
void dataStreamDestroyed(TcpConnection *connection)
bool checkFileAccess(const char *filename, IFS::OpenFlags flags)
Definition: FtpServer.h:23
err_t onSent(uint16_t len) override