[Player-cvs] app/gtk switchboard.cpp, NONE, 1.1.2.1 switchboard.h, NONE, 1.1.2.1 sysinfo.cpp, NONE, 1.1.2.1 sysinfo.h, NONE, 1.1.2.1

[Player-cvs] app/gtk switchboard.cpp, NONE, 1.1.2.1 switchboard.h, NONE, 1.1.2.1 sysinfo.cpp, NONE, 1.1.2.1 sysinfo.h, NONE, 1.1.2.1

rggammon at helixcommunity.org rggammon at helixcommunity.org
Wed Jul 14 19:00:36 PDT 2004


Update of /cvsroot/player/app/gtk
In directory cvs-new:/tmp/cvs-serv19469

Added Files:
      Tag: bingo-beta
	switchboard.cpp switchboard.h sysinfo.cpp sysinfo.h 
Log Message:
backporting bug fixes


--- NEW FILE: switchboard.cpp ---
/* ***** BEGIN LICENSE BLOCK *****
 * Source last modified: $Id: switchboard.cpp,v 1.1.2.1 2004/07/15 02:00:34 rggammon Exp $
 * 
 * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
 * 
 * The contents of this file, and the files included with this file,
 * are subject to the current version of the RealNetworks Public
 * Source License (the "RPSL") available at
 * http://www.helixcommunity.org/content/rpsl unless you have licensed
 * the file under the current version of the RealNetworks Community
 * Source License (the "RCSL") available at
 * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
 * will apply. You may also obtain the license terms directly from
 * RealNetworks.  You may not use this file except in compliance with
 * the RPSL or, if you have a valid RCSL with RealNetworks applicable
 * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
 * the rights, obligations and limitations governing use of the
 * contents of the file.
 * 
 * Alternatively, the contents of this file may be used under the
 * terms of the GNU General Public License Version 2 or later (the
 * "GPL") in which case the provisions of the GPL are applicable
 * instead of those above. If you wish to allow use of your version of
 * this file only under the terms of the GPL, and not to allow others
 * to use your version of this file under the terms of either the RPSL
 * or RCSL, indicate your decision by deleting the provisions above
 * and replace them with the notice and other provisions required by
 * the GPL. If you do not delete the provisions above, a recipient may
 * use your version of this file under the terms of any one of the
 * RPSL, the RCSL or the GPL.
 * 
 * This file is part of the Helix DNA Technology. RealNetworks is the
 * developer of the Original Code and owns the copyrights in the
 * portions it created.
 * 
 * This file, and the files included with this file, is distributed
 * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
 * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
 * ENJOYMENT OR NON-INFRINGEMENT.
 * 
 * Technology Compatibility Kit Test Suite(s) Location:
 *    http://www.helixcommunity.org/content/tck
 * 
 * Contributor(s):
 * 
 * ***** END LICENSE BLOCK ***** */

#include "switchboard.h"
#include "sysinfo.h"

#include "commonapp.h"

#define SWITCHBOARD "https://player.helixcommunity.org/sitecode/redirect/?"

static void
append_param(GString*           str,
             const gchar*       url_name,
             HXSysInfo*         info,
             HXSysInfoParamType type,
             gboolean           escape)
{
    gchar* raw_val;
    gchar* val;

    raw_val = hx_sys_info_get_param(info, type);
    if(raw_val)
    {
        if(escape)
        {
            val = hxcommon_strdup_and_escape_url(raw_val);
            g_string_append_printf(str, "&%s=%s", url_name, val);
            g_free(val);
        }
        else
        {
            g_string_append_printf(str, "&%s=%s", url_name, raw_val);
        }
        g_free(raw_val);
    }        
}

static void
append_player_information (GString* str, HXSysInfo* info)
{
    append_param(str, "playerVersion", info, HX_SYS_INFO_PLAYER_VERSION, FALSE);
    append_param(str, "playerName",    info, HX_SYS_INFO_PLAYER_NAME,    TRUE);

    append_param(str, "playerInstaller",    info, HX_SYS_INFO_PLAYER_INSTALLER, TRUE);
    append_param(str, "playerOrigin",       info, HX_SYS_INFO_PLAYER_ORIGIN,    TRUE);
}

static void
append_platform_information (GString* str, HXSysInfo* info)
{
    /* Append misc information that we need to do a proper update,
       potentially to RealPlayer. */

    append_param(str, "operatingSystem",    info, HX_SYS_INFO_OPERATING_SYSTEM, TRUE);
    append_param(str, "kernelVersion",      info, HX_SYS_INFO_KERNEL_VERSION,   TRUE);
    append_param(str, "processorType",      info, HX_SYS_INFO_PROCESSOR_TYPE,   TRUE);

    append_param(str, "lsbVersion",         info, HX_SYS_INFO_LSB_VERSION,           TRUE);
    append_param(str, "distribId",          info, HX_SYS_INFO_DISTRIB_ID,            TRUE);
    append_param(str, "distribRelease",     info, HX_SYS_INFO_DISTRIB_RELEASE,       TRUE);
    append_param(str, "distribDescription", info, HX_SYS_INFO_DISTRIB_DESCRIPTION,   TRUE);
    append_param(str, "distribCodename",    info, HX_SYS_INFO_DISTRIB_CODENAME,      TRUE);

    append_param(str, "gccVersion",         info, HX_SYS_INFO_GCC_VERSION,      TRUE);
}

gchar*
hx_switchboard_get_context_help_url (const gchar* context)
{
    GString* str;
    gchar* val;
    HXSysInfo* info;
        
    info = hx_sys_info_new();
    str = g_string_new(SWITCHBOARD);
    
    val = hxcommon_strdup_and_escape_url(context);
    g_string_append_printf(str, "action=ContextHelp&context=%s", val);
    g_free(val);
    
    append_player_information (str, info);

    hx_sys_info_destroy(info);

    /* return the internal c string, free the GString wrapper */
    return g_string_free(str, FALSE);    
}

gchar*
hx_switchboard_get_error_help_url (guint error_code)
{
    GString* str;
    HXSysInfo* info;
        
    info = hx_sys_info_new();

    str = g_string_new(SWITCHBOARD);

    g_string_append_printf(str, "action=ErrorHelp&error=0x%08x", error_code);
    
    append_player_information (str, info);

    hx_sys_info_destroy(info);

    /* return the internal c string, free the GString wrapper */
    return g_string_free(str, FALSE);        
}

gchar*
hx_switchboard_get_upgrade_url (const gchar* components)
{
    GString* str;
    HXSysInfo* info;
        
    info = hx_sys_info_new();

    str = g_string_new(SWITCHBOARD);

    g_string_append_printf(str, "action=CheckUpdate");
    
    if(components)
    {
        gchar* val;
        
        val = hxcommon_strdup_and_escape_url(components);
        g_string_append_printf(str, "&components=%s", val);
        g_free(val);
    }

    append_player_information (str, info);
    append_platform_information (str, info);

    hx_sys_info_destroy(info);

    /* return the internal c string, free the GString wrapper */
    return g_string_free(str, FALSE);        
}

gchar*
hx_switchboard_get_privacy_url(void)
{
    gchar* url = NULL;
    
#ifdef HELIX_FEATURE_REAL_BRANDING
    url = g_strdup("http://www.realnetworks.com/company/privacy");
#else
    url = g_strdup("https://helixcommunity.org/2002/intro/privacy.php");    
#endif

    return url;
}

--- NEW FILE: switchboard.h ---
/* ***** BEGIN LICENSE BLOCK *****
 * Source last modified: $Id: switchboard.h,v 1.1.2.1 2004/07/15 02:00:34 rggammon Exp $
 * 
 * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
 * 
 * The contents of this file, and the files included with this file,
 * are subject to the current version of the RealNetworks Public
 * Source License (the "RPSL") available at
 * http://www.helixcommunity.org/content/rpsl unless you have licensed
 * the file under the current version of the RealNetworks Community
 * Source License (the "RCSL") available at
 * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
 * will apply. You may also obtain the license terms directly from
 * RealNetworks.  You may not use this file except in compliance with
 * the RPSL or, if you have a valid RCSL with RealNetworks applicable
 * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
 * the rights, obligations and limitations governing use of the
 * contents of the file.
 * 
 * Alternatively, the contents of this file may be used under the
 * terms of the GNU General Public License Version 2 or later (the
 * "GPL") in which case the provisions of the GPL are applicable
 * instead of those above. If you wish to allow use of your version of
 * this file only under the terms of the GPL, and not to allow others
 * to use your version of this file under the terms of either the RPSL
 * or RCSL, indicate your decision by deleting the provisions above
 * and replace them with the notice and other provisions required by
 * the GPL. If you do not delete the provisions above, a recipient may
 * use your version of this file under the terms of any one of the
 * RPSL, the RCSL or the GPL.
 * 
 * This file is part of the Helix DNA Technology. RealNetworks is the
 * developer of the Original Code and owns the copyrights in the
 * portions it created.
 * 
 * This file, and the files included with this file, is distributed
 * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
 * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
 * ENJOYMENT OR NON-INFRINGEMENT.
 * 
 * Technology Compatibility Kit Test Suite(s) Location:
 *    http://www.helixcommunity.org/content/tck
 * 
 * Contributor(s):
 * 
 * ***** END LICENSE BLOCK ***** */

#ifndef _SWITCHBOARD_H_
#define _SWITCHBOARD_H_

#include <glib.h>

gchar* hx_switchboard_get_context_help_url (const gchar* context);
gchar* hx_switchboard_get_error_help_url   (guint        error_code);
gchar* hx_switchboard_get_upgrade_url      (const gchar* components);
gchar* hx_switchboard_get_privacy_url      (void);

#endif

--- NEW FILE: sysinfo.h ---
/* ***** BEGIN LICENSE BLOCK *****
 * Source last modified: $Id: sysinfo.h,v 1.1.2.1 2004/07/15 02:00:34 rggammon Exp $
 * 
 * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
 * 
 * The contents of this file, and the files included with this file,
 * are subject to the current version of the RealNetworks Public
 * Source License (the "RPSL") available at
 * http://www.helixcommunity.org/content/rpsl unless you have licensed
 * the file under the current version of the RealNetworks Community
 * Source License (the "RCSL") available at
 * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
 * will apply. You may also obtain the license terms directly from
 * RealNetworks.  You may not use this file except in compliance with
 * the RPSL or, if you have a valid RCSL with RealNetworks applicable
 * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
 * the rights, obligations and limitations governing use of the
 * contents of the file.
 * 
 * Alternatively, the contents of this file may be used under the
 * terms of the GNU General Public License Version 2 or later (the
 * "GPL") in which case the provisions of the GPL are applicable
 * instead of those above. If you wish to allow use of your version of
 * this file only under the terms of the GPL, and not to allow others
 * to use your version of this file under the terms of either the RPSL
 * or RCSL, indicate your decision by deleting the provisions above
 * and replace them with the notice and other provisions required by
 * the GPL. If you do not delete the provisions above, a recipient may
 * use your version of this file under the terms of any one of the
 * RPSL, the RCSL or the GPL.
 * 
 * This file is part of the Helix DNA Technology. RealNetworks is the
 * developer of the Original Code and owns the copyrights in the
 * portions it created.
 * 
 * This file, and the files included with this file, is distributed
 * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
 * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
 * ENJOYMENT OR NON-INFRINGEMENT.
 * 
 * Technology Compatibility Kit Test Suite(s) Location:
 *    http://www.helixcommunity.org/content/tck
 * 
 * Contributor(s):
 * 
 * ***** END LICENSE BLOCK ***** */

#ifndef _SYSINFO_H_
#define _SYSINFO_H_

#include <glib.h>

typedef enum
{
    /* from uname() */
    HX_SYS_INFO_OPERATING_SYSTEM = 0,
    HX_SYS_INFO_KERNEL_VERSION,
    HX_SYS_INFO_PROCESSOR_TYPE,

    /* from /etc/lsb-release (may also get filled in by another /etc
       file, as this is not a very widely implemented standard) */
    HX_SYS_INFO_LSB_VERSION,         /* 1.3    */
    HX_SYS_INFO_DISTRIB_ID,          /* Debian */
    HX_SYS_INFO_DISTRIB_RELEASE,     /* 3.1    */
    HX_SYS_INFO_DISTRIB_DESCRIPTION, /* Debian GNU/Linux */
    HX_SYS_INFO_DISTRIB_CODENAME,    /* Sarge */
    
    /* from the player */
    HX_SYS_INFO_PLAYER_NAME,      /* RealPlayer, Helix Player */
    HX_SYS_INFO_PLAYER_VERSION,   /* 0.4.0.123 */    
    HX_SYS_INFO_PLAYER_INSTALLER, /* rpm, binary  */
    HX_SYS_INFO_PLAYER_ORIGIN,    /* helixcommunity.org */

    /* set at compile time */
    HX_SYS_INFO_GCC_VERSION,      /* 3.3.3 */
    
    /* XXXRGG: Implement the rest of these */
    
    /* for shared clients, down the road... */
//    HX_SYS_INFO_CLIENT_VERSION,
//    HX_SYS_INFO_CLIENT_INSTALLER, /* rpm, binary, unknown */
//    HX_SYS_INFO_CLIENT_ORIGIN,    /* helixcommunity.org */
    
    /* xdpyinfo information */
//    HX_SYS_INFO_XSERVER_VERSION,  /* 4.3.0.1 */

    /* from gtk */
//    HX_SYS_INFO_GTK_VERSION,      /* 2.0.9   */
//    HX_SYS_INFO_LIBC_VERSION,     /* 2.3.2   */

    /* xvinfo information */
//    HX_SYS_INFO_XV_DRIVER,         /* ATI Radeon Video Overlay */

    /* maybe /dev/sndstat? */
//    HX_SYS_INFO_SOUND_DRIVER,      /* emu10k1 */    
//    HX_SYS_INFO_SOUND_DRIVER_TYPE  /* oss     */
} HXSysInfoParamType;

typedef struct _HXSysInfo HXSysInfo;

HXSysInfo* hx_sys_info_new       (void);
gchar*     hx_sys_info_get_param (HXSysInfo*         info,
                                  HXSysInfoParamType param);
void       hx_sys_info_destroy   (HXSysInfo*         info);

#endif

--- NEW FILE: sysinfo.cpp ---
/* ***** BEGIN LICENSE BLOCK *****
 * Source last modified: $Id: sysinfo.cpp,v 1.1.2.1 2004/07/15 02:00:34 rggammon Exp $
 * 
 * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
 * 
 * The contents of this file, and the files included with this file,
 * are subject to the current version of the RealNetworks Public
 * Source License (the "RPSL") available at
 * http://www.helixcommunity.org/content/rpsl unless you have licensed
 * the file under the current version of the RealNetworks Community
 * Source License (the "RCSL") available at
 * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
 * will apply. You may also obtain the license terms directly from
 * RealNetworks.  You may not use this file except in compliance with
 * the RPSL or, if you have a valid RCSL with RealNetworks applicable
 * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
 * the rights, obligations and limitations governing use of the
 * contents of the file.
 * 
 * Alternatively, the contents of this file may be used under the
 * terms of the GNU General Public License Version 2 or later (the
 * "GPL") in which case the provisions of the GPL are applicable
 * instead of those above. If you wish to allow use of your version of
 * this file only under the terms of the GPL, and not to allow others
 * to use your version of this file under the terms of either the RPSL
 * or RCSL, indicate your decision by deleting the provisions above
 * and replace them with the notice and other provisions required by
 * the GPL. If you do not delete the provisions above, a recipient may
 * use your version of this file under the terms of any one of the
 * RPSL, the RCSL or the GPL.
 * 
 * This file is part of the Helix DNA Technology. RealNetworks is the
 * developer of the Original Code and owns the copyrights in the
 * portions it created.
 * 
 * This file, and the files included with this file, is distributed
 * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
 * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
 * ENJOYMENT OR NON-INFRINGEMENT.
 * 
 * Technology Compatibility Kit Test Suite(s) Location:
 *    http://www.helixcommunity.org/content/tck
 * 
 * Contributor(s):
 * 
 * ***** END LICENSE BLOCK ***** */

#include "sysinfo.h"

#include "commonapp.h"

#include "appver.h"

#include <sys/utsname.h>

#include "hlxclib/stdio.h"
#include "hlxclib/ctype.h"
#include "hlxclib/string.h"


typedef struct _HXSysInfo
{
    gboolean distribution_info_set;

    gchar* lsb_version;
    gchar* distrib_id;
    gchar* distrib_release;
    gchar* distrib_description;
    gchar* distrib_codename;    
    
} _HXSysInfo;

HXSysInfo*
hx_sys_info_new (void)
{
    return g_new0(HXSysInfo, 1);
}

void
hx_sys_info_destroy (HXSysInfo* info)
{
    g_free(info->lsb_version);
    g_free(info->distrib_id);
    g_free(info->distrib_release);
    g_free(info->distrib_description);
    g_free(info->distrib_codename);    

    g_free(info);    
}

static gboolean
get_distribution_info_from_etc_lsb_release(HXSysInfo* info)
{
    GError* error = NULL;
    GIOChannel* chan = NULL;
    gchar* line = NULL;
    gboolean result = FALSE;
    GIOStatus status;
    
    if(g_file_test("/etc/lsb-release", G_FILE_TEST_EXISTS))
    {
        info->distribution_info_set = TRUE;
        chan = g_io_channel_new_file("/etc/lsb-release", "r", &error);
    
        if(chan && !error)
        {
            for(;;)
            {
                do
                {
                    status = g_io_channel_read_line(chan, &line, NULL, NULL, &error);                
                } while(status == G_IO_STATUS_AGAIN);

                if(!line || status != G_IO_STATUS_NORMAL)
                {
                    g_free(line);
                    break;
                }

                /* process line */
                gchar* quoted_value;
                gchar* key;
                gchar* value;

                quoted_value = strchr(line, '=');
                if(quoted_value)
                {
                    *quoted_value = '\0';
                    quoted_value++;

                    gchar* newline = strchr(quoted_value, '\n');
                    if(newline)
                    {
                        *newline = '\0';
                    }
                    
                    key = line;
                    GError* shell_err = NULL;
                    
                    value = g_shell_unquote(quoted_value, &shell_err);
                    if(shell_err)
                    {
                        g_warning(error->message);
                        g_error_free(error);
                        error = NULL;
                    }
                    else if(strcmp(key, "LSB_VERSION") == 0)
                    {
                        g_free(info->lsb_version);
                        info->lsb_version = value;
                    }
                    else if(strcmp(key, "DISTRIB_ID") == 0)
                    {                        
                        g_free(info->distrib_id);
                        info->distrib_id = value;
                    }
                    else if(strcmp(key, "DISTRIB_RELEASE") == 0)
                    {                        
                        g_free(info->distrib_release);
                        info->distrib_release = value;
                    }
                    else if(strcmp(key, "DISTRIB_DESCRIPTION") == 0)
                    {                        
                        g_free(info->distrib_description);
                        info->distrib_description = value;
                    }
                    else if(strcmp(key, "DISTRIB_CODENAME") == 0)
                    {                        
                        g_free(info->distrib_codename);
                        info->distrib_codename = value;    
                    }
                    else
                    {
                        g_free(value);
                    }
                }
                
                g_free(line);                    
            } 
        }

        if(error)
        {
            g_warning(error->message);
            g_error_free(error);
            error = NULL;
        }

        if(chan)
        {
            g_io_channel_shutdown(chan, TRUE, &error);
        }
        
        if(error)
        {
            g_warning(error->message);
            g_error_free(error);
            error = NULL;
        }
    }

    return result;
}

static gboolean
get_distribution_name_from_etc_xxx_release(HXSysInfo* info)
{
    GIOChannel* chan;
    GIOStatus status;
    GError* error = NULL;
    guint i;
    gchar* line;
    gboolean result = FALSE;

    /* If we get here, it means that /etc/lsb-release does not exist.
       We look for some well-known distribution files in order to
       determine the DISTRIB_ID, and send the first line from these
       files as the DISTRIB_DESCRIPTION. */
    
    struct
    {
        gchar* id;
        gchar* release_file;
    } distro_map[] =
    {
        { "Debian",     "/etc/debian_version",      },
        { "Gentoo",     "/etc/gentoo-release",      },
        { "Fedora",     "/etc/fedora-release",      },
        { "Redhat",     "/etc/redhat-release",      },
        { "SuSE",       "/etc/SuSE-release",        },
        { "JDS",        "/etc/sun-release",         },
        { "Mandrake",   "/etc/mandrake-release",    },
        { "Turbolinux", "/etc/turbolinux-release",  },
        { "Slackware",  "/etc/slackware-release",   },
        { "Slackware",  "/etc/slackware-version",   },
        { "Yellow Dog", "/etc/yellowdog-release",   },
        { NULL,         "/etc/release",             }
    };

    for(i = 0; i < sizeof(distro_map) / sizeof(*distro_map); i++)
    {
        if(g_file_test(distro_map[i].release_file, G_FILE_TEST_EXISTS))
        {
            info->distribution_info_set = TRUE;

            g_free(info->distrib_id);
            info->distrib_id = g_strdup(distro_map[i].id);
            
            chan = g_io_channel_new_file(distro_map[i].release_file, "r", &error);
            if(chan && !error)
            {
                do
                {
                    status = g_io_channel_read_line(chan, &line, NULL, NULL, &error);                
                } while(status == G_IO_STATUS_AGAIN);

                if(line && status == G_IO_STATUS_NORMAL)
                {
                    gchar* trimmed = hxcommon_strtrim(line);

                    g_free(info->distrib_description);
                    info->distrib_description = g_strdup(trimmed);
                }

                g_free(line);
                
                break;
            }            
        } 
    }    

    if(error)
    {
        g_warning(error->message);
        g_error_free(error);
        error = NULL;
    }

    if(chan)
    {
        g_io_channel_shutdown(chan, TRUE, &error);
    }
        
    if(error)
    {
        g_warning(error->message);
        g_error_free(error);
        error = NULL;
    }
    
    return result;
}

static gchar*
get_distribution_info(HXSysInfo*         info,
                      HXSysInfoParamType type)
{
    gchar* query_result = NULL;

    if(!info->distribution_info_set)
    {
        /* Query for info & cache for future calls */
        get_distribution_info_from_etc_lsb_release(info);
    }

    if(!info->distribution_info_set)
    {
        get_distribution_name_from_etc_xxx_release(info);
    }

    info->distribution_info_set = TRUE;

    switch(type)
    {
        case HX_SYS_INFO_LSB_VERSION:
            if(info->lsb_version)
            {
                query_result = g_strdup(info->lsb_version);
            }
            break;
        
        case HX_SYS_INFO_DISTRIB_ID:
            if(info->distrib_id)
            {
                query_result = g_strdup(info->distrib_id);
            }
            break;
            
        case HX_SYS_INFO_DISTRIB_RELEASE:
            if(info->distrib_release)
            {
                query_result = g_strdup(info->distrib_release);
            }
            break;
            
        case HX_SYS_INFO_DISTRIB_DESCRIPTION:
            if(info->distrib_description)
            {
                query_result = g_strdup(info->distrib_description);
            }
            break;
            
        case HX_SYS_INFO_DISTRIB_CODENAME:
            if(info->distrib_description)
            {
                query_result = g_strdup(info->distrib_codename);
            }
            break;

        default:
            g_assert_not_reached();
    }

    return query_result;
}

gchar*
hx_sys_info_get_param (HXSysInfo*         info,
                       HXSysInfoParamType type)
{
    gchar* query_result = NULL;
    
    switch (type)
    {
        case HX_SYS_INFO_OPERATING_SYSTEM:
        case HX_SYS_INFO_KERNEL_VERSION:
        case HX_SYS_INFO_PROCESSOR_TYPE:
        {
            /* uname */
            int result;
            struct utsname uname_data;
            
            result = uname(&uname_data);
            if(result == 0)
            {
                if (type == HX_SYS_INFO_OPERATING_SYSTEM)
                {
                    query_result = g_strdup(uname_data.sysname);
                }
                else if (type == HX_SYS_INFO_KERNEL_VERSION)
                {
                    query_result = g_strdup(uname_data.release);
                }
                else if (type == HX_SYS_INFO_PROCESSOR_TYPE)
                {
                    query_result = g_strdup(uname_data.machine);
                }
            }
            break;
        }

        case HX_SYS_INFO_LSB_VERSION:
        case HX_SYS_INFO_DISTRIB_ID:
        case HX_SYS_INFO_DISTRIB_RELEASE:
        case HX_SYS_INFO_DISTRIB_DESCRIPTION:
        case HX_SYS_INFO_DISTRIB_CODENAME:
            query_result = get_distribution_info(info, type);
            break;

        case HX_SYS_INFO_PLAYER_NAME:
            query_result = g_strdup(APP_NAME_FULL);
            break;
            
        case HX_SYS_INFO_PLAYER_VERSION:
            query_result = g_strdup(TARVER_STRING_VERSION);
            break;
            
        case HX_SYS_INFO_PLAYER_INSTALLER:
            /* Leave as NULL until we can detect this */
            break;
            
        case HX_SYS_INFO_PLAYER_ORIGIN:
            /* XXXRGG: Will need to figure out how this gets set. */
            query_result = g_strdup("helixcommunity.org");
            break;
            
        case HX_SYS_INFO_GCC_VERSION:            
#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
            query_result = g_strdup_printf("%d.%d.%d",
                                           __GNUC__,
                                           __GNUC_MINOR__,
                                           __GNUC_PATCHLEVEL__);
#endif
            break;
            
        default:
            g_warning("Unknown system information requested: %d", type);
            break;
    }

    return query_result;
}




More information about the Player-cvs mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.