Posts

Showing posts with the label UPnP

Multiple networks and GUPnP

When GUPnP was first used at Maemo software, one of the first questions I was asked was: Can't GUPnP handle multiple network interfaces just like ClinkC (the now deprecated UPnP framework in Maemo)? The answer to that question was "yes but you have to take care of creating GUPnPContext objects for each network interface yourself" and that wasn't very convenient. This issue, accompanied by the fact that applications had to know when the interfaces go up and down to create and destroy the associated GUPnPContext object themselves, made the lives of application developers not so easy. Recently when this issue was raised on the mailing-list and bugzilla by two different people, I started to think about how to solve this issue. Keeping in view Ross ' advice I came-up with the following solution A GUPnPContextManager class that basically just have two signals: "context-available" and "context-unavailable", that it uses to create/destroy and report

Rygel 0.2.2 is out

Changes since 0.2: - Use the new (0.6.9) Tracker API. - Priority of gio-based streams are based on requested DLNA transfer mode. - GIO-based/like asynchronous plugin API. - Adapt to latest changes in gupnp-vala API. - Serialization of media objects isn't done by media objects themselves anymore, but by a new separate class, Rygel.DIDLLiteWriter. - Internal API is marked 'internal' so it doesn't get to our (Vala) API. - MediaObject now derives from GLib.Object. - Generic AsyncResult implementation, SimpleAsyncResult. - StateMachine interface that all state machines classes implement. - Visible performance improvements in Tracker plugin by proper use of Tracker APIs. - Use Filename.to_string() and therefore make Bastien happy. - Require lastest version (0.1.5) of libgee to use List.slice(). - Don't limit the number of objects returned to a client, let it decide that on it's own. - Proper handling of update notification to the client by use of a very simple bubble-

GSSDP 0.6.4, GUPnP 0.12.6 and GUPnP Vala 0.5.3

GSSDP 0.6.4 released New in this release: - Send ssdp:byebye before sending the first ssdp:alive. [Jussi Kukkonen] - Moderate the outbound SSDP messages. [Jussi Kukkonen] - Documentation fixes. [Jussi Kukkonen] - Send byebyes in dispose without sleep. [Jussi Kukkonen] - Use g_set_error_literal(). [Jorn Baayen] - Depend on glib 2.18. [Jorn Baayen] - Do not byebye unavailable resources. [Jorn Baayen] - All resources must respond to "ssdp:all" messages. [Hugo Calleja, Jorn Baayen] Download from here: http://gupnp.org/sources/ gssdp/gssdp-0.6.4.tar.gz --------------------------------- GUPnP 0.12.6 released: New in this release: - Port to FreeBSD. [Romain Tartière] - Ship the XML files needed for example app. [Romain Tartière] - Keep a reference on the control-point during signal emission. [Sven Neumann] - Allow passing NULL to ControlPoint constructor, for default resource factory. [Sven Neumann] - Remove debug output that accidentally went in with the last commit. [Sven Neumann]

Writing Rygel plugins

While I had been trying my best to make sure writing Rygel plugins is easier than frying eggs before my FOSDEM presentation, I was quite disappointed about how the presentation actually went. I thought I simply lost everyone in there by the end of th presentation and didn't get to make a very good impression. But seems the ease of writing Rygel plugins didn't go unnoticed in that presentation after all since I happen to catch the attention of at least one developer, Jens Georg who is working on two plugins for Rygel and you can follow the progress on his blog .

Rygel update

Image
For the past few weeks I have been cleaning-up and lately re-designing the source code. I am mostly finished with that and I can hopefully focus mostly on functional features piled in my todo now. The biggest change has been that plugins are now loaded into separate Media Servers and allowed to implement all kinds of resources (currently only service implementation is possible) instead of just providing a Media Provider interface. I decided to make it so when I realized that some plugins will need to implement additional services. For example a DVB plugin will want to implement a UPnP ScheduledRecording service rather than just exporting the channels. On a side-note, our brave user (and now a contributor) Florian Steinel has got Rygel working with his PS3 already. According to him all his audio and image files are discovered and played/rendered without any problems but not all of his video files. Yes, there is still room for improvements but I was expecting quite a lot of work on mak

Secure UPnP not a dream anymore

On last friday evening, while thinking about security and UPnP, I realized adding security might not be as hard as one might think. If HTTPS is used instead of HTTP together with authentication, Your neighbor should no longer be able to play his p0rn on your Media Renderer once he/she breaks into your wireless network. Giving it more thought, I then realized it might not be so hard to add this support into GUPnP and I was correct. After a few hours of reading libsoup docs and hacking around this weekend, I managed to add support for HTTPS in GUPnP. Adding authorization doesn't need any changes in GUPnP since we expose both SoupSession and SoupServer so applications can very easily add that there. Also no changes were required in GUPnP for the control points to be able to deal with devices/services using HTTPS instead of HTTP, thanks to libsoup. Here is a bug that you can follow if you are interested in this topic. WARNING : Use of HTTPS and/or authentication is not described in an

Good news for the lazy

Jussi recently commited some major changes to Ross ' gupnp-binding-tool and one of the new features is support for server-side bindings. This makes writing UPnP implementations in C even more easier. So laziness is becoming less and less of an excuse to not write UPnP stuff. :) Here is a nice document with a nice explanation of how to use it.

Claudio has bad memory

Claudio has bad memory so here is my feelings about both of these places in my own words: Meritähti : I really like that place, nice food in a very affordable price. Also it is very near to our office, which makes it the first choice to go to for a meal before we hit another bar for good beers. However, it is most definitely not the best restaurants or bar in Helsinki. Not even one of the best ones. There are lots of very excellent restaurants in the city but of course they charge a lot more. Molly Malone's : That is one of the best bars in Helsinki, lots of nice beers, nice friendly atmosphere and live concert every evening. BTW, Bastien just committed my patch to nautilus-sendto trunk that adds support for sending files to UPnP Media Servers. I've only tested in against Nokia N81 and Media Server provided by Intel tools for UPnP but it should work for most of the Media Servers that support uploading.

GUPnP: achievements and way forward

As most of you probably know already, GUPnP is now officially part of Maemo and therefore future internet tablets. This is a major milestone and gives a big boost to my motivation to continue my UPnP adventure. Although I try to put as much of the bits and peaces of spare time i get from my job into UPnP work and I am pretty sure the Intel (former OH ) will continue their work as well, we could certainly use more hands to accelerate the development. If you want to help, here is a short list of TODOs that you might want to have a look at and decide if you could help on any of these: Bindings : Although the more bindings we have the more worlds we can conquer but what we definitely need is bindings for most popular languages in GNOME/Maemo world, namely C#/mono, Java and Python. If you are interested in helping with this, I strongly suggest you take the g-i-r route . Also if you are only interested in C# bindings, I suggest you talk to Jerome Halton who already have a half-baked solu

Fire in the hole!

Many thanks to Olivier Crête , we now have a nice small library for firing holes through firewalls using a part of UPnP IGD API. This library also provides a convenient way to do all that without having to use a gmainloop. While Olivier will most probably use it in his farsight2 , I am sure this will be useful for other projects (I did not say Ekiga :)) as well.

More Network Light fun

Image
When I wrote GUPnP Network Light, I thought of it as just a simple example application that demonstrates how easy it is to implement UPnP devices and services using GUPnP. However there is one man, Mr. Hugo Baldasano Calleja who being an electrical engineer is very much interested in light bulbs and has recently been writing control point for Network Light. While discussing about his code with him on IRC , I started to wonder how would a simple control point GUI for Network Light look like. I realized that it would look exactly the same as the Network Light itself. Since Hugo had already made it possible for multiple instances of Network Light to co-exist happily on the same network/machine, I decided to turn Network Light GUI to be a Control Point that controls all the Lights on the network, not just itself. The change is already in the trunk and will be released soon. Here is a screenshot:

GUPnP Media Renderer 0.1 released

- Initial release. This is a reference implementation of the UPnP MediaRenderer version 1 device type, written in Vala. For rendering it uses the video widget from libowl-av . GUPnP Media Renderer can be downloaded here

GUPnP Network Camera

This is the announcement of the GUPnP Network Camera project, an implementation of the UPnP Digital Security Camera specification , based on GUPnP. The GUPnP Network Camera package contains applications that enables V4L cameras to be shared on the network as UPnP devices, and control point software for controlling and viewing images from such cameras. The software can be downloaded at: http://www.kristell.se/network-camera/

gupnp-media-server coming soon..

Image
Next on my TODO is a desktop-wide UPnP MediaServer based on tracker . Basically, it will make all of your media availabe to other UPnP devices that is tagged as "shared via UPnP". I already have a working dummy implementation, based on code from Jorn's rhythmbox plugin. I call it "dummy" because ATM it only exports a hardcoded list of media files. Here is a screenshot of Windows Media Player playing music from it using on2share plugin:

GUPnP Tools 0.3 released

Image
This release features AV Control Point, a simple media player UI that enables one to discover and play multimedia contents available on a network. Hopefully a useful tool to test and debug UPnP MediaServer and MediaRenderer implementations. [Zeeshan Ali] Other changes in this release: - Desktop file for each tool. [Ross Burton, Zeeshan Ali] - New Icons. [Vinicius Depizzol] - Various misc improvements and fixes. [Zeeshan Ali] Download from http://gupnp.org/sources/gupnp-tools/gupnp-tools-0.3.tar.gz Here is a screenshot of GUPnP AV CP in action:

Introducing GUPnP A/V

The first release of GUPnP A/V is now available . GUPnP A/V is a small utility library that aims to ease the handling and implementation of UPnP A/V profiles. GUPnP A/V is free software released under the GNU LGPL.

GUPnP 0.8 released

While I was having fun with the extremely slow Internet connection here and other family issues, Jorn rolled-out another GUPnP release . Here is the release announcement: GUPnP 0.8 ========= - New API allowing for subclassing of resource types. [Zeeshan Ali, Jorn Baayen] - GUPnPDeviceInfo returns subresources with version greater or equal than requested version. [Jorn Baayen] - Servers announce versions less or equal than implemented version. [Jorn Baayen] - Make gupnp_context_get_server() public. [Jorn Baayen] - GError arguments added to all error signals. [Jorn Baayen] - Improved resubscription handling. [Jorn Baayen] - Various other fixes and internal improvements [Ross Burton, Zeeshan Ali, Jorn Baayen]. One big reason to roll out a release at this point was to make way for a gupnp-av and gupnp-tools release, which will follow shortly so stay tuned. :)

GUPnP AV CP

Image
They say, a picture is worth a thousand words, so here is the gupnp-av-cp playing a song from my n81 on the coherence media renderer: Many thanks to Frank Scholz and Visa Smolander for helping me in making sense out of UPnP specs, otherwise I still would have been confused on how to implement them. The CP is not yet ready but I will try to complete it before the end of the year 2007. I would like to avail this opportunity to make it very clear to everyone that I have nothing against Coherence project and/or python, in fact I have been using Coherence myself extensively to test my GUPnP code. The reason people get the impression that I am against coherence/python is that I express the following reservations of mine regarding python, quite often and I end-up giving a wrong impression: 1. I do not believe that python is ready for embedded systems yet and vice versa. Both python and embedded systems need some time before they can be happily married. 2. There is also the fact that when I wo

From 28M to 2.7M

Image
As some of you already know, I've been working on a simple AV-specific control-point as part of gupnp-tools. While at it, I've been trying to keep the UPnP AV parts as separate and generic as possible so that they could be move to a separate library later on. One of the first things that everyone wanted to create a nice wrapper for is the ugly DIDL-Lite. Jorn tried his best to convince me and others to not create a GObject for representing each DIDL-Lite object but I didn't listen and ended-up writing a very resource hungry API. To see what i mean, please look at memory usage of gupnp-av-cp after populating it's treeview with the content hierarchy exported by coherence: I was quite sure that most of this 28M is taken by xmlDoc and I was right. Now that I have got rid of xmlDoc usage and replaced the gobjects with an API to deal with xmlNodes, here is how the memory usage looks like: For people who are curious on how this simple AV control-point would look like, here is

GUPnPResourceFactory

As soon as I started to write gupnp-av-cp, I realized that I need to subclass resource (device and service) proxy classes but the resource proxies are created by the control point object on discovery and there was no way of telling control point to create objects of your subclass instead. The obvious solution that comes to mind is to add an API to control point for registering your subclass' gtype against a UPnP resource type. Unfortunately, that won't work since device proxies also create device proxies for embedded proxies and services. So the final solution, which is already implemented and committed to svn is a separate class, GUPnPResourceFactory whose sole responsibility is to create resource and resource proxy objects and to provide an API for registering and unregistering UPnP resource type to gtype assignments. Each GUPnPControlPoint and GUPnPDeviceInfo-derived object is assigned a GUPnPResourceFactory object on creation. You can get a pointer to the factory used by th