1 #ifndef __PORT_FORWARD_SOURCE_LISTENER_H__
2 #define __PORT_FORWARD_SOURCE_LISTENER_H__
3 
4 #include "Headers.hpp"
5 
6 #include "ETerminal.pb.h"
7 #include "SocketHandler.hpp"
8 
9 namespace et {
10 class PortForwardSourceHandler {
11  public:
12   PortForwardSourceHandler(shared_ptr<SocketHandler> _socketHandler,
13                            int _sourcePort, int _destinationPort);
14 
15   int listen();
16 
17   void update(vector<PortForwardData>* data);
18 
19   bool hasUnassignedFd(int fd);
20 
21   void closeUnassignedFd(int fd);
22 
23   void addSocket(int socketId, int sourceFd);
24 
25   void closeSocket(int socketId);
26 
27   void sendDataOnSocket(int socketId, const string& data);
28 
getDestinationPort()29   inline int getDestinationPort() { return destinationPort; }
30 
31  protected:
32   shared_ptr<SocketHandler> socketHandler;
33   int sourcePort;
34   int destinationPort;
35   unordered_set<int> unassignedFds;
36   unordered_map<int, int> socketFdMap;
37 };
38 }  // namespace et
39 
40 #endif  // __PORT_FORWARD_SOURCE_LISTENER_H__
41