Faspstream Manager C/C++ API  3.6.1
A C and C++ language interface to basic streaming over the fasp protocol
FaspStreamServer.h
Go to the documentation of this file.
1 /*
2  * Aspera, Inc.
3  *
4  * C++ only.
5  *
6  * A FaspStreamServer is used to listen for a faspstream
7  * client to connect to it and send/recv data.
8  *
9  * You can set many of the faspstream configuration parameters
10  * using the FaspStreamServer'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/Process.h>
20 #include <Poco/SharedPtr.h>
21 #include <Poco/Thread.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 public:
65  FASPSTREAM_CPP_API FaspStreamServer(const std::string& appId,
66  FaspConnectionChannel *channel = NULL);
84  FASPSTREAM_CPP_API bool startServer(bool killChild = false);
119 
120  /*---------- Faspstream Configuration ----------*/
121 
123  const std::string& faspstreamPath);
124  FASPSTREAM_CPP_API std::string getFaspstreamPath() const;
125  FASPSTREAM_CPP_API int getPort() const;
126  FASPSTREAM_CPP_API void setPort(int tcpPort);
127  FASPSTREAM_CPP_API int getMaxMemory() const;
128  FASPSTREAM_CPP_API void setMaxMemory(int maxMem);
129  FASPSTREAM_CPP_API std::string getUsername() const;
130  FASPSTREAM_CPP_API int getUdpPort() const;
131  FASPSTREAM_CPP_API void setUdpPort(int port);
133  FASPSTREAM_CPP_API void setDatagramSize(int size);
134  FASPSTREAM_CPP_API int getChunkSize() const;
135  FASPSTREAM_CPP_API void setChunkSize(int size);
136  FASPSTREAM_CPP_API std::string getHostname() const;
137  FASPSTREAM_CPP_API void setHostname(const std::string& name);
138  FASPSTREAM_CPP_API int getRateTarget() const ;
139  FASPSTREAM_CPP_API void setRateTarget(int target);
142  FASPSTREAM_CPP_API bool isLockTarget() const;
143  FASPSTREAM_CPP_API void setLockTarget(bool target);
145  FASPSTREAM_CPP_API void setRateMinimum(int minimum);
146  FASPSTREAM_CPP_API bool isLockMinimum() const;
147  FASPSTREAM_CPP_API void setLockMinimum(bool lockMin);
150  FASPSTREAM_CPP_API bool isLockPolicy() const;
151  FASPSTREAM_CPP_API void setLockPolicy(bool lock);
153  FASPSTREAM_CPP_API void setAggressiveness(int aggressive);
155  FASPSTREAM_CPP_API void setForceSendMilliseconds(int milliseconds);
158  FASPSTREAM_CPP_API void setLogDirectory(std::string logDirectory);
159  FASPSTREAM_CPP_API std::string getLogDirectory() const;
160  FASPSTREAM_CPP_API void setCommandToExecute(std::string commandToExecute);
161  FASPSTREAM_CPP_API std::string getCommandToExecute() const;
162  FASPSTREAM_CPP_API void setLicense(std::string commandToExecute);
163  FASPSTREAM_CPP_API std::string getLicense() const;
164  FASPSTREAM_CPP_API void setAcceptTimeout(int timeout);
166 
167 
173  std::vector<std::string> getCommandline() const;
174 
190  void registerLogCallback(log_callback_f log_function);
191 
192 private:
193  /*
194  * Private members are mostly configuration settings
195  */
196  Poco::SharedPtr<Poco::ProcessHandle> _ph;
197  Poco::Pipe _inPipe;
198  Poco::Pipe _outPipe;
199  Poco::Pipe _errPipe;
200  FaspInputStream _fis;
201  FaspOutputStream _fos;
202 
203  int _port;
204  int _datagramSize;
205  int _chunkSize;
206  std::string _hostname;
207  int _rateTarget;
208  FASPSTREAM_CIPHER_TYPE _cipherType;
209  bool _lockTarget;
210  int _rateMinimum;
211  bool _lockMinimum;
212  FASPSTREAM_POLICY_TYPE _policy;
213  bool _lockPolicy;
214  int _aggressiveness;
215  int _udpPort;
216  int _maxMemory;
217  std::string _faspstreamPath;
218  std::string _errorString;
219  bool _subprocessDied;
220  int _forceSendMilliseconds;
221  FASPSTREAM_TRANSFER_MODE_TYPE _transferMode;
222  std::string _logDirectory;
223  std::string _commandToExecute;
224  std::string _appId;
225  std::string _license;
226  int _acceptTimeout;
227  /*
228  * Faspstream channel / out-of-band data
229  */
230  FaspConnectionChannel* _channel;
231  Poco::Thread* _thread;
232  ChannelHandler* _handler;
233 
234  void invoke_faspstream();
235  void startChannelSocketListener();
236  void check_faspstream();
237 
238  log_callback_f _log_callback;
239  void log(std::string logEntry);
240  void logStdErr();
241 };
FASPSTREAM_CPP_API FaspStreamServer(const std::string &appId, FaspConnectionChannel *channel=NULL)
void registerLogCallback(log_callback_f log_function)
Definition: FaspInputStream.h:36
FASPSTREAM_CPP_API FaspOutputStream & getFaspOutputStream()
FASPSTREAM_CPP_API void setChunkSize(int size)
FASPSTREAM_CPP_API void setDatagramSize(int size)
FASPSTREAM_CPP_API int getRateMinimum() const
FASPSTREAM_CPP_API ~FaspStreamServer()
FASPSTREAM_CPP_API void setLockMinimum(bool lockMin)
FASPSTREAM_CPP_API int getForceSendMilliseconds() const
Definition: FaspOutputStream.h:38
FASPSTREAM_CPP_API FASPSTREAM_CIPHER_TYPE getCipherType() const
FASPSTREAM_CPP_API int getAggressiveness() const
FASPSTREAM_CPP_API void setRateTarget(int target)
FASPSTREAM_CPP_API int getRateTarget() const
FASPSTREAM_CPP_API int getPort() const
FASPSTREAM_POLICY_TYPE
Definition: fasp_stream_constants.h:25
FASPSTREAM_CPP_API void setLicense(std::string commandToExecute)
FASPSTREAM_CPP_API void setAggressiveness(int aggressive)
FASPSTREAM_CPP_API bool startServer(bool killChild=false)
FASPSTREAM_CPP_API int getChunkSize() const
FASPSTREAM_CPP_API void setFaspstreamPath(const std::string &faspstreamPath)
FASPSTREAM_CPP_API void setCommandToExecute(std::string commandToExecute)
FASPSTREAM_CPP_API std::string getHostname() const
FASPSTREAM_CPP_API void setLogDirectory(std::string logDirectory)
FASPSTREAM_CPP_API void setHostname(const std::string &name)
FASPSTREAM_CPP_API void setTransferMode(FASPSTREAM_TRANSFER_MODE_TYPE transferMode)
FASPSTREAM_CPP_API int getUdpPort() const
FASPSTREAM_CPP_API int getDatagramSize() const
FASPSTREAM_CPP_API int getAcceptTimeout() const
Definition: FaspStreamServer.h:47
FASPSTREAM_CPP_API void setMaxMemory(int maxMem)
FASPSTREAM_CPP_API FASPSTREAM_POLICY_TYPE getPolicy() const
Definition: ChannelHandler.h:16
FASPSTREAM_CPP_API std::string getLicense() const
FASPSTREAM_CPP_API void setCipherType(FASPSTREAM_CIPHER_TYPE type)
FASPSTREAM_CPP_API void setForceSendMilliseconds(int milliseconds)
#define FASPSTREAM_CPP_API
Definition: FaspStreamServer.h:38
FASPSTREAM_CPP_API void setPolicy(FASPSTREAM_POLICY_TYPE newPolicy)
FASPSTREAM_CPP_API void setRateMinimum(int minimum)
FASPSTREAM_CPP_API std::string getCommandToExecute() const
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 FASPSTREAM_TRANSFER_MODE_TYPE getTransferMode() const
FASPSTREAM_CPP_API FaspInputStream & getFaspInputStream()
FASPSTREAM_CPP_API void setLockTarget(bool target)
FASPSTREAM_CPP_API void setLockPolicy(bool lock)
FASPSTREAM_CPP_API std::string getLogDirectory() const
FASPSTREAM_CPP_API bool isLockPolicy() const
FASPSTREAM_CPP_API bool isLockMinimum() const
FASPSTREAM_CPP_API void setUdpPort(int port)
std::vector< std::string > getCommandline() const
FASPSTREAM_CPP_API std::string getFaspstreamPath() const
void(* log_callback_f)(char const *s)
Definition: fasp_stream_constants.h:67
FASPSTREAM_CPP_API bool isLockTarget() const
FASPSTREAM_CPP_API void setAcceptTimeout(int timeout)
FASPSTREAM_CPP_API std::string getUsername() const
FASPSTREAM_CPP_API int getMaxMemory() const
FASPSTREAM_CPP_API void cleanup()
FASPSTREAM_CPP_API void setPort(int tcpPort)