{"id":116,"date":"2011-05-02T00:58:49","date_gmt":"2011-05-01T22:58:49","guid":{"rendered":"http:\/\/blogs.igalia.com\/elima\/?p=116"},"modified":"2016-10-20T13:09:01","modified_gmt":"2016-10-20T11:09:01","slug":"eventdance-0-1-4-released","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/elima\/2011\/05\/02\/eventdance-0-1-4-released\/","title":{"rendered":"EventDance 0.1.4 released"},"content":{"rendered":"<p>During Easter holidays, I finally managed to find time to close <a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\">EventDance<\/a> 0.1.3 development cycle and release 0.1.4. This milestone took more than expected for several reasons, mainly due to some last minute API changes I had to introduce and a couple of features I couldn&#8217;t resist to implement earlier. The result is a long changelog that I will try to summarize:<\/p>\n<ul>\n<li><b>Basic API for asymmetric (public-key) cryptography<\/b>\n<p><a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-pki-pubkey.h\">EvdPkiPubkey<\/a> and <a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-pki-privkey.h\">EvdPkiPrivkey<\/a> classes provide abstraction for PKI public and private key respectively. They basically are asynchronous, <a href=\"https:\/\/developer.gnome.org\/gio\/2.28\/\">GIO<\/a>-friendly wrappers for <a href=\"https:\/\/directory.fsf.org\/project\/libgcrypt\/\">libgcrypt<\/a> PK functions. There is also API for asynchronous key-pair generation. By now, only encryption\/decryption using <a href=\"https:\/\/en.wikipedia.org\/wiki\/RSA\">RSA<\/a> algorithm is supported.<\/p>\n<\/li>\n<li><b>Basic API for symmetric cryptography<\/b>\n<p><a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-tls-cipher.h\">EvdTlsCipher<\/a> also provides an asynchronous, GIO-friendly wrapper for libcrypt symmetric crypto API, adding some nice features like data auto-padding and key aligning built right in. Not all algorithms supported by libgcrypt are available but only the most popular (e.g, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Advanced_Encryption_Standard\">AES<\/a> 128\/192\/256, <a href=\"https:\/\/en.wikipedia.org\/wiki\/RC4\">ARCFOUR<\/a>).<\/p>\n<\/li>\n<li><b><a href=\"https:\/\/en.wikipedia.org\/wiki\/Server_Name_Indication\">SNI<\/a> and lazy certificate selection for TLS credentials<\/b>\n<p>Server Name Indication is a SSL\/TLS extension that permits a client to request the domain name before the certificate is committed to the server. This feature is available in <a href=\"https:\/\/www.gnu.org\/software\/gnutls\/\">GnuTLS<\/a> and is now exported to <a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-tls-session.h\">EvdTlsSession<\/a>. Also, <a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-tls-credentials.h\">EvdTlsCredentials<\/a> added a callback to select the certificate to send to the peer during the TLS handshake. The combination of these two features is critical to implement an SSL\/TLS capable reverse Web proxy. I&#8217;m seriously considering to include one such proxy inside EventDance, that would export a D-Bus API over the system bus to allow applications to easily add\/remove virtual hosts and server backends on-the-fly.<\/p>\n<\/li>\n<li><b><a href=\"https:\/\/en.wikipedia.org\/wiki\/WebSockets\">Websockets<\/a> mechanism into <a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-web-transport.h\">EvdWebTransport<\/a><\/b>\n<p>Now the web transport negotiates mechanism with the browser during handshake and uses websockets if supported, otherwise falls back to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Push_technology#Long_polling\">long-polling<\/a>. Only <a href=\"https:\/\/tools.ietf.org\/html\/draft-hixie-thewebsocketprotocol-76\">version 76<\/a> (hybi-00) of the spec is implemented so far.<\/p>\n<\/li>\n<li><b><a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-dbus-bridge.h\">EvdDBusBridge<\/a><\/b>\n<p>A component to connect a web page to a D-Bus message bus running in the server, allowing client-side Web applications to proxy\/export objects and acquire bus names. Check <a href=\"https:\/\/blogs.free-social.net\/elima\/2011\/03\/19\/the-web-jumps-into-d-bus\/\">my previous post<\/a> introducing this feature for details<\/p>\n<\/li>\n<li><b><a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-jsonrpc.h\">EvdJsonrpc<\/a><\/b>\n<p>An asynchronous, GIO-friendly implementation of the <a href=\"https:\/\/json-rpc.org\/wiki\/specification\">JSON-RPC protocol version 1.0<\/a>, specifically designed to work well with EventDance transports.<\/p>\n<\/li>\n<li><b><a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-daemon.h\">EvdDaemon<\/a><\/b>\n<p>An abstraction for any program that runs as a service daemon. The purpose is that if you are implementing a daemon, you just use an EvdDaemon instance and automagically get an event-loop (GMainLoop), pid-file management, syslog-based logging, daemonizing (console detaching) and clean program termination. The pid-file and syslog functionalities are still on the way though.<\/p>\n<\/li>\n<li><b><a href=\"https:\/\/gitorious.org\/eventdance\/eventdance\/blobs\/master\/evd\/evd-dbus-daemon.h\">EvdDBusDaemon<\/a><\/b>\n<p>A component that launches a custom D-Bus message bus and tracks its execution. This is useful when an application needs to use a custom message bus instead of the well-known ones; for security or sandboxing reasons.<\/p>\n<\/li>\n<\/ul>\n<p>\nAlso, as usual, lots of bugfixes and random improvements. A dependency on <a href=\"https:\/\/live.gnome.org\/JsonGlib\">json-glib<\/a> was added too.\n<\/p>\n<p>\nNow and for the next weeks, I&#8217;m running a documentation and annotations sprint, something I have delayed too much already. I will also write a couple of basic tutorials on how to build and use EventDance. Stay tuned.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>During Easter holidays, I finally managed to find time to close EventDance 0.1.3 development cycle and release 0.1.4. This milestone took more than expected for several reasons, mainly due to some last minute API changes I had to introduce and a couple of features I couldn&#8217;t resist to implement earlier. The result is a long &hellip; <a href=\"https:\/\/blogs.igalia.com\/elima\/2011\/05\/02\/eventdance-0-1-4-released\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;EventDance 0.1.4 released&#8221;<\/span><\/a><\/p>\n","protected":false},"author":34,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,6,7],"tags":[73,41],"class_list":["post-116","post","type-post","status-publish","format-standard","hentry","category-eventdance","category-hacking","category-igalia","tag-eventdance","tag-release"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/comments?post=116"}],"version-history":[{"count":3,"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":452,"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/posts\/116\/revisions\/452"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/media?parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/categories?post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/elima\/wp-json\/wp\/v2\/tags?post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}