Hi, I have faced exactly the same situation as Daryl Poe posted with the above subject on 2012-06-12, because I am working for a company, that builds a Linux OS, and I had to integrate FreeRDP. Even if I have implemented such a functionality, the circumstance of being just rudimentary avoids its universal usage. However I think, I can mention some general aspects, which I have learned from this implementation. Maybe some of them might be a proposal.
At a first step, it seems to be adequate to implement two new optional FreeRDP commandline parameters (--from-gui and --to-gui). The option --from-gui is only used to trigger the user authentification analog to the option --from-stdin, whereas the option --to-gui enables the rest of GUI utilization. This approach is required to not break the utilization of the option --from-stdin, which is for example needed by the VMware client, and maybe also by REMMINA. So there should be then the configuration possibility to realize the authentication via VMware client, while error messages or other user requests like certificate accepting are shown via GUI. At a second step, a message specific library (libfreerdp-msg) seems to be needed in the FreeRDP project, which has to feature globally available functions encapsulating all user messages. This library might have also a special header file defining all messages. These messages might include the utilization of meta-characters for formatting. Further on GETTEXT might be used additionally to enable the internationalization of all messages (multi-language functionality). By the way, this statically linked library has to implement an initialization function, which can be then used later by the consecutive library libfreerdp-ui to implement needed functionality. So the key features of this extra library can be summarized by: * Encapsulation of meta-formatted user messages used in the entire FreeRDP source code * Internationalization of the messages At a third step, an UI specific library (libfreerdp-ui) seems to be needed in the FreeRDP project, which has to feature the real user interface. This library has to use obviously for default the console output and input to interact with the user. In this situation, it is clear that the meta-characters, which are used to format the message, have to be interpreted somehow. Besides this, the initialization function of this also statically linked library, which is obviously connected to the initialization function of the library libfreerdp-msg, can be used to attempt to dynamically open another library featuring the GUI and load the corresponding function symbols. So in this context, it is immediately clear that the GUI library is strongly connected to the FreeRDP project, because the GUI library is absolutely required to export the correct function symbols with regard to the FreeRDP requirements. However this strong connection defines just an API and not a dependency, because the GUI library can be built completely independent of the FreeRDP project. This means, that everybody can implement a GUI by the utilization of this API in whatever graphical toolkit is preferred. And if the name of this dynamic library could be set via cmake parameter, even the name of the GUI library would be simply customizable (This functionality would be gratefully used by me, because I can then use an OS wide GUI library). Of course, it is also clear that the GUI library has to interpret the meta-characters, which are used to format the message, but almost ever a GUI will do it different in comparison to the console due to the available possibilities. So the key features of this extra library can be summarized by: * Feature a standard user interface via console output and input * Feature the dynamic utilization of a GUI library via dlopen and dlsym Coming now to the GUI library itself, I decided to use the zenity project. This project seems to be perfectly adaptable at a first glance by simply splitting the main executable from the dialogs, which have to be put then in a library. However this approach gets more and more complicated, because the fact that each dialog prints to the console requires the restructuring of the entire dialog interfaces. Consequentially I could not avoid the violation of the zenity implementation paradigms. Nevertheless I get finally the dialogs I need to work, but also just rudimentary. As a requirement of me is defined by keeping the modifications to this newly generated zenity library as small as possible, the need for a fourth library arises, which simply connects the zenity library interface to the libfreerdp-ui interface. For my perspective, I had additionally implemented the interface of this library to be usable in C as well as C++, so that I can use this library OS wide. The only consequence of this situation is then defined by requiring the library libfreerdp-ui to use only standard data types. Maybe this information is useful to get some progress into this topic. Best regards, Christian -- *Dr. Christian Steinle*** System Architect Linux OS Unicon Software GmbH Philipp-Reis-Str. 1 76137 Karlsruhe Germany Tel. +49 (0)721 96451-0 Fax +49 (0)721 96451-43 Email: christian.stei...@unicon-software.com <mailto:christian.stei...@unicon-software.com> Web: www.unicon-software.com <http://www.unicon-software.com> This communication contains information that is confidential, proprietary in nature and/or privileged. It is for the exclusive use of the intended recipient(s). If you are not the intended recipient(s) or the person responsible for delivering it to the intended recipient(s), please note that any form of dissemination, distribution or copying of this communication is strictly prohibited and may be unlawful. If you have received this communication in error, please immediately notify the sender and delete the original communication. Thank you for your cooperation. ------------------------------------------------------------------------------ Minimize network downtime and maximize team effectiveness. Reduce network management and security costs.Learn how to hire the most talented Cisco Certified professionals. Visit the Employer Resources Portal http://www.cisco.com/web/learning/employer_resources/index.html _______________________________________________ Freerdp-devel mailing list Freerdp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel