Faspstream Manager C/C++ API  3.6.1
A C and C++ language interface to basic streaming over the fasp protocol
FaspStreamClient.h
Go to the documentation of this file.
1 /*
2  * Aspera, Inc.
3  *
4  * C++ only.
5  *
6  * A FaspStreamClient is used to connect to a faspstream
7  * server and send/receive data from it.
8  *
9  * You can set many of the faspstream configuration parameters
10  * using the FaspStreamClient's interface.
11  *
12  * See the samples for typical usage.
13  */
14 #pragma once
15 
16 #include <string>
17 #include <vector>
18 
19 #include <Poco/Thread.h>
20 #include <Poco/Process.h>
21 #include <Poco/SharedPtr.h>
22 
23 #include "Constants.h"
24 #include "FaspInputStream.h"
25 #include "FaspOutputStream.h"
26 #include "FaspConnectionChannel.h"
27 #include "ChannelHandler.h"
28 
29 #ifdef WIN32
30 
31 #ifdef FASPSTREAM_CPP_EXPORTS
32 #define FASPSTREAM_CPP_API __declspec(dllexport)
33 #else
34 #define FASPSTREAM_CPP_API __declspec(dllimport)
35 #endif
36 
37 #else // NOT WIN32
38 #define FASPSTREAM_CPP_API
39 #endif
40 
48 {
49 
50 public:
66  FASPSTREAM_CPP_API FaspStreamClient(const std::string& appId,
67  FaspConnectionChannel *channel = NULL);
80  FASPSTREAM_CPP_API bool connect(const std::string& host);
115 
116  /*---------- Faspstream Configuration ----------*/
117 
118  FASPSTREAM_CPP_API const std::string& getUsername() const;
119  FASPSTREAM_CPP_API int getMaxMemory() const;
120  FASPSTREAM_CPP_API void setMaxMemory(int maxMem);
121  FASPSTREAM_CPP_API int getUdpPort() const;
122  FASPSTREAM_CPP_API void setUdpPort(int port);
123  FASPSTREAM_CPP_API int getPort() const;
124  FASPSTREAM_CPP_API void setPort(int tcpPort);
126  FASPSTREAM_CPP_API void setDatagramSize(int size);
127  FASPSTREAM_CPP_API int getChunkSize() const;
128  FASPSTREAM_CPP_API void setChunkSize(int size);
129  FASPSTREAM_CPP_API const std::string& getHostname() const;
130  FASPSTREAM_CPP_API void setHostname(const std::string& name);
131  FASPSTREAM_CPP_API int getRateTarget() const ;
132  FASPSTREAM_CPP_API void setRateTarget(int target);
135  FASPSTREAM_CPP_API bool isLockTarget() const;
136  FASPSTREAM_CPP_API void setLockTarget(bool target);
138  FASPSTREAM_CPP_API void setRateMinimum(int minimum);
139  FASPSTREAM_CPP_API bool isLockMinimum() const;
140  FASPSTREAM_CPP_API void setLockMinimum(bool lockMin);
143  FASPSTREAM_CPP_API bool isLockPolicy() const;
144  FASPSTREAM_CPP_API void setLockPolicy(bool lock);
146  FASPSTREAM_CPP_API void setAggressiveness(int aggressive);
147  FASPSTREAM_CPP_API const std::string& getFaspstreamPath() const;
148  FASPSTREAM_CPP_API void setFaspstreamPath(const std::string& path);
150  FASPSTREAM_CPP_API void setForceSendMilliseconds(int milliseconds);
153  FASPSTREAM_CPP_API void setPrivateKeyFile(const std::string& privateKeyFile);
154  FASPSTREAM_CPP_API const std::string& getPrivateKeyFile() const;
155  FASPSTREAM_CPP_API void setSSHUser(const std::string& sshUser);
156  FASPSTREAM_CPP_API const std::string& getSSHUser() const;
157  FASPSTREAM_CPP_API void setLogDirectory(const std::string& logDirectory);
158  FASPSTREAM_CPP_API const std::string& getLogDirectory() const;
159  FASPSTREAM_CPP_API void setCommandToExecute(const std::string& commandToExecute);
160  FASPSTREAM_CPP_API const std::string& getCommandToExecute() const;
161  FASPSTREAM_CPP_API void setLicense(std::string commandToExecute);
162  FASPSTREAM_CPP_API std::string getLicense() const;
163 
169  FASPSTREAM_CPP_API std::vector<std::string> getCommandline() const;
170 
186  void registerLogCallback(log_callback_f log_function);
187 
188 private:
189  /*
190  * Private members are mostly configuration settings
191  */
192  Poco::SharedPtr<Poco::ProcessHandle> _ph;
193  Poco::Pipe _inPipe;
194  Poco::Pipe _outPipe;
195  Poco::Pipe _errPipe;
196  FaspInputStream _fis;
197  FaspOutputStream _fos;
198 
199  int _port;
200  int _datagramSize;
201  int _chunkSize;
202  std::string _hostname;
203  int _rateTarget;
204  FASPSTREAM_CIPHER_TYPE _cipherType;
205  bool _lockTarget;
206  int _rateMinimum;
207  bool _lockMinimum;
208  FASPSTREAM_POLICY_TYPE _policy;
209  bool _lockPolicy;
210  int _aggressiveness;
211  int _udpPort;
212  int _maxMemory;
213  std::string _faspstreamPath;
214  std::string _errorString;
215  bool _subprocessDied;
216  int _forceSendMilliseconds;
217  FASPSTREAM_TRANSFER_MODE_TYPE _transferMode;
218  std::string _sshUser;
219  std::string _privateKeyFile;
220  std::string _commandToExecute;
221  std::string _logDirectory;
222  std::string _appId;
223  std::string _license;
224  /*
225  * Faspstream channel / out-of-band data
226  */
227  FaspConnectionChannel* _channel;
228  Poco::Thread* _thread;
229  ChannelHandler* _handler;
230 
231  void invoke_faspstream();
232  void startChannelSocketListener();
233  void check_faspstream();
234 
235  log_callback_f _log_callback;
236  void log(std::string logEntry);
237  void logStdErr();
238 };
FASPSTREAM_CPP_API FaspStreamClient(const std::string &appId, FaspConnectionChannel *channel=NULL)
FASPSTREAM_CPP_API void setSSHUser(const std::string &sshUser)
FASPSTREAM_CPP_API FASPSTREAM_TRANSFER_MODE_TYPE getTransferMode() const
Definition: FaspInputStream.h:36
FASPSTREAM_CPP_API void setLockTarget(bool target)
FASPSTREAM_CPP_API FASPSTREAM_CIPHER_TYPE getCipherType() const
FASPSTREAM_CPP_API const std::string & getPrivateKeyFile() const
Definition: FaspOutputStream.h:38
FASPSTREAM_CPP_API void setHostname(const std::string &name)
FASPSTREAM_CPP_API void setChunkSize(int size)
FASPSTREAM_CPP_API int getRateMinimum() const
FASPSTREAM_CPP_API int getDatagramSize() const
FASPSTREAM_CPP_API void setLockMinimum(bool lockMin)
FASPSTREAM_CPP_API const std::string & getCommandToExecute() const
Definition: FaspStreamClient.h:47
FASPSTREAM_CPP_API void setAggressiveness(int aggressive)
FASPSTREAM_POLICY_TYPE
Definition: fasp_stream_constants.h:25
FASPSTREAM_CPP_API void setLockPolicy(bool lock)
FASPSTREAM_CPP_API FaspOutputStream & getFaspOutputStream()
FASPSTREAM_CPP_API void setLicense(std::string commandToExecute)
FASPSTREAM_CPP_API void setMaxMemory(int maxMem)
FASPSTREAM_CPP_API bool isLockPolicy() const
FASPSTREAM_CPP_API ~FaspStreamClient()
FASPSTREAM_CPP_API const std::string & getSSHUser() const
FASPSTREAM_CPP_API const std::string & getLogDirectory() const
FASPSTREAM_CPP_API int getRateTarget() const
#define FASPSTREAM_CPP_API
Definition: FaspStreamClient.h:38
FASPSTREAM_CPP_API void setLogDirectory(const std::string &logDirectory)
FASPSTREAM_CPP_API const std::string & getHostname() const
Definition: ChannelHandler.h:16
FASPSTREAM_CPP_API void setRateMinimum(int minimum)
FASPSTREAM_CPP_API int getMaxMemory() const
FASPSTREAM_CPP_API int getUdpPort() const
FASPSTREAM_CPP_API int getAggressiveness() const
FASPSTREAM_CPP_API int getForceSendMilliseconds() const
FASPSTREAM_CPP_API bool isLockMinimum() const
FASPSTREAM_CPP_API void setTransferMode(FASPSTREAM_TRANSFER_MODE_TYPE transferMode)
FASPSTREAM_CPP_API std::string getLicense() const
FASPSTREAM_CPP_API void setPrivateKeyFile(const std::string &privateKeyFile)
FASPSTREAM_TRANSFER_MODE_TYPE
Definition: fasp_stream_constants.h:46
Definition: FaspConnectionChannel.h:33
FASPSTREAM_CIPHER_TYPE
Definition: fasp_stream_constants.h:37
FASPSTREAM_CPP_API bool connect(const std::string &host)
FASPSTREAM_CPP_API void setRateTarget(int target)
FASPSTREAM_CPP_API const std::string & getFaspstreamPath() const
FASPSTREAM_CPP_API bool isLockTarget() const
FASPSTREAM_CPP_API FASPSTREAM_POLICY_TYPE getPolicy() const
FASPSTREAM_CPP_API int getPort() const
FASPSTREAM_CPP_API void setForceSendMilliseconds(int milliseconds)
FASPSTREAM_CPP_API void setUdpPort(int port)
FASPSTREAM_CPP_API void cleanup()
void(* log_callback_f)(char const *s)
Definition: fasp_stream_constants.h:67
FASPSTREAM_CPP_API std::vector< std::string > getCommandline() const
FASPSTREAM_CPP_API void setDatagramSize(int size)
FASPSTREAM_CPP_API void setFaspstreamPath(const std::string &path)
FASPSTREAM_CPP_API FaspInputStream & getFaspInputStream()
FASPSTREAM_CPP_API void setCipherType(FASPSTREAM_CIPHER_TYPE type)
FASPSTREAM_CPP_API void setPort(int tcpPort)
FASPSTREAM_CPP_API int getChunkSize() const
FASPSTREAM_CPP_API const std::string & getUsername() const
void registerLogCallback(log_callback_f log_function)
FASPSTREAM_CPP_API void setPolicy(FASPSTREAM_POLICY_TYPE newPolicy)
FASPSTREAM_CPP_API void setCommandToExecute(const std::string &commandToExecute)