
This is Gwenhywfar, a multi-platform helper library for networking and
security applications and libraries. 
It is used by 
 - Libchipcard2 (http://www.libchipcard.de), 
 - OpenHBCI2 (http://www.openhbci.de), 
 - Simthetic, the simulation tool (http://simthetic.sourceforge.net)
 - AqBanking/AqHBCI (http://www.aquamaniac.de/aqbanking/).
 - and others by using one of the projects above



Features
========

This library is written in C, and it follows the object-oriented
programming paradigm for most of its parts.  The header files can
directly be used from C++, too.

Gwenhywfar includes the following features:

- Basic Data types for binary buffers, ring buffers, linked lists, 
  error objects, string lists (src/base/), buffered IO operations (src/io/)

- Macros for typesafe list management

- OS abstraction functions for directory and Internet address handling
  and library loading (src/os/)

- Networking functions which allow to manage many connections to be used
  economically even in single threaded applications

- High-level functions for parsing files with a simplified "XML-like"
  format and accessing them like a hierarchical database (src/parser/)
  It is able to process valid XML files, too.

- High-level cryptographic functions on top of OpenSSL functionality
  (src/crypt/)

- Support for interprocess communication (HTTP on top of SSL or plain
  TCP/UDP sockets, with or without certificates for clients and/or servers)

- Console user-interface (including a simple HTML parser) based on
  ncurses

- A tool to generate simple data containers from XML files. It automatically
  generates getters, setters, constructor, destructor, deep-copy function,
  usage counter handling, modification tracking, functions for reading from 
  and writing to GWEN_DBs (used by AqBanking to create the transaction class)



Requirements
============

- OpenSSL >= 0.9.6x (0.9.7x recommended); this can optionally be
  disabled by the configure switch --disable-ssl
- ncurses (optional, used for user interface library gwenui)



Platforms
=========

Gwenhywfar is being developed on Linux. But the following platforms are also
supported:

- Windows (98, NT and newer; for using this library from Microsoft
  Visual Studio C please see the explanations in test/README.MSVC)

- FreeBSD   
- Linux     (i386, amd64, alpha)
- Mac OS-X  
- NetBSD    (untested, but most likely to work)
- OpenBSD   (untested, but most likely to work)
- SunOS 5.9 (compiles, untested, but most likely to work)

On Windows, an .exe setup program is provided, created with the Inno
Setup Compiler http://www.jrsoftware.org/isdl.php .


Architectures
=============

According to Debian Gwen runs on the following platforms:
- alpha
- amd64
- arm
- hppa
- i386
- ia64
- m68k
- mips
- mipsel
- powerpc
- s390
- sparc



Environment Variables
=====================

"GWEN_MEMORY_DEBUG"
-------------------

This integer variable tells gwen whether (and how) to print the memory
debugger statistic. This only works for sources compiled with the defined
macro GWEN_MEMORY_DEBUG. 
- "0" shows ALL listed objects
- "1" only shows those objects whose count is not 0


"GWEN_SSL_DEBUG"
----------------

If this environment variable exists the SSL code will append data received
via an SSL connection to "/tmp/read.bin" and append data sent via an SSL
connection to /tmp/written.bin".



Registry Keys
=============

On Windows platforms Gwen uses some keys below HKEY_CURRENT_USER
to store information about file/folder locations. The keys are set
in the Inno Setup file gwenhywfar.iss, so please check the
[Registry] section in gwenyhwfar.iss.in for the authoritative
source of available registry keys.

"Software\\Gwenhywfar\\Paths\\dbio-plugins"
-------------------------------------------
Complete path to the folder containing GWENs DBIO plugins.
(and some more keys. See gwenhywfar.iss.in)


WaitCallback Ids
================

GWEN_WAITCALLBACK_ID_SIMPLE_PROGRESS
------------------------------------
This id is not used by Gwenhywfar itself, but it may be used for applications
or plugins which want to display a simple progress widget.
Applications implementing such a callback should display a widget which shows
the text (retrieved via GWEN_WaitCallback_GetText) and a progress bar.


GWEN_WAITCALLBACK_ID_FAST
--------------------------
This id is also not used internally, but it might be used by applications or
plugins for operations which normally do not need a GUI widget.
Implementations might choose to display a widget only after a certain period
of time. E.g. some operations (like network operations) are supposed to be
too fast to show a widget (e.g. normally there is no widget to be displayed).
However, if the operations takes longer than expected the application should
show a widget which contains the text retrieved via GWEN_WaitCallback_GetText
and an abort button.



Documentation
=============

The documentation can be found in the header files. Many header 
files already include extensive comments in doxygen-format (however some 
don't).
For a more or less complete API documentation use the command
"make srcdoc"
You will need the tool doxygen for this command to run.



Contact
=======

For questions about this library please ask on the mailing list of the
OpenHBCI project openhbci-general (subscriber-only, please subscribe
on http://lists.sourceforge.net/lists/listinfo/openhbci-general),
since this is where the author(s) hang out. 



Authors
=======

This library is being written by and is being maintained by Martin
Preuss <martin@libchipcard.de>. 

I also wish to thank Christian Stimming <stimming@tuhh.de> for his
contributions and for adding MSVC support to Gwen (thus making Gwen completely
available on Windows).



Name
====

The name of this library was chosen to honour a very special person ;-)
(that should suffice as an explanation)



Hamburg, Germany 2005/02/15


