21 #ifndef INCLUDE_RCF_CLIENTSTUB_HPP 22 #define INCLUDE_RCF_CLIENTSTUB_HPP 29 #include <RCF/ClientTransport.hpp> 31 #include <RCF/Export.hpp> 33 #include <RCF/MethodInvocation.hpp> 34 #include <RCF/SerializationProtocol_Base.hpp> 36 #include <RCF/RecursionLimiter.hpp> 37 #include <RCF/SerializationProtocol.hpp> 40 #if RCF_FEATURE_FILETRANSFER==1 41 #include <RCF/FileDownload.hpp> 42 #include <RCF/FileUpload.hpp> 55 class RCF_EXPORT CurrentClientStubSentry
58 CurrentClientStubSentry(ClientStub & clientStub);
59 CurrentClientStubSentry(ClientStub * pClientStub);
60 ~CurrentClientStubSentry();
70 public ClientTransportCallback,
71 public std::enable_shared_from_this<ClientStub>
76 ClientStub(
const std::string & interfaceName,
const std::string &serverBindingName);
83 void init(
const std::string & interfaceName,
const std::string & serverBindingName);
88 void setInterfaceName(
const std::string & interfaceName);
100 void setServerEndpoint(
const Endpoint &endpoint);
141 void setAutoReconnect(
bool autoReconnect);
144 bool getAutoReconnect()
const;
150 void setConnectTimeoutMs(
unsigned int connectTimeoutMs);
153 unsigned int getConnectTimeoutMs()
const;
158 void instantiateTransport();
161 void setEndpoint(
const Endpoint &endpoint);
185 void setUserName(
const tstring & username);
188 tstring getUserName()
const;
193 void setPassword(
const tstring & password);
196 tstring getPassword()
const;
201 void setKerberosSpn(
const tstring & kerberosSpn);
204 tstring getKerberosSpn()
const;
209 void setEnableCompression(
bool enableCompression);
212 bool getEnableCompression()
const;
223 const std::string & getServantBindingName()
const;
226 void setServantBindingName(
const std::string &bindingName);
229 const std::string & getInterfaceName();
244 void setEnableSfPointerTracking(
bool enable);
247 bool getEnableSfPointerTracking()
const;
254 void setAutoVersioning(
bool autoVersioning);
257 bool getAutoVersioning()
const;
282 void setPingBackIntervalMs(
int pingBackIntervalMs);
285 int getPingBackIntervalMs();
290 void setRemoteCallTimeoutMs(
unsigned int remoteCallTimeoutMs);
293 unsigned int getRemoteCallTimeoutMs()
const;
297 void setRemoteCallProgressCallback(
299 std::uint32_t callbackIntervalMs);
305 const std::string & getServerBindingName()
const;
308 void setServerBindingName(
const std::string &bindingName);
311 #if RCF_FEATURE_FILETRANSFER==1 321 const std::string& downloadId,
322 const Path& downloadPath,
327 std::string& uploadId,
328 const Path& uploadPath,
342 void setRequestUserData(
const std::string & userData);
345 std::string getRequestUserData();
348 void setResponseUserData(
const std::string & userData);
351 std::string getResponseUserData();
359 void setOutofBandRequest(
ByteBuffer requestBuffer);
365 void setOutofBandResponse(
ByteBuffer responseBuffer);
374 void setHttpProxy(
const std::string & httpProxy);
377 std::string getHttpProxy()
const;
380 void setHttpProxyPort(
int httpProxyPort);
383 int getHttpProxyPort()
const;
386 void setHttpProxyUserName(
const tstring & proxyUsername);
389 tstring getHttpProxyUserName()
const;
392 void setHttpProxyPassword(
const tstring & proxyPassword);
395 tstring getHttpProxyPassword()
const;
398 void setHttpProxyRealm(
const tstring & proxyRealm);
401 tstring getHttpProxyRealm()
const;
423 void setOpenSslCipherSuite(
const std::string & cipherSuite);
426 std::string getOpenSslCipherSuite()
const;
429 void setEnableSchannelCertificateValidation(
const tstring & peerName);
432 tstring getEnableSchannelCertificateValidation()
const;
446 #if RCF_FEATURE_SSPI==1 448 void setSchannelEnabledProtocols(DWORD enabledProtocols);
449 DWORD getSchannelEnabledProtocols()
const;
451 void setSchannelContextRequirements(ULONG contextRequirements);
452 ULONG getSchannelContextRequirements()
const;
456 PCtxtHandle getTransportSecurityContext()
const;
460 PCtxtHandle getTransportProtocolSecurityContext()
const;
466 void setWindowsImpersonationToken(HANDLE hToken);
470 HANDLE getWindowsImpersonationToken()
const;
482 void enableBatching();
485 void disableBatching(
bool flush =
true);
488 void flushBatch(
unsigned int timeoutMs = 0);
491 void setMaxBatchMessageLength(std::uint32_t maxBatchMessageLength);
494 std::uint32_t getMaxBatchMessageLength();
497 std::uint32_t getBatchesSent();
500 std::uint32_t getMessagesInCurrentBatch();
511 void connectAsync(std::function<
void()> onCompletion);
517 void waitForReady(std::uint32_t timeoutMs = 0);
523 bool hasAsyncException();
526 std::unique_ptr<Exception> getAsyncException();
531 void wait(std::function<
void()> onCompletion, std::uint32_t timeoutMs);
533 void setTries(std::size_t tries);
534 std::size_t getTries()
const;
536 #if RCF_FEATURE_FILETRANSFER==1 544 const std::string & whichFile,
545 std::string & uploadId,
546 std::uint32_t chunkSize,
547 std::uint32_t transferRateBps,
548 std::uint32_t sessionLocalId);
551 const FileManifest & whichFile,
552 std::string & uploadId,
553 std::uint32_t chunkSize,
554 std::uint32_t transferRateBps,
555 std::uint32_t sessionLocalId);
558 const Path& downloadToPath,
559 FileManifest & manifest,
560 std::uint32_t chunkSize,
561 std::uint32_t transferRateBps,
562 std::uint32_t sessionLocalId,
563 const std::string & downloadId,
564 std::uint64_t startPos = 0,
565 std::uint64_t endPos = -1);
567 std::uint32_t addUploadStream(FileUpload fileStream);
568 void processUploadStreams();
570 std::uint32_t addDownloadStream(FileDownload fileStream);
573 void setTransferWindowS(std::uint32_t transferWindowS);
574 std::uint32_t getTransferWindowS();
581 const CallOptions & callOptions,
588 std::size_t getPingBackCount();
589 std::uint32_t getPingBackTimeStamp();
591 void clearParameters();
593 SerializationProtocolIn & getSpIn();
594 SerializationProtocolOut & getSpOut();
596 void setAsync(
bool async);
599 void setAsyncException(std::unique_ptr<Exception>);
601 std::uint32_t generatePollingTimeout(std::uint32_t timeoutMs);
602 void onPollingTimeout();
605 void setSubRcfClientPtr(RcfClientPtr clientStubPtr);
606 RcfClientPtr getSubRcfClientPtr();
608 void setEnableNativeWstringSerialization(
bool enable);
609 bool getEnableNativeWstringSerialization()
const;
611 friend class CallOptions;
615 friend class FutureConverterBase;
616 friend class FutureImplBase;
635 friend class AllocateClientParameters;
654 friend class ClientParameters;
675 void onConnectCompleted(
676 bool alreadyConnected =
false);
678 void onRequestTransportFiltersCompleted();
682 void onSendCompleted();
684 void onReceiveCompleted();
686 void onTimerExpired();
689 const std::exception &e);
691 void setAsyncCallback(
692 std::function<
void()> callback);
697 void scheduleAmiNotification();
699 void createFilterSequence(std::vector<FilterPtr> & filters);
701 void setConnected(
bool connected);
703 virtual bool isClientStub()
const;
711 void requestTransportFilters(
const std::vector<FilterPtr> &filters);
712 void requestTransportFilters(FilterPtr filterPtr);
713 void requestTransportFilters();
715 void clearTransportFilters();
718 void requestTransportFiltersAsync(
719 const std::vector<FilterPtr> & filters,
720 std::function<
void()> onCompletion);
722 void requestTransportFiltersAsync(
724 std::function<
void()> onCompletion);
726 void setMessageFilters(
const std::vector<FilterPtr> &filters);
727 void setMessageFilters();
728 void setMessageFilters(FilterPtr filterPtr);
730 const std::vector<FilterPtr> &getMessageFilters();
732 std::vector<char> & getRetValVec();
738 std::string mEndpointName;
739 std::string mServerBindingName;
740 std::string mInterfaceName;
742 unsigned int mRemoteCallTimeoutMs;
743 unsigned int mConnectTimeoutMs;
751 std::vector<FilterPtr> mMessageFilters;
754 unsigned int mProgressCallbackIntervalMs = 0;
757 bool mAutoVersioning;
758 std::uint32_t mRuntimeVersion;
759 std::uint32_t mArchiveVersion;
761 bool mEnableSfPointerTracking;
762 bool mEnableNativeWstringSerialization =
false;
764 std::vector<I_Future *> mFutures;
766 MethodInvocationRequest mRequest;
767 SerializationProtocolIn mIn;
768 SerializationProtocolOut mOut;
771 AsyncOpType mAsyncOpType;
772 std::function<void()> mAsyncCallback;
773 std::unique_ptr<Exception> mAsyncException;
774 unsigned int mEndTimeMs;
778 std::vector<ByteBuffer> mEncodedByteBuffers;
780 std::vector<char> mRetValVec;
781 std::vector<char> mParametersVec;
782 I_Parameters * mpParameters;
784 std::uint32_t mPingBackIntervalMs;
785 std::uint32_t mPingBackTimeStamp;
786 std::size_t mPingBackCount;
788 std::uint32_t mNextTimerCallbackMs;
789 std::uint32_t mNextPingBackCheckMs;
790 std::uint32_t mPingBackCheckIntervalMs;
792 MutexPtr mSignalledMutexPtr;
793 ConditionPtr mSignalledConditionPtr;
794 LockPtr mSignalledLockPtr;
798 Mutex mSubRcfClientMutex;
799 RcfClientPtr mSubRcfClientPtr;
802 ReallocBufferPtr mBatchBufferPtr;
803 ReallocBuffer mBatchBufferTemp;
804 std::uint32_t mBatchMaxMessageLength;
805 std::uint32_t mBatchCount;
806 std::uint32_t mBatchMessageCount;
809 bool mSetTransportProtocol;
812 #if RCF_FEATURE_FILETRANSFER==1 815 std::vector<FileUpload> mUploadStreams;
816 std::vector<FileDownload> mDownloadStreams;
819 std::uint32_t mTransferWindowS;
821 RecursionState<int, int> mRecursionState;
825 std::string mCurrentCallDesc;
826 bool mCallInProgress;
830 std::unique_ptr<HANDLE> mWindowsImpersonationToken;
834 std::string mHttpProxy;
836 tstring mHttpProxyRealm;
840 tstring mHttpProxyUsername;
841 tstring mHttpProxyPassword;
842 tstring mKerberosSpn;
843 bool mEnableCompression;
848 tstring mSchannelCertificateValidation;
850 std::string mOpenSslCipherSuite;
854 #if RCF_FEATURE_SSPI==1 855 DWORD mSchannelEnabledProtocols = 0;
856 ULONG mSchannelContextRequirements = 0;
861 void requestTransportFilters_Legacy(
const std::vector<FilterPtr> &filters);
863 void requestTransportFiltersAsync_Legacy(
864 const std::vector<FilterPtr> &filters,
865 std::function<
void()> onCompletion);
868 class RCF_EXPORT CallOptions
873 CallOptions(
RemoteCallMode rcs,
const std::function<
void()> & callback);
874 CallOptions(std::function<
void()> callback);
881 std::function<void()> mCallback;
884 class RCF_EXPORT AsyncTwoway :
public CallOptions
887 AsyncTwoway(
const std::function<
void()> & callback);
890 class RCF_EXPORT AsyncOneway :
public CallOptions
893 AsyncOneway(
const std::function<
void()> & callback);
896 class RestoreClientTransportGuard
901 ~RestoreClientTransportGuard();
910 #endif // ! INCLUDE_RCF_CLIENTSTUB_HPP RCF_FILESYSTEM_NS::path Path
Typedef for standard C++ path type.
Definition: FileSystem.hpp:35
RCF_EXPORT std::uint32_t getArchiveVersion()
Gets the RCF archive version number.
Base class of all RcfClient<> templates.
Definition: RcfClient.hpp:45
std::function< void(const RemoteCallProgressInfo &, RemoteCallAction &)> RemoteCallProgressCallback
Describes a user-provided callback function to be called periodically on the client side...
Definition: RcfFwd.hpp:83
Client side options for downloading and uploading files.
Definition: FileStream.hpp:371
Controls the client side of a RCF connection.
Definition: ClientStub.hpp:69
std::shared_ptr< Endpoint > EndpointPtr
Reference counted wrapper for RCF::Endpoint.
Definition: RcfFwd.hpp:117
std::shared_ptr< Certificate > CertificatePtr
Reference counted wrapper for RCF::Certificate.
Definition: RcfFwd.hpp:108
std::function< void(const FileTransferProgress &)> FileProgressCallback
Describes user-provided callback functions for client-side monitoring of a file transfer (download or...
Definition: RcfFwd.hpp:131
SerializationProtocol
Describes which serialization implementation to use when serializing data structures for a remote cal...
Definition: Enums.hpp:167
std::unique_ptr< ClientTransport > ClientTransportUniquePtr
Unique pointer wrapper for RCF::ClientTransport.
Definition: RcfFwd.hpp:43
Base class for all client transports.
Definition: ClientTransport.hpp:75
std::function< bool(Certificate *)> CertificateValidationCallback
Describes user-provided callback functions for validating a certificate.
Definition: RcfFwd.hpp:114
RemoteCallMode
Remote call mode.
Definition: Enums.hpp:141
Provides the ability for remote calls to be executed asynchronously.
Definition: Future.hpp:51
Base class for all RCF exceptions.
Definition: Exception.hpp:64
RCF_EXPORT void setArchiveVersion(std::uint32_t version)
Sets the RCF archive version number. Applies to all RCF clients and servers within the current proces...
RCF_EXPORT std::uint32_t getRuntimeVersion()
Gets the RCF runtime version number.
SslImplementation
Describes which SSL implementation to use.
Definition: Enums.hpp:85
Utility class used by RCF to determine whether a remote call should be performed synchronously or asy...
Definition: Future.hpp:35
Base class for all network endpoint types.
Definition: Endpoint.hpp:41
Base class for IP-based client transports. Provides IP-related functionality.
Definition: IpClientTransport.hpp:28
Definition: ByteBuffer.hpp:40
TransportProtocol
Describes the transport protocols used by a RCF connection. Transport protocols are layered on top of...
Definition: Enums.hpp:63
Definition: AmiIoHandler.hpp:24
TransportType
Describes the transport types used by a RCF connection.
Definition: Enums.hpp:34
RCF_EXPORT void setRuntimeVersion(std::uint32_t version)
Sets the RCF runtime version number. Applies to all RCF clients and servers within the current proces...
RCF_EXPORT bool init(RcfConfigT *=nullptr)
Reference-counted initialization of RCF library. May be called multiple times (see deinit())...