Guidelines for Implementing PCoIP Virtual Channel Plug-Ins¶
The following section lists guidelines, best practices, recommendations, and warnings for solution developers who wish to implement plug-ins:
Do not modify the ~\VChan_SDK\inc folder
This folder is used directly within the PCoIP executable and must not be modified.
Info
VChan plugins should be signed by a trusted authority. Unsigned plugins risk being denied loading if a policy is enforced, either by HP Anyware or another process, that prevents the execution of the unsigned code.
General Notes¶
-
Every time you install or upgrade the Anyware software, you must also reinstall the plug-ins.
-
All plug-ins in the PCoIP Virtual Channel directory are processed; you cannot specify order.
-
We recommend using the PCoIP Virtual Channel API to log PCoIP Virtual Channel related messages.
-
Although PCoIP Virtual Channel plug-in speed can exceed 10 Mbps, overall throughput rates depend on network bandwidth and other PCoIP traffic, especially video and audio traffic.
Guidelines Related to Platforms¶
-
On Windows, the PCoIP Virtual Channel plug-in is implemented as a .dll file that is loaded by the PCoIP Virtual Channel Loader process at session start-up using a Windows Registry entry. The PCoIP Virtual Channel Loader process is run as one of several different users depending on the deployment. This may affect the privilege level available to you. The current schema is:
-
For Omnissa (VMware) Horizon View Agent, the process runs as SYSTEM in the user's session number with impersonation rights.
-
For other platforms, such as Amazon Workspaces, the process runs as USER in the user's session number.
-
On Windows Agents, you can build PCoIP Virtual Channel plugins with Visual Studio 2015 or higher. However, as the Anyware Agent installation package only installs Visual Studio 2015 re-distributable libraries, you must ensure that the required re-distributable libraries are installed, if you choose to build with a different version.
-
There is no developer PCoIP Virtual Channel support for Zero Clients or Remote Workstation Card.
-
Due to an iOS limitation, the client library can only link with PCoIP Virtual Channel plug-ins that are built as static libraries. You must implement the two functions in the static plug-ins:
-
pcoip_vchan_plugin_client_init_<plugin_name>
-
pcoip_vchan_plugin_client_exit_<plugin_name>
Where<plugin_name>
is a unique name that identifies the plug-in. For other platforms, implementpcoip_vchan_plugin_client_init
andpcoip_vchan_plugin_client_exit
instead.
Implementation Guidelines¶
-
You can implement a PCoIP Virtual Channel plug-in in the following ways:
-
As a single symmetric plug-in,
-
As plug-ins that are deployed on both the client and the host, or
-
Two asymmetric plug-ins, one implementing client functionality and the other, the host functionality.
-
Note that a symmetric plug-in may need to be built for different operating systems for the host and client.
-
You can build a plug-in implemented as a Windows
.dll
file, a Linux.so
file, an Android.mk
file, or an iOS or Android library. This enables the use of PCoIP Virtual Channel API to access virtual channel functionality, including: -
init
andexit
functions, for both server and client that are called at session start-up and session exit when the plug-in is coded and built. This is a pre-requisite to enable the subsequent installation of the plug-in on the server and client respectively. -
init
andexit
functions within the plug-in and the exposed API that the plug-in uses to access the PCoIP Virtual Channel plug-in services. -
init
functions that allocate resources, such as threads and semaphores, to implement the autonomous processing and functionality for server and client endpoints. -
plug-in exit
functions that release resources and tidy up the processing to prepare for terminating the session.
Build plug-ins for all deployed host and client operating systems
A PCoIP Virtual Channel plug-in should be built for all host and client operating systems on which it is to be deployed.
Configuration Guidelines¶
-
You must provide a mechanism to change run-time variables within plug-ins. The PCoIP Virtual Channel SDK does not provide a built-in mechanism, such as a registry key or config file, to enable a user or customer to change behavior.
-
Do not mix streaming and datagram API calls on a single channel.
-
To avoid degrading the performance of virtual channel handling, avoid processing within a callback as that blocks or requires extensive processing. Do not use PCoIP Virtual Channel plug-ins to call any PCoIP Virtual Channel APIs in the context of the event/channel callback.
For example, don’t callpcoip_vchan_recv()
in aRECV_RDY
event callback. Use callback implementations only to set an event (or equivalent) to trigger a separate thread to do processing and data transfers. -
If you use the datagram API, use the supplied API call to check the maximum datagram size. Never exceed the maximum datagram size. If you need larger transfers, use the streaming API.
-
Set up unreliable transport virtual channels by requesting a reliable virtual channel with the appropriate configuration option. For details, see the API documentation and the sample
u_echo
virtual channel plug-in. -
To avoid potential channel name conflicts, prefix the channel names in your implementations with the company name, for example, ACMECompany.
API HTML Documentation¶
The HTML documentation that Doxygen automatically generates from the source files is available here:
\VChan_SDK\SDK\doc\html\index.html
.