Saturday, June 14, 2008

A look at the evolution of the Saitek SST Software for the X52 Pro

pencil icon, that"s clickable to start editing the post

In this blogpost I'll have a closer look at the diffenrent versions of SST software for the Saitek X52 Pro - it's a followup on my ealier post Game profile files for the Saitek X52 Pro Flight System. For those who are experiencing problems a just wants to get goint go to the part about the latest driver and SST software

. The main purpose is to get a better idea of what and when.

Release dates

I just bought min recently but when was it released? Dunno for sure but at Amazon it has been available since January 9, 2007:

Product Info from Amazon with the first available date

The pro version is based on the predecessor the X52 (normal) which was available for purcase on Amazon on September 15, 2004:

X52 Purchase info on Amazon

So the drivers and software has had more the 1½ year to consolidate which shuld be flenty of time. The often mentioned X52 (normal) with which the old format was used is soon 4 years old.

The original software

The driver DVD that came with the controller contains most importantly a driver, SST software and DirectX. It's not exactly new (by date) and for WinXP only, but then again Vista was launching just about that time and I probably got my hands on one from the first shipments. Here's the content overview:

The specific driver is in D:\WinXP\Drivers\0762:

Notice that there's a .pr0 file in the folder. I can reveal that it's the older version in XML, though I'm puzzled why it's there since the SST software only supports the .dat format.

As for the DirectX it's 2 major versions behind - 8.1:

The SST software that came with the DVD

The SST Software on the driver DVD is version 4.3.4.17:

With a nice 3D view mode of the two controllers :

Note: for an even better and static overview see geoffp's layout images in the forum post X52 Pro Profile Graphic Goodness. The SST software also have a tabular overview mode:

And the Saitek DirectOutput for the Multi Functional Display (MFD) is version 5.7.0.24:

Upgrading

Ugrading the drivers can be done through Windows Update or by download, whereas the SST software has to be downloaded manually for upgrad, and is needed to work with the newer drivers. The Sitek public FTP server has the following version available, do note that I don't exactly know the chronologic of them:

ftp://ftp.saitek.com/pub/software/x52pro/

File: sst_191206_32.exe       19677 KB     13:18:00
File: sst_191206_64.exe      19787 KB   13:23:00
File: x52pro_171006_32.exe      3244 KB   11:16:00
File: x52pro_171006_64.exe      3407 KB   11:17:00

ftp://ftp.saitek.com/pub/software/beta. See UKSupport forum post from 27th April 2007, on New Beta Drivers and Software for Windows Vista and XP:

File: Saitek_X52Pro_Flight_Controller_SD6_32_beta2.exe   4068 KB     17:18:00
File: Saitek_X52Pro_Flight_Controller_SD6_64_beta2.exe   4125 KB   17:19:00

Here you'll also get a newer DirectOutput with version 6.0.4.1:

The driver will also be updated but the SST software is not installed. behelith has a workaround by manually running C:\WINDOWS\Temp\Saitek\Saitek_Cyborg_Command_Unit_ SD6_32_Software\00000006\software_loc_9.msi.

ftp://ftp.saitek.com/pub/software/xpvista

File: Saitek_X52Pro_Flight_Controller_SD6_16_32_Drivers.exe   4065 KB     16:08:00
File: Saitek_X52Pro_Flight_Controller_SD6_16_64_Drivers.exe  4124 KB   16:09:00

And finally the versions that you'll get through their driver download wizard at ftp://ftp.saitek.com/pub/software/full/:

File: Saitek_X52Pro_Flight_Controller_SD6_32.exe    4180 KB     10:46:00
File: Saitek_X52Pro_Flight_Controller_SD6_32_Software.exe  17350 KB   10:56:00
File: Saitek_X52Pro_Flight_Controller_SD6_64.exe   4260 KB   10:46:00
File: Saitek_X52Pro_Flight_Controller_SD6_64_Software_.exe  18672 KB   10:57:00

The DirectOutput is now 6.2.2.4 and after manually running the english version (this time in another folder C:\WINDOWS\Temp\Saitek\Saitek_X52Pro_Flight_Controller_SD6_32_Software\00000013\software_loc_9.msi, the software versions are in sync:

SST Software - latest version

SO upgrading to the latest version bumps up two major versions to 6.2.2.4 as can be seen in ex. the Control panel:

And no, the link to The lastest version of the SST Software isn't a direct reference. The software now only has the tabular mode and not the 3D view, which is fine with me since I now have the graphics goodness.

The X52 Pro Flight System driver

Another thing that puzzles me is that with the ealier version you would also get the virtual Magic entries for mouse, keyboard and Hotkey like:

Magic Mouse

Magic Keyboard

Magic Hotkey

But I don't think I'm missing any funtionality, but this is not conclusive since at present I use for very basic purposes.

Roundup

I can't really conclude much except that at present there are drivers and SST software that work with both WinXP and Vista in both 32- and 64 bit. I've personally only used the WinXp 32-bit since I've left my Vista for a while. I is bad that I still had to find the right installer deep down in the Windows\Temp folder, but it could be some unknown specifics with my install.

As for the different profile formats I think that in teory a least it shold be possible to install the beta software, open a dat file, save resulting in also a pr0 file of the XML variant, and the latest you can run through the converter to the real pr0 format.

Read more

Sunday, June 8, 2008

Game profile files for the Saitek X52 Pro Flight System

pencil icon, that"s clickable to start editing the post

Updated! (10. june). If you're ever uncertain that you've really understood something write a blogentry and you'll sone discover more. Since I wrote this entry I've discovered:

Blog entry

When you create a program that needs to persist data you have a couple of common possibilities like plain files or databases (which in the end are fils as well there's no escaping it's all files). If you choose to go with the file option wou have to decide how you want to organise and serialize/deserialize the data. The most common options are XML, csv, configuration fileformat (like the ones for PHP and OpenSSL) which are all plain text files, but you can always roll you're own format as either text or binary. I in general would suggest XML since I'm familiar with it and there are many tools available and schema validation can easily be added. Today I discovered a variant that falls close to XML but is a propriotary format.

The example

As the happy owner of the Saitek X52 Pro Flight System I've been (re)introduced to classic versioning problems. With the flightstick comes the SST Programming Software (SST stands for Saitek Smart Technology), that gives me:

  • Increase the number of functions you can assign to the controls on your controller through shift states and multiple modes
  • Create and save profiles for your favorite PC games, which you can load to configure your controller for that game every time you want to play it
  • Assign keyboard and mouse commands to your Saitek controller to play PC games that do not offer support for game pads and joysticks.

It's the second one that write about today. I first set out to find a configuration file that I could use for IL-2 1946 but after googling and browsing relevant forums I discovered that there was a lot of confusion and frustation due to changes in the profile file format. Here's some:

  • The X52 (normal) used a file format thats binary with the extension dat. This format can't be used with the software for the Pro version.
  • The file format for the X52 Pro is pr0, but the format contained has changed in a breaking way with the newest version of the software.
  • There even seems to be a platform binding so that profiles generated with the same version of the software can't be used on ex. both Windows XP and Vista.

These challenges are not new in software (as I started out) and analogy could be made to the challenges with rolling out OOXML:

  • The former version of document editing software in Office saved in a format with the extension doc. In contradiction to the SST software this format can still be read in the new version of the software.
  • The version of OOXML that's implemented in the current version of Office is different that the version going through ISO right now. I expect that they'll both use the extension docx

In the end the biggest problem is not the file formats them self but that the doesn't seem to be a migration path between them. The software that reads the profiles (deserialise them) can detect the specific format either from the filename and/or the content. The software team a Saitek has decided not to incorporate support for the different formats and thereby not support they're customers (both those with the X52 Pro and the ones migrating from the X52 (normal).

There has been created a conversion tool as a standalone program but I haven't had much succes with it, and I think it's because it's between the dat and the first version of the pr0 format.

The file formats

The three format mentioned above are:

  1. The binary/obscure dat format
  2. The first pr0 format
  3. The second pr0 format

I can't show the a), but here's a screendump of a profile for b):

Yuep, that's good ol XML. I've searched for a schema for the namespace http://www.saitek.com/sd5/sd but haven't found one. I wont try to analyze the format, but I notice that there is a version attribute (with what looks like binary content for '65').

I've installed the newest version of the SST software 6.0.10.17

and saved the default profile:

and the format now looks like:

and Yuep, that's almost like good ol XML. The syntax is a little different but very similar and also shares a resemblance to the format that I share name with. Also in this format there's a version attribute (now with the value '3').

It beats me to come up with an explanation of why they would create they're own format that's so close to XML, and use the time both to develop and maintain it as well as the tools for it, but my hope is that this format in fact is more common than I'm aware of.

Read more

Thursday, June 5, 2008

Configuring Tomcat to send P3P Compact Policy in HTTP response header

pencil icon, that"s clickable to start editing the post

Some time ago i did some analysis of P3P Compact Headers and the interplay it has with IE6+ to enable thirdparty cookies. The other day I assisted someone in implementing it in Tomcat. It was rather easy since the Servlet specfication has the filter feature that fits this like a glove.

Here's an example code for such a filter called StaticResponseHeaderFilter, that has been generalized to be able of appending any static HTTP header to the response. An important point is that I expect one policy to cover the hole site. I'm not sure if anyone differentiates the policy for different pages, though I guess it could in theory make sense, it could very easily confuse the users.

    1 package org.sweetxml.webutil;
    2 
    3 import java.io.IOException;
    4 
    5 import javax.servlet.Filter;
    6 import javax.servlet.FilterChain;
    7 import javax.servlet.FilterConfig;
    8 import javax.servlet.ServletException;
    9 import javax.servlet.ServletRequest;
   10 import javax.servlet.ServletResponse;
   11 import javax.servlet.http.HttpServletResponse;
   12 
   13 public class StaticResponseHeaderFilter implements Filter {
   14 
   15   private final static String HEADERNAME_INIT_PARAM = "headername";
   16   private final static String HEADERVALUE_INIT_PARAM = "headervalue";
   17 
   18 
   19   private String headername = null;
   20   private String headervalue = null;
   21 
   22 
   23   @Override
   24   public void init(FilterConfig filterConfig) throws ServletException {
   25     headername = filterConfig.getInitParameter(HEADERNAME_INIT_PARAM);
   26     headervalue = filterConfig.getInitParameter(HEADERVALUE_INIT_PARAM);
   27   }
   28 
   29   @Override
   30   public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,
   31       ServletException {
   32 
   33     HttpServletResponse httpResp = (HttpServletResponse) response;
   34     // pass on to other filters or the resource
   35     filterChain.doFilter(request, response);
   36     // set HTTP header on response
   37     httpResp.setHeader(headername, headervalue);
   38   }
   39 
   40   @Override
   41   public void destroy() {
   42   }
   43 }

At first I had implemented it with ResponseWrapper, but as I thought of it I came to believe that it wasn't necessary (my experience with implementing filters are limited and when I'll need to use the wrapper classes).

It's configured like this in web.xml:

   39 
   40 
   41   <filter>
   42     <filter-name>StaticResponseHeaderFilter</filter-name>
   43     <filter-class>org.sweetxml.webutil.StaticResponseHeaderFilter</filter-class>
   44     <init-param>
   45       <param-name>headername</param-name>
   46       <param-value>P3P</param-value>
   47     </init-param>
   48     <init-param>
   49       <param-name>headervalue</param-name>
   50       <param-value>CP="CAO PSA OUR"</param-value>
   51     </init-param>
   52   </filter>
   53   <filter-mapping>
   54     <filter-name>StaticResponseHeaderFilter</filter-name>
   55     <url-pattern>/*</url-pattern>
   56   </filter-mapping>
   57 
   58 

And a quick check with wget gives:

wget -S http://localhost:8080/p3pdemo/
--23:20:08--  http://localhost:8080/p3pdemo/
Resolving localhost... ::1
Connecting to localhost|::1|:8080... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Set-Cookie: JSESSIONID=8BFBF636E28A43E0F292345EAD7F6CB7; Path=/p3pdemo
  P3P: CP="CAO PSA OUR"
  Content-Type: text/html;charset=UTF-8
  Content-Length: 1609
  Date: Thu, 05 Jun 2008 21:20:08 GMT
  Connection: keep-alive
Length: 1609 (1.6K) [text/html]

Very easy indeed and the filter feature was just perfect.

As for implementing it in Apache HTTPD see the Appendix in The Platform for Privacy Preferences 1.0 Deployment Guide (W3C Note 11 February 2002) and for IIS

I can only conclude that the hardest part of implementing P3P is getting the policy right and being representative, it's not implementing it on servers.

Read more

Saturday, March 29, 2008

A minimal word document in OOXML format (WordprocessingML)

pencil icon, that"s clickable to start editing the post

I wanted to a first real look at OOXML documents (for Word) and decided to go for a minimal example. Luckily I was not the first to do this so I found several resources, which also gave me a trip around commmandline'in .NET and an aspect of versioning.

CreateDOCX

The first resource I found was a blog entry by Doug Mahugh called CreateDOCX Sample Program. I downloaded the example code, jumped into the Debug directory and ran the program with the following result:

C:\misc\CreateDOCX\CreateDOCX\bin\Debug>CreateDOCX.exe sx.doc "Hello Sweetxml.org"

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'WindowsBase, Version=3.0.51116.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Den angivne fil blev ikke fundet.
File name: 'WindowsBase, Version=3.0.51116.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
   at CreateDOCX.SaveDOCX(String fileName, String BodyText)
   at CreateDOCX.Main() in D:\projects\OpenXmlDeveloper\PackagingAPI\CreateDOCX\CreateDOCX\CreateDOCX.cs:line 26

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

I'm not really sure why there's a dependency on the source file, but I decided to compile it myself from the commandline, with this little batch file:

echo on

set csc="C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe"
set winBase="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll"

set exe="build\simpleDocx.exe"

del /Q build\*

%csc%  /nologo  /target:exe /reference:%winBase% /out:%exe% CreateDOCX\CreateDOCX.cs

%exe% sx.docx "Hello Sweetxml.org"

After having run this with success I was ready to open the file with Word 2007, just to get this warning:

After comparing with a similar document created with Word 2007 i found the reason, I should had paid notice to when the article was from (2006) cause the namespace used in the program: http://schemas.openxmlformats.org/wordprocessingml/2006/3/main isn't what's used in the final version (standardization in progress) which is http://schemas.openxmlformats.org/wordprocessingml/2006/main. There's a description of this behaviour in Message when you try to open a file that was saved in a prerelease version of the 2007 Office programs: "This file was created in a previous beta version" or "This workbook was created in an earlier beta version".

As for versioning Word 2007 is aware of this earlier version, and hopefully it's close to the released version since otherwise handling multiple versions can turn out as a big challenge - something that catching up with the standardization process will demand, a situation that in general is hard to handle, having support for multiple versions with possibly different data model and/or semantics.

The simple 'Hello Sweetxml.org' document shown in Word 2007

A truely minimal document

An better resource is Jesper Lund Stocholms blog entry (in danish): Venstrehåndsarbejde på Version2 where he creates a truely minimal OOXML Word document "Hello World!"-OOXML dockument.

The Ecma Office Open XML File Formats Standard - Primer and whitepaper

Last but not the least the, and had I only read the (proposed) standard ealier I would had known, the Primer [PDF] (Ecma TC45 Final Draft Part 3), has a minimal document in section 2.2 Basic Document Structure.

Also the whitepaper from ECMA TC45 OFFICE OPEN XML OVERVIEW has a minimal example in section 5.6 MINIMAL WORDPROCESSINGML DOCUMENT.

Debugging corrupt documents

Fiddling around with the content/documents in a more complex document/assembly will easily give you this experience when you try to open it in Word 2007:

Document is corrupt prompt from Word 2007

And I guess that is just the risk I have to accept if I alter documents by hand or with just basic support tools, with the only test options in schema validation and trying to open the documents with word or another compliant tool.

Read more

Friday, March 21, 2008

The Anatomy of a yum repository - a look under the hood of the Skype repo for i586

pencil icon, that"s clickable to start editing the post

For a long time I've been a happy user of both up2date and later yum without having any deeper understanding of how it works. Inspired by a couple of comments on my posting Sweetxml: Updating Skype with yum - updated repository location I decided to have a closer look at it. The yum repository that I wrote about was for Skype with the baseurl http://download.skype.com/linux/repos/fedora/updates/i586/. Making a visit to that URL gives an 403:

$ wget -S http://download.skype.com/linux/repos/fedora/updates/i586/
--23:30:03--  http://download.skype.com/linux/repos/fedora/updates/i586/
Resolving download.skype.com... 194.192.199.202, 194.192.199.201
Connecting to download.skype.com|194.192.199.202|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 403 Forbidden
  Server: nginx/0.5.20
  Date: Tue, 18 Mar 2008 23:01:25 GMT
  Content-Type: text/html
  Content-Length: 1292
  Connection: keep-alive
23:30:03 ERROR 403: Forbidden.

Which could be interpreted as there was something wrong with the repository, but that would be a mis-conclusion. The 403 contains a /html/head/meta[@http-equiv="refresh"] that sendes the browser to http://www.skype.com/go/download

<meta http-equiv="refresh" content="0;url=http://www.skype.com/go/download" />

which will send you through further a couple of 302's :

$ wget -S http://www.skype.com/go/download
--23:36:57--  http://www.skype.com/go/download
Resolving www.skype.com... 204.9.163.136
Connecting to www.skype.com|204.9.163.136|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 302 Found
  Date: Tue, 18 Mar 2008 22:36:57 GMT
  Server: Apache
  Location: http://www.skype.com/download/redirect
  Vary: Accept-Encoding,User-Agent
  Content-Length: 0
  Keep-Alive: timeout=5, max=1200
  Connection: Keep-Alive
  Content-Type: text/html; charset=utf-8
  Content-Language: en
Location: http://www.skype.com/download/redirect [following]
--23:36:57--  http://www.skype.com/download/redirect
Reusing existing connection to www.skype.com:80.
HTTP request sent, awaiting response...
  HTTP/1.1 302 Found
  Date: Tue, 18 Mar 2008 22:36:57 GMT
  Server: Apache
  Location: http://www.skype.com/intl/da/download/skype/windows/
  Pragma: no-cache
  Cache-Control: no-store, no-cache, must-revalidate
  Cache-Control: post-check=0, pre-check=0
  Vary: Accept-Encoding,User-Agent
  Content-Length: 780
  Keep-Alive: timeout=5, max=1199
  Connection: Keep-Alive
  Content-Type: text/html; charset=utf-8
  Content-Language: en
Location: http://www.skype.com/intl/da/download/skype/windows/ [following]
--23:36:58--  http://www.skype.com/intl/da/download/skype/windows/
Reusing existing connection to www.skype.com:80.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Tue, 18 Mar 2008 22:36:58 GMT
  Server: Apache
  Accept-Ranges: bytes
  Vary: Accept-Encoding,User-Agent
  Connection: close
  Content-Type: text/html; charset=utf-8
  Content-Language: en
Length: unspecified [text/html]

Here ending up on the windows download page (probaly the default, since wget doesn't give enogh OS information).

Looking for some in depth information about yum repositories I had to do more seaching that I had expected, but I finally ended at Duke University Yellow dog Updater, Modified (yum) project and especially createrepo that has a short description of the anatomy of a yum repository in the Explanations section.

The metadata file (for the metadata files) for the repository is located relatively in repodata/repomd.xml which for this repository becomes: http://download.skype.com/linux/repos/fedora/updates/i586/repodata/repomd.xml:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <repomd xmlns="http://linux.duke.edu/metadata/repo">
    3   <data type="other">
    4     <location href="repodata/other.xml.gz" />
    5     <checksum type="sha">289da3573161f83988b15dc74db0a1efa8ef9781</checksum>
    6     <timestamp>1191408972</timestamp>
    7     <open-checksum type="sha">c709dc7b0f3f7c0f38c767ebda5d33979eb2a943</open-checksum>
    8   </data>
    9   <data type="filelists">
   10     <location href="repodata/filelists.xml.gz" />
   11     <checksum type="sha">5c9fa749066ef5799f2ea9159a2963502644ecaa</checksum>
   12     <timestamp>1191408972</timestamp>
   13     <open-checksum type="sha">6eb325e10d4e8fcb091e292c27dd09176cd3aa4d</open-checksum>
   14   </data>
   15   <data type="primary">
   16     <location href="repodata/primary.xml.gz" />
   17     <checksum type="sha">68df664b42a6f6b97baa9f0022a5d2e89f5b95e1</checksum>
   18     <timestamp>1191408972</timestamp>
   19     <open-checksum type="sha">97ef94dac5f6f6a6b610eca8ed48f806d4eaac2d</open-checksum>
   20   </data>
   21 </repomd>

So from this it's clear that this is an active repository, though direct browsing the baseurl could give you the idea that it wasn't.

Taking it in reverse order the primary metadata is in the file repodata/primary.xml.gz, as described on the Duke website:

this file stores the primary metadata information. This includes information such as:

  • name, epoch, version, release, architecture
  • file size, file location, description, summary, format, checksums header byte-ranges, etc.
  • dependencies, provides, conflicts, obsoletes, suggests, recommends
  • file lists for the package for CERTAIN files - specifically files matching: /etc*, *bin/*, /usr/lib/sendmail
  • it also includes a 'format' element which allows for format specific information to be stored. The formats known about right now are deb and rpm

This file (when gunzip'ed) looks like:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <metadata
    3   xmlns="http://linux.duke.edu/metadata/common"
    4   xmlns:rpm="http://linux.duke.edu/metadata/rpm"
    5   packages="1">
    6   <package type="rpm">
    7     <name>skype</name>
    8     <arch>i586</arch>
    9     <version
   10       epoch="0"
   11       ver="1.4.0.118"
   12       rel="fc5" />
   13     <checksum
   14       type="sha"
   15       pkgid="YES">
   16       35d0bb0ed0738c4392827b2cd3d6ad5b1f098506
   17     </checksum>
   18     <summary>Skype is free Internet telephony that just works</summary>
   19     <description>
   20       Skype - Take a deep breath
   21 
   22       Skype is a little piece of software that lets you make free calls to anyone else
   23       on Skype, anywhere in the world. And even though the calls are free, they are really
   24       excellent quality.
   25 
   26       * Make free Skype-to-Skype calls to anyone else, anywhere in the world.
   27       * Call ordinary phones and mobiles at pretty cheap rates per minute.
   28       * Group chat with up to 100 people or conference call with up to nine others.
   29       * Free to download.
   30     </description>
   31     <packager />
   32     <url>http://www.skype.com/products/skype/linux/</url>
   33     <time
   34       file="1191408970"
   35       build="1190911586" />
   36     <size
   37       package="13410121"
   38       installed="16209093"
   39       archive="16225988" />
   40     <location href="skype-1.4.0.118-fc.i586.rpm" />
   41     <format>
   42       <rpm:license>Commercial</rpm:license>
   43       <rpm:vendor />
   44       <rpm:group>Applications/Internet</rpm:group>
   45       <rpm:buildhost>linux-build.skype.net</rpm:buildhost>
   46       <rpm:sourcerpm>skype-1.4.0.118-fc5.src.rpm</rpm:sourcerpm>
   47       <rpm:header-range
   48         start="440"
   49         end="25645" />
   50       <rpm:provides>
   51         <rpm:entry
   52           name="config(skype)"
   53           flags="EQ"
   54           epoch="0"
   55           ver="1.4.0.118"
   56           rel="fc5" />
   57         <rpm:entry
   58           name="skype"
   59           flags="EQ"
   60           epoch="0"
   61           ver="1.4.0.118"
   62           rel="fc5" />
   63       </rpm:provides>
   64       <rpm:requires>
   65         <rpm:entry name="libstdc++.so.6(CXXABI_1.3)" />
   66         <rpm:entry name="libc.so.6(GLIBC_2.1.3)" />
   67         <rpm:entry name="libasound.so.2(ALSA_0.9)" />
   68         <rpm:entry
   69           name="config(skype)"
   70           flags="EQ"
   71           epoch="0"
   72           ver="1.4.0.118"
   73           rel="fc5" />
   74         <rpm:entry name="libgcc_s.so.1(GCC_3.0)" />
   75         <rpm:entry name="libX11.so.6" />
   76         <rpm:entry name="libc.so.6(GLIBC_2.3)" />
   77         <rpm:entry name="libpthread.so.0(GLIBC_2.3.2)" />
   78         <rpm:entry name="libc.so.6(GLIBC_2.1)" />
   79         <rpm:entry
   80           name="rpmlib(PayloadFilesHavePrefix)"
   81           flags="LE"
   82           epoch="0"
   83           ver="4.0"
   84           rel="1"
   85           pre="1" />
   86         <rpm:entry
   87           name="rpmlib(CompressedFileNames)"
   88           flags="LE"
   89           epoch="0"
   90           ver="3.0.4"
   91           rel="1"
   92           pre="1" />
   93         <rpm:entry name="libpthread.so.0" />
   94         <rpm:entry name="libpthread.so.0(GLIBC_2.0)" />
   95         <rpm:entry name="libstdc++.so.6(CXXABI_1.3.1)" />
   96         <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4)" />
   97         <rpm:entry name="libpthread.so.0(GLIBC_2.1)" />
   98         <rpm:entry name="libQtDBus.so.4" />
   99         <rpm:entry name="libgcc_s.so.1" />
  100         <rpm:entry name="libm.so.6" />
  101         <rpm:entry name="libm.so.6(GLIBC_2.0)" />
  102         <rpm:entry name="libasound.so.2(ALSA_0.9.0rc4)" />
  103         <rpm:entry name="libQtNetwork.so.4" />
  104         <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.4)" />
  105         <rpm:entry name="libasound.so.2" />
  106         <rpm:entry name="libstdc++.so.6" />
  107         <rpm:entry name="libgcc_s.so.1(GLIBC_2.0)" />
  108         <rpm:entry name="libc.so.6(GLIBC_2.0)" />
  109         <rpm:entry name="libc.so.6(GLIBC_2.4)" />
  110         <rpm:entry name="librt.so.1" />
  111         <rpm:entry name="libQtGui.so.4" />
  112         <rpm:entry name="libc.so.6(GLIBC_2.3.4)" />
  113         <rpm:entry
  114           name="/bin/sh"
  115           pre="1" />
  116         <rpm:entry
  117           name="qt4-x11"
  118           flags="GE"
  119           epoch="0"
  120           ver="4.2" />
  121         <rpm:entry name="libQtCore.so.4" />
  122         <rpm:entry name="libpthread.so.0(GLIBC_2.2)" />
  123         <rpm:entry name="libc.so.6" />
  124         <rpm:entry name="libc.so.6(GLIBC_2.2)" />
  125         <rpm:entry name="libsigc-2.0.so.0" />
  126       </rpm:requires>
  127       <file>/etc/dbus-1/system.d/skype.conf</file>
  128       <file>/usr/bin/skype</file>
  129     </format>
  130   </package>
  131 </metadata>

The format partly defined in the DTD for package and DTD for rpm metadata.

The repodata/filelists.xml.gz, described as this file stores the complete file and directory listings for the packages. The package is identified by: name, epoch, version, release, architecture and package checksum id contains:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <filelists
    3   xmlns="http://linux.duke.edu/metadata/filelists"
    4   packages="1">
    5   <package
    6     pkgid="97ff8fb3b6eb70289a73545ea39c02fcce4f6b4a"
    7     name="skype"
    8     arch="i586">
    9     <version
   10       epoch="0"
   11       ver="2.0.0.63"
   12       rel="fc5" />
   13     <file>/etc/dbus-1/system.d/skype.conf</file>
   14     <file>/usr/bin/skype</file>
   15     <file>/usr/share/applications/skype.desktop</file>
   16     <file>/usr/share/doc/skype-2.0.0.63/LICENSE</file>
   17     <file>/usr/share/doc/skype-2.0.0.63/README</file>
   18     <file>/usr/share/icons/skype.png</file>
   19     <file>/usr/share/pixmaps/skype.png</file>
   20     <file>/usr/share/skype/lang/skype_bg.qm</file>
   21     <file>/usr/share/skype/lang/skype_bg.ts</file>
   22     <file>/usr/share/skype/lang/skype_de.qm</file>
   23     <file>/usr/share/skype/lang/skype_de.ts</file>
   24     <file>/usr/share/skype/lang/skype_en.qm</file>
   25     <file>/usr/share/skype/lang/skype_en.ts</file>
   26     <file>/usr/share/skype/lang/skype_es.qm</file>
   27     <file>/usr/share/skype/lang/skype_es.ts</file>
   28     <file>/usr/share/skype/lang/skype_et.qm</file>
   29     <file>/usr/share/skype/lang/skype_et.ts</file>
   30     <file>/usr/share/skype/lang/skype_fr.qm</file>
   31     <file>/usr/share/skype/lang/skype_fr.ts</file>
   32     <file>/usr/share/skype/lang/skype_it.qm</file>
   33     <file>/usr/share/skype/lang/skype_it.ts</file>
   34     <file>/usr/share/skype/lang/skype_ja.qm</file>
   35     <file>/usr/share/skype/lang/skype_ja.ts</file>
   36     <file>/usr/share/skype/lang/skype_ko.qm</file>
   37     <file>/usr/share/skype/lang/skype_ko.ts</file>
   38     <file>/usr/share/skype/lang/skype_lt.qm</file>
   39     <file>/usr/share/skype/lang/skype_lt.ts</file>
   40     <file>/usr/share/skype/lang/skype_lv.qm</file>
   41     <file>/usr/share/skype/lang/skype_lv.ts</file>
   42     <file>/usr/share/skype/lang/skype_pl.qm</file>
   43     <file>/usr/share/skype/lang/skype_pl.ts</file>
   44     <file>/usr/share/skype/lang/skype_pt_br.qm</file>
   45     <file>/usr/share/skype/lang/skype_pt_br.ts</file>
   46     <file>/usr/share/skype/lang/skype_pt_pt.qm</file>
   47     <file>/usr/share/skype/lang/skype_pt_pt.ts</file>
   48     <file>/usr/share/skype/lang/skype_ro.qm</file>
   49     <file>/usr/share/skype/lang/skype_ro.ts</file>
   50     <file>/usr/share/skype/lang/skype_ru.qm</file>
   51     <file>/usr/share/skype/lang/skype_ru.ts</file>
   52     <file>/usr/share/skype/lang/skype_th.qm</file>
   53     <file>/usr/share/skype/lang/skype_th.ts</file>
   54     <file>/usr/share/skype/lang/skype_tr.qm</file>
   55     <file>/usr/share/skype/lang/skype_tr.ts</file>
   56     <file>/usr/share/skype/lang/skype_zh_s.qm</file>
   57     <file>/usr/share/skype/lang/skype_zh_s.ts</file>
   58     <file>/usr/share/skype/lang/skype_zh_t.qm</file>
   59     <file>/usr/share/skype/lang/skype_zh_t.ts</file>
   60     <file>/usr/share/skype/sounds/CallBusy.wav</file>
   61     <file>/usr/share/skype/sounds/CallConnecting.wav</file>
   62     <file>/usr/share/skype/sounds/CallFailed.wav</file>
   63     <file>/usr/share/skype/sounds/CallHangup.wav</file>
   64     <file>/usr/share/skype/sounds/CallHold.wav</file>
   65     <file>/usr/share/skype/sounds/CallRemoteHangup.wav</file>
   66     <file>/usr/share/skype/sounds/CallResume.wav</file>
   67     <file>/usr/share/skype/sounds/CallRingingIn.wav</file>
   68     <file>/usr/share/skype/sounds/CallRingingOut.wav</file>
   69     <file>/usr/share/skype/sounds/ChatIncoming.wav</file>
   70     <file>/usr/share/skype/sounds/ChatIncomingInitial.wav</file>
   71     <file>/usr/share/skype/sounds/ChatOutgoing.wav</file>
   72     <file>/usr/share/skype/sounds/ContactAdded.wav</file>
   73     <file>/usr/share/skype/sounds/ContactAuthRequest.wav</file>
   74     <file>/usr/share/skype/sounds/ContactOffline.wav</file>
   75     <file>/usr/share/skype/sounds/ContactOnline.wav</file>
   76     <file>/usr/share/skype/sounds/SkypeLogin.wav</file>
   77     <file>/usr/share/skype/sounds/SkypeLogout.wav</file>
   78     <file>/usr/share/skype/sounds/TransferComplete.wav</file>
   79     <file>/usr/share/skype/sounds/TransferFailed.wav</file>
   80     <file>/usr/share/skype/sounds/TransferRequest.wav</file>
   81     <file>/usr/share/skype/sounds/VoicemailReceived.wav</file>
   82     <file type="dir">/usr/share/doc/skype-2.0.0.63</file>
   83   </package>
   84 
   85 </filelists>

And finally repodata/other.xml.gz, with the description this file currently only stores the changelog data from packages. However, this file could be used for any other additional metadata that could be useful for clients contains:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <otherdata
    3   xmlns="http://linux.duke.edu/metadata/other"
    4   packages="1">
    5   <package
    6     pkgid="97ff8fb3b6eb70289a73545ea39c02fcce4f6b4a"
    7     name="skype"
    8     arch="i586">
    9     <version
   10       epoch="0"
   11       ver="2.0.0.63"
   12       rel="fc5" />
   13     <changelog
   14       author="Skype Technologies S.A. &lt;info@skype.net&gt; 2.0.0.63-fc5"
   15       date="1204704000">
   16 - feature: Add call cost per minute to 1:1 SkypeOut calls.
   17 - feature: Add UI detection of Slovakian, Farsi (Persian) and Vietnamese language files.
   18 - feature: Added privacy option to disable the sending of the number of contacts you have to your contacts.
   19 - feature: Implement HashLinkURL to provide easy links to #12345 references in chats.
   20 - feature: Shadows on user avatars on contact card.
   21 - feature: Show an indicator when the user is on an embedded device such as a Skype phone.
   22 - feature API: BTN_PRESSED/BTN_RELEASED are now implemented.
   23 - feature API: SEARCH ACTIVECHATS is now implemented.
   24 - bugfix: 1:1 chats should not have Leave Chat button.
   25 - bugfix: Add a blinking window effect for some windows which are already open when we get a new chat message.
   26 - bugfix: Add a workaround for a KWin issue preventing closed minimized chats from being reopened.
   27 - bugfix: Add bubbles from mood message to avatars on contact card.
   28 - bugfix: Add right-click context menu to chat window for copying text/links.
   29 - bugfix: Avoid status text being truncated on status button in profile editor.
   30 - bugfix: BTN_PRESSED YES should activate Call functionality regardless of double-click action.
   31 - bugfix: Be sure the chat window doesn't reappear after we leave the chat.
   32 - bugfix: Call Ringing sound shouldn't be audible during Do Not Disturb status mode.
   33 - bugfix: Can't add a contact to a chat using drag and drop.
   34 - bugfix: Change Call Hold/Resume button at the correct times (even when changing hold/resume during fullscreen video)
   35 - bugfix: Change file transfer filename to saved filename if different from original filename in transfer window.
   36 - bugfix: Compare chats in recent chats/etc menus correctly to check if they are unread.
   37 - bugfix: Contacts shouldn't disappear when they're moved between columns when receiving contacts.
   38 - bugfix: Copy URLs to both X selection and Clipboard, as users may want to middle-click the copied link into their browser.
   39 - bugfix: Crash after 2 minutes of signing in if we are signed out at that time.
   40 - bugfix: Crash after signing in with incorrect details after signing out.
   41 - bugfix: Display video in full-screen at correct aspect ratio regardless of monitor dimensions.
   42 - bugfix: Do not always put new chat windows at top left corner if no previous setting found, let window manager determine position.
   43 - bugfix: Do not freeze when opening options dialog
   44 - bugfix: Do not initialise /dev/video0 whenever we start a video call (could prevent video from working when video0 fails)
   45 - bugfix: Do not instantly close Voicemail events when clicking the play button in new events panel.
   46 - bugfix: Do not let Voicemail messages continue to play in the background after closing them.
   47 - bugfix: Do not show authorisation options in context menu for events if we already authorised the user.
   48 - bugfix: Do not unnecessarily init device twice when starting video (speeds up video init by 50%)
   49 - bugfix: Downscaling for Myself View / Oversized Video on X11 (non-accelerated).
   50 - bugfix: echo123 should be called Skype Test Call and should not have an 'Request Authorization' option.
   51 - bugfix: Ending an incoming conference call should be allowed to redirect to Voicemail also.
   52 - bugfix: Escape should close send contacts window before we attempt to send contacts.
   53 - bugfix: Fix for chat being stuck in unread state after becoming multichat.
   54 - bugfix: Fix for video output when not using XShm extension.
   55 - bugfix: Fix locking up the client for up to 30 seconds randomly sometimes for heavy Skype users.
   56 - bugfix: If main window is thinner than login window and right-aligned, it would move to the left after restart.
   57 - bugfix: Incoming calls should be redirected to Voicemail if configured to do so and another call is active.
   58 - bugfix: Make 'Invite selected contacts to conference call' option work in contact list multiple selections menu.
   59 - bugfix: Make contact list even more responsive whilst loading historical calls.
   60 - bugfix: Make login/startup much faster and cleaner.
   61 - bugfix: Make missed event text for birthdays clearer.
   62 - bugfix: Many bugfixes to video in call window to handle window updates during paused video calls.
   63 - bugfix: Only move main window if we have a previously saved position.
   64 - bugfix: Only play chat message sent sound for actual sent messages and emotive actions.
   65 - bugfix: Only redirect incoming calls to Voicemail if we actually have Voicemail capability.
   66 - bugfix: Properly remember unread chats as unread after a Skype restart.
   67 - bugfix: Receive Contacts should close when Escape is pressed.
   68 - bugfix: Remember 'Show Myself View' setting during the video call (when switching to fullscreen and back, etc).
   69 - bugfix: Remember chat splitter arrangement per user for 1:1 chats.
   70 - bugfix: Remember chat window position per user for 1:1 chats.
   71 - bugfix: Remember show/hide chat member list setting per user for 1:1 chats.
   72 - bugfix: Remove grey contact card background.
   73 - bugfix: Reordered Voicemail Options dialog to keep individual Voicemail features independent.
   74 - bugfix: Send Contacts should cancel and/or close when Escape is pressed.
   75 - bugfix: Shortened SkypeIn and SkypeOut call error messages.
   76 - bugfix: Show correct saving filename in child transfer widget when receiving multiple files.
   77 - bugfix: Shrink myself view so it scales better on Xv and properly on X11.
   78 - bugfix: Starting a conference call with a MySpace contact would result in a single call being made to 'myspace'.
   79 - bugfix: Stop window from moving lower and lower on each restart.
   80 - bugfix: Update chat window area size correctly after clearing to avoid mystery scrollbar returning.
   81 - bugfix: Video call window is out of shape if the contact has a really long name.
   82 - bugfix API: SET CHATMESSAGE [id] SEEN should remove now-read chats from events panel.
   83     </changelog>
   84   </package>
   85 </otherdata>

On howtoforge.com there's an article How To Set Up A Local Yum Repository On Fedora 8 which could be a very good idea if I someday had to develop (and maintain) an application for Linux.

Read more