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> 39 #include <RCF/ThreadLibrary.hpp> 41 #if RCF_FEATURE_FILETRANSFER==1 42 #include <RCF/FileDownload.hpp> 43 #include <RCF/FileUpload.hpp> 64 HttpCookie(
const std::string& name,
const std::string& value);
69 class RCF_EXPORT CurrentClientStubSentry
72 CurrentClientStubSentry(
ClientStub & clientStub);
73 CurrentClientStubSentry(
ClientStub * pClientStub);
74 ~CurrentClientStubSentry();
84 public ClientTransportCallback,
85 public std::enable_shared_from_this<ClientStub>
90 ClientStub(
const std::string & interfaceName,
const std::string &serverBindingName);
97 void init(
const std::string & interfaceName,
const std::string & serverBindingName);
102 void setInterfaceName(
const std::string & interfaceName);
114 void setServerEndpoint(
const Endpoint &endpoint);
155 void setAutoReconnect(
bool autoReconnect);
158 bool getAutoReconnect()
const;
164 void setConnectTimeoutMs(
unsigned int connectTimeoutMs);
167 unsigned int getConnectTimeoutMs()
const;
172 void instantiateTransport();
175 void setEndpoint(
const Endpoint &endpoint);
199 void setUserName(
const tstring & username);
202 tstring getUserName()
const;
207 void setPassword(
const tstring & password);
210 tstring getPassword()
const;
215 void setKerberosSpn(
const tstring & kerberosSpn);
218 tstring getKerberosSpn()
const;
223 void setEnableCompression(
bool enableCompression);
226 bool getEnableCompression()
const;
243 const std::string & getInterfaceName();
258 void setEnableSfPointerTracking(
bool enable);
261 bool getEnableSfPointerTracking()
const;
268 void setAutoVersioning(
bool autoVersioning);
271 bool getAutoVersioning()
const;
296 void setPingBackIntervalMs(
int pingBackIntervalMs);
299 int getPingBackIntervalMs();
304 void setRemoteCallTimeoutMs(
unsigned int remoteCallTimeoutMs);
307 unsigned int getRemoteCallTimeoutMs()
const;
311 void setRemoteCallProgressCallback(
313 std::uint32_t callbackIntervalMs);
319 const std::string & getServerBindingName()
const;
322 void setServerBindingName(
const std::string &bindingName);
325 #if RCF_FEATURE_FILETRANSFER==1 335 const std::string& downloadId,
336 const Path& downloadPath,
341 std::string& uploadId,
342 const Path& uploadPath,
356 void setRequestUserData(
const std::string & userData);
359 std::string getRequestUserData();
362 void setResponseUserData(
const std::string & userData);
365 std::string getResponseUserData();
373 void setOutofBandRequest(
ByteBuffer requestBuffer);
379 void setOutofBandResponse(
ByteBuffer responseBuffer);
388 void setHttpProxy(
const std::string & httpProxy);
391 std::string getHttpProxy()
const;
394 void setHttpProxyPort(
int httpProxyPort);
397 int getHttpProxyPort()
const;
400 void setHttpProxyUserName(
const tstring & proxyUsername);
403 tstring getHttpProxyUserName()
const;
406 void setHttpProxyPassword(
const tstring & proxyPassword);
409 tstring getHttpProxyPassword()
const;
412 void setHttpProxyRealm(
const tstring & proxyRealm);
415 tstring getHttpProxyRealm()
const;
422 void setHttpCookies(
const std::vector<HttpCookie> & cookies);
425 std::vector<HttpCookie> getHttpCookies()
const;
428 void clearHttpCookies();
437 void setHttpUrlParameterString(
const std::string & urlParameterString);
440 std::string getHttpUrlParameterString()
const;
472 void setOpenSslCipherSuite(
const std::string & cipherSuite);
475 std::string getOpenSslCipherSuite()
const;
478 void setEnableSchannelCertificateValidation(
const tstring & peerName);
481 tstring getEnableSchannelCertificateValidation()
const;
490 void setTlsSniName(
const tstring & serverName);
493 tstring getTlsSniName()
const;
501 #if RCF_FEATURE_SSPI==1 503 void setSchannelEnabledProtocols(DWORD enabledProtocols);
504 DWORD getSchannelEnabledProtocols()
const;
506 void setSchannelContextRequirements(ULONG contextRequirements);
507 ULONG getSchannelContextRequirements()
const;
511 PCtxtHandle getTransportSecurityContext()
const;
515 PCtxtHandle getTransportProtocolSecurityContext()
const;
521 void setWindowsImpersonationToken(HANDLE hToken);
525 HANDLE getWindowsImpersonationToken()
const;
537 void enableBatching();
540 void disableBatching(
bool flush =
true);
543 void flushBatch(
unsigned int timeoutMs = 0);
546 void setMaxBatchMessageLength(std::uint32_t maxBatchMessageLength);
549 std::uint32_t getMaxBatchMessageLength();
552 std::uint32_t getBatchesSent();
555 std::uint32_t getMessagesInCurrentBatch();
566 void connectAsync(std::function<
void()> onCompletion);
572 void waitForReady(std::uint32_t timeoutMs = 0);
578 bool hasAsyncException();
581 std::unique_ptr<Exception> getAsyncException();
586 void wait(std::function<
void()> onCompletion, std::uint32_t timeoutMs);
588 void setTries(std::size_t tries);
589 std::size_t getTries()
const;
591 #if RCF_FEATURE_FILETRANSFER==1 600 const std::string & whichFile,
601 std::string & uploadId,
602 std::uint32_t chunkSize,
603 std::uint32_t transferRateBps,
604 std::uint32_t sessionLocalId);
607 const FileManifest & whichFile,
608 std::string & uploadId,
609 std::uint32_t chunkSize,
610 std::uint32_t transferRateBps,
611 std::uint32_t sessionLocalId);
614 const Path& downloadToPath,
615 FileManifest & manifest,
616 std::uint32_t chunkSize,
617 std::uint32_t transferRateBps,
618 std::uint32_t sessionLocalId,
619 const std::string & downloadId,
620 std::uint64_t startPos = 0,
621 std::uint64_t endPos = -1);
623 std::uint32_t addUploadStream(FileUpload fileStream);
624 void processUploadStreams();
626 std::uint32_t addDownloadStream(FileDownload fileStream);
629 void setTransferWindowS(std::uint32_t transferWindowS);
630 std::uint32_t getTransferWindowS();
637 const CallOptions & callOptions,
644 std::size_t getPingBackCount();
645 std::uint32_t getPingBackTimeStamp();
647 void clearParameters();
649 SerializationProtocolIn & getSpIn();
650 SerializationProtocolOut & getSpOut();
652 void setAsync(
bool async);
655 void setAsyncException(std::unique_ptr<Exception>);
657 std::uint32_t generatePollingTimeout(std::uint32_t timeoutMs);
658 void onPollingTimeout(
bool eventBased =
false);
661 void setSubRcfClientPtr(RcfClientPtr clientStubPtr);
662 RcfClientPtr getSubRcfClientPtr();
664 void setEnableNativeWstringSerialization(
bool enable);
665 bool getEnableNativeWstringSerialization()
const;
667 friend class CallOptions;
671 friend class FutureConverterBase;
672 friend class FutureImplBase;
691 friend class AllocateClientParameters;
710 friend class ClientParameters;
731 void onConnectCompleted(
732 bool alreadyConnected =
false);
734 void setupTransportProtocol();
735 void onSetupTransportProtocolCompleted();
739 void onSendCompleted();
741 void onReceiveCompleted();
743 void onTimerExpired();
746 const std::exception &e);
748 void setAsyncCallback(
749 std::function<
void()> callback);
754 void scheduleAmiNotification();
756 void createFilterSequence(std::vector<FilterPtr> & filters);
758 void setConnected(
bool connected);
760 virtual bool isClientStub()
const;
768 void requestTransportFilters(
const std::vector<FilterPtr> &filters);
769 void requestTransportFilters(FilterPtr filterPtr);
770 void requestTransportFilters();
772 void clearTransportFilters();
775 void requestTransportFiltersAsync(
776 const std::vector<FilterPtr> & filters,
777 std::function<
void()> onCompletion);
779 void requestTransportFiltersAsync(
781 std::function<
void()> onCompletion);
783 void setMessageFilters(
const std::vector<FilterPtr> &filters);
784 void setMessageFilters();
785 void setMessageFilters(FilterPtr filterPtr);
787 const std::vector<FilterPtr> &getMessageFilters();
789 std::vector<char> & getRetValVec();
792 void setupProxiedConnection(
const std::string& proxyEndpointName);
795 std::string mProxyEndpointName;
801 std::string mEndpointName;
802 std::string mServerBindingName;
803 std::string mInterfaceName;
805 unsigned int mRemoteCallTimeoutMs;
806 unsigned int mConnectTimeoutMs;
814 std::vector<FilterPtr> mMessageFilters;
817 unsigned int mProgressCallbackIntervalMs = 0;
820 bool mAutoVersioning;
821 std::uint32_t mRuntimeVersion;
822 std::uint32_t mArchiveVersion;
824 bool mEnableSfPointerTracking;
825 bool mEnableNativeWstringSerialization =
false;
827 std::vector<I_Future *> mFutures;
829 MethodInvocationRequest mRequest;
830 SerializationProtocolIn mIn;
831 SerializationProtocolOut mOut;
834 AsyncOpType mAsyncOpType;
835 std::function<void()> mAsyncCallback;
836 std::unique_ptr<Exception> mAsyncException;
837 unsigned int mEndTimeMs;
841 std::vector<ByteBuffer> mEncodedByteBuffers;
843 std::vector<char> mRetValVec;
844 std::vector<char> mParametersVec;
845 I_Parameters * mpParameters;
847 std::uint32_t mPingBackIntervalMs;
848 std::uint32_t mPingBackTimeStamp;
849 std::size_t mPingBackCount;
851 std::uint32_t mNextTimerCallbackMs;
852 std::uint32_t mNextPingBackCheckMs;
853 std::uint32_t mPingBackCheckIntervalMs;
855 MutexPtr mSignalledMutexPtr;
856 ConditionPtr mSignalledConditionPtr;
857 LockPtr mSignalledLockPtr;
861 Mutex mSubRcfClientMutex;
862 RcfClientPtr mSubRcfClientPtr;
865 ReallocBufferPtr mBatchBufferPtr;
866 ReallocBuffer mBatchBufferTemp;
867 std::uint32_t mBatchMaxMessageLength;
868 std::uint32_t mBatchCount;
869 std::uint32_t mBatchMessageCount;
872 bool mSetTransportProtocol;
875 #if RCF_FEATURE_FILETRANSFER==1 878 std::vector<FileUpload> mUploadStreams;
879 std::vector<FileDownload> mDownloadStreams;
882 std::uint32_t mTransferWindowS;
884 RecursionState<int, int> mRecursionState;
888 std::string mCurrentCallMethodName;
889 std::string mCurrentCallDesc;
890 bool mCallInProgress;
894 std::unique_ptr<HANDLE> mWindowsImpersonationToken;
898 std::string mHttpProxy;
900 tstring mHttpProxyRealm;
901 std::map<std::string, HttpCookie> mHttpCookies;
905 tstring mHttpProxyUsername;
906 tstring mHttpProxyPassword;
907 std::string mHttpUrlParameterString;
908 tstring mKerberosSpn;
909 bool mEnableCompression;
915 tstring mSchannelCertificateValidation;
917 std::string mOpenSslCipherSuite;
923 #if RCF_FEATURE_SSPI==1 924 DWORD mSchannelEnabledProtocols = 0;
925 ULONG mSchannelContextRequirements = 0;
929 friend class HttpFrameFilter;
930 std::map<std::string, HttpCookie> & getCookieMap();
933 void requestTransportFilters_Legacy(
const std::vector<FilterPtr> &filters);
935 void requestTransportFiltersAsync_Legacy(
936 const std::vector<FilterPtr> &filters,
937 std::function<
void()> onCompletion);
940 class RCF_EXPORT CallOptions
945 CallOptions(
RemoteCallMode rcs,
const std::function<
void()> & callback);
946 CallOptions(std::function<
void()> callback);
953 std::function<void()> mCallback;
956 class RCF_EXPORT AsyncTwoway :
public CallOptions
959 AsyncTwoway(
const std::function<
void()> & callback);
962 class RCF_EXPORT AsyncOneway :
public CallOptions
965 AsyncOneway(
const std::function<
void()> & callback);
968 class RestoreClientTransportGuard
973 ~RestoreClientTransportGuard();
982 #endif // ! INCLUDE_RCF_CLIENTSTUB_HPP SspiMessageProtection
Definition: Enums.hpp:207
RCF_FILESYSTEM_NS::path Path
Typedef for standard C++ path type.
Definition: FileSystem.hpp:32
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:84
Client side options for downloading and uploading files.
Definition: FileStream.hpp:371
Controls the client side of a RCF connection.
Definition: ClientStub.hpp:83
std::shared_ptr< Endpoint > EndpointPtr
Reference counted wrapper for RCF::Endpoint.
Definition: RcfFwd.hpp:118
std::shared_ptr< Certificate > CertificatePtr
Reference counted wrapper for RCF::Certificate.
Definition: RcfFwd.hpp:109
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:44
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:115
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
std::function< void(const FileTransferProgress &, RemoteCallAction &)> FileProgressCallback
Describes user-provided callback functions for client-side monitoring of a file transfer (download or...
Definition: RcfFwd.hpp:132
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...
std::shared_ptr< HttpMessageVerifier > HttpMessageVerifierPtr
Reference counted wrapper for RCF::HttpMessageVerifier.
Definition: HttpFrameFilter.hpp:61
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
Represents an HTTP cookie, with a name and value.
Definition: ClientStub.hpp:60
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...
std::function< void(const std::string &statusLine, const HttpHeaderList &headerList)> HttpRedirectHandler
Describes a user-provided function for handling HTTP redirect responses when connecting to a HTTP/HTT...
Definition: RcfFwd.hpp:334
RCF_EXPORT bool init(RcfConfigT *=nullptr)
Reference-counted initialization of RCF library. May be called multiple times (see deinit())...
Describes progress of a file download or upload.
Definition: FileStream.hpp:266