Skip to content

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.

  • On Windows Agents you can build PCoIP Virtual Channel plugins with Visual Studio 2015 and higher. However, as the PCoIP Agent installation package only installs Visual Studio 2015 re-distributable libraries, it is your responsibility to ensure that required re-distributables are installed, if you choose to build with a different version.
  • You are responsible for providing a mechanism to change run-time variables within plug-ins. The PCoIP Virtual Channel SDK does not provide a built-in mechanism to enable a user or customer to change behavior, for example, using a registry key or config file. -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 you to use the PCoIP Virtual Channel API to access virtual channel functionality, including:

    • init and exit functions, for both server and client, that are called at session startup 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 server and client.
    • init and exit 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, semaphores, and so on, 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.

  • You can implement a PCoIP Virtual Channel plug-in as a single symmetric plug-in, one that is deployed on both client and host, or two asymmetric plug-ins, one implementing client functionality and one host functionality. Note that even a symmetric plug-in may need to be build for different operating systems for the host and client.

  • 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 call pcoip_vchan_recv() in a RECV_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, ABCompany*_.
  • There is no developer PCoIP Virtual Channel support for PCoIP Zero Clients or PCoIP Remote Workstation Card.
  • Every time you install or upgrade PCoIP software, you must also reinstall the plug-ins.
  • 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.
  • All plug-ins in the PCoIP Virtual Channel directory are processed; you cannot specify order.
  • Teradici recommends using the PCoIP Virtual Channel API to log PCoIP Virtual Channel related messages.
  • 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, implement pcoip_vchan_plugin_client_init and pcoip_vchan_plugin_client_exit instead.
  • 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 startup 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 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.

API HTML Documenation

You can view the HTML documentation that Doxygen automatically generates from the source files here: