diff options
-rw-r--r-- | AUTHORS | 3 | ||||
-rw-r--r-- | COPYING | 339 | ||||
-rw-r--r-- | ChangeLog | 75 | ||||
-rw-r--r-- | INSTALL | 236 | ||||
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | NEWS | 0 | ||||
-rw-r--r-- | README | 0 | ||||
-rw-r--r-- | TODO | 12 | ||||
-rwxr-xr-x | autogen.sh | 4 | ||||
-rw-r--r-- | configure.ac | 59 | ||||
-rw-r--r-- | data/Makefile.am | 3 | ||||
-rw-r--r-- | data/xml/ConnectionManager.xml | 215 | ||||
-rw-r--r-- | data/xml/ContentDirectory.xml | 539 | ||||
-rw-r--r-- | data/xml/Makefile.am | 11 | ||||
-rw-r--r-- | data/xml/description.xml | 35 | ||||
-rw-r--r-- | doc/design.txt | 16 | ||||
-rw-r--r-- | src/Makefile.am | 20 | ||||
-rw-r--r-- | src/gupnp-media-server.c | 461 | ||||
-rw-r--r-- | src/gupnp-media-server.h | 79 | ||||
-rw-r--r-- | src/main.c | 323 |
20 files changed, 0 insertions, 2434 deletions
diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index df1c74da..00000000 --- a/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Jorn Baayen <jorn@openedhand.com> -Zeeshan Ali <zeenix@gstreamer.net> - diff --git a/COPYING b/COPYING deleted file mode 100644 index d511905c..00000000 --- a/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index 4a89500f..00000000 --- a/ChangeLog +++ /dev/null @@ -1,75 +0,0 @@ -2008-04-23 Zeeshan Ali Khattak <zeenix@gmail.com> - - * src/main.c: - - - Fetch the UDN and friendlyname from gconf and set them to default - values if gconf keys aren't already set. - - No need to load the modified description document anymore. - -2008-04-22 Zeeshan Ali Khattak <zeenix@gmail.com> - - * src/main.c: - - Let the context choose the hostname/IP and port for us if not - specified in gconf. - -2008-04-21 Zeeshan Ali Khattak <zeenix@gmail.com> - - * src/gupnp-media-server.c: - - - Implement 'BrowseMetadata'. - - Mime-type of mp3 files should be 'audio/mpeg' rather than - 'audio/mp3'. - - Host user's home directory as '/media' and update paths accordingly. - -2008-04-21 Zeeshan Ali Khattak <zeenix@gmail.com> - - * configure.ac: - * data/Makefile.am: - * data/xml/Makefile.am: - * src/Makefile.am: - - Update/fix the build system for our dummy MS. - -2008-04-21 Zeeshan Ali Khattak <zeenix@gmail.com> - - * src/gupnp-media-server.c: - * src/gupnp-media-server.h: - * src/main.c: - - Implement a dummy MS. - -2008-04-21 Zeeshan Ali Khattak <zeenix@gmail.com> - - * src/gupnp-media-server.c: - * src/gupnp-media-server.h: - - Update the copyright/licence header. - -2008-04-21 Zeeshan Ali Khattak <zeenix@gmail.com> - - * data/xml/ConnectionManager.xml: - * data/xml/ContentDirectory.xml: - * data/xml/description.xml: - - - Advertise version 2 of MS and AV services. - - Some minor updates. - -2008-04-13 Zeeshan Ali Khattak <zeenix@gmail.com> - - * doc/design.txt: - - Simpler design: - - Rename MediaDb to MediaProvider. - - Replace MediaDbGroup and MediaDbPlugin by a single MediaDb. - - * TODO: - - Add TODO file and put the general plan in there. - -2008-04-13 Zeeshan Ali Khattak <zeenix@gmail.com> - - * doc/design.txt: - - Add some more objects and description to design doc. - diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 56b077d6..00000000 --- a/INSTALL +++ /dev/null @@ -1,236 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. - -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - -These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - -You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - -By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PREFIX'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PREFIX', the package will -use PREFIX as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - -Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: - - /bin/bash ./configure CONFIG_SHELL=/bin/bash - -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. - -`configure' Invocation -====================== - -`configure' recognizes the following options to control how it operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index d05bc54b..00000000 --- a/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -SUBDIRS = src data - -# Extra clean files so that maintainer-clean removes *everything* -MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.sub configure depcomp install-sh ltmain.sh Makefile.in missing config.h.in diff --git a/README b/README deleted file mode 100644 index e69de29b..00000000 --- a/README +++ /dev/null @@ -1,12 +0,0 @@ -Before first release: - -* Implement a dummy Media Server -* Create the GUPnPMediaProvider interface -* Implement GUPnPMediaTracker -* Complete Media Server by starting to use GUPnPMediaTracker - -Before second release: - -* Implement GUPnPMediaDb -* Turn GUPnPMediaTracker into a plugin -* Use GUPnPMediaDb diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index 4849d800..00000000 --- a/autogen.sh +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh -autoreconf -v --install || exit 1 -glib-gettextize --force --copy || exit 1 -./configure --enable-maintainer-mode --enable-debug "$@" diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 88cbcec0..00000000 --- a/configure.ac +++ /dev/null @@ -1,59 +0,0 @@ -AC_PREREQ(2.53) -AC_INIT(gupnp-media-server, 0.1, http://www.gupnp.org/) -AM_INIT_AUTOMAKE() -AC_CONFIG_SRCDIR(src/main.c) -AM_CONFIG_HEADER(config.h) -AM_MAINTAINER_MODE - -AC_ISC_POSIX -AC_PROG_CC -AC_STDC_HEADERS -AC_PROG_LIBTOOL -AC_FUNC_MMAP - -GUPNP_REQUIRED=0.6 -GUPNP_AV_REQUIRED=0.1 -GCONF_REQUIRED=2.22 - -PKG_CHECK_MODULES(LIBGUPNP, gupnp-1.0 >= $GUPNP_REQUIRED) -PKG_CHECK_MODULES(LIBGUPNP_AV, gupnp-av-1.0 >= $GUPNP_AV_REQUIRED) -PKG_CHECK_MODULES(LIBGCONF, gconf-2.0 >= $GCONF_REQUIRED) - -# glib-genmarshal -GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0` -AC_SUBST(GLIB_GENMARSHAL) - -# Debugging -AC_ARG_ENABLE(debug, - [ --enable-debug enable debugging],, - enable_debug=no) -if test "x$enable_debug" = "xyes"; then - CFLAGS="$CFLAGS -g -Wall -Werror" -fi - -# Run uninstalled -AC_ARG_ENABLE(uninstalled, - [ --enable-uninstalled run uninstalled],, - enable_uninstalled=no) -if test "x$enable_uninstalled" = "xyes"; then - AC_MSG_WARN("You want to run the tools uninstalled only? Fine!") -fi - -AM_CONDITIONAL([UNINSTALLED], [test "x$enable_uninstalled" = "xyes"]) - -# Gettext -GETTEXT_PACKAGE=gupnp-media-server -AC_SUBST(GETTEXT_PACKAGE) -AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], - [Define the gettext package to be used]) - -ALL_LINGUAS="" -AM_GLIB_GNU_GETTEXT -AM_GLIB_DEFINE_LOCALEDIR([LOCALEDIR]) - -AC_OUTPUT([ -Makefile -src/Makefile -data/Makefile -data/xml/Makefile -]) diff --git a/data/Makefile.am b/data/Makefile.am deleted file mode 100644 index 56ea26e4..00000000 --- a/data/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -SUBDIRS = xml - -MAINTAINERCLEANFILES = Makefile.in diff --git a/data/xml/ConnectionManager.xml b/data/xml/ConnectionManager.xml deleted file mode 100644 index eb6889d2..00000000 --- a/data/xml/ConnectionManager.xml +++ /dev/null @@ -1,215 +0,0 @@ -<!--============================================================ -Title: UPnP AV Connection Manager Service (CM) Template - -Purpose: -To identify the required/optional actions and state variables -and the required allowed values defined by this service type. - -Note: -This file uses tabs (not spaces) for block indentation. -Any updates to this file should maintain this convention. -This includes disabling any automatic tab-to-space conversion -feature provided by your editor. -================================================================--><scpd> - <serviceStateTable> - <stateVariable> - <name>SourceProtocolInfo</name> - <sendEventsAttribute>yes</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>SinkProtocolInfo</name> - <sendEventsAttribute>yes</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>CurrentConnectionIDs</name> - <sendEventsAttribute>yes</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_ConnectionStatus</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - <allowedValueList> - <allowedValue>OK</allowedValue> - <allowedValue>ContentFormatMismatch</allowedValue> - <allowedValue>InsufficientBandwidth</allowedValue> - <allowedValue>UnreliableChannel</allowedValue> - <allowedValue>Unknown</allowedValue> - </allowedValueList> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_ConnectionManager</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_Direction</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - <allowedValueList> - <allowedValue>Input</allowedValue> - <allowedValue>Output</allowedValue> - </allowedValueList> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_ProtocolInfo</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_ConnectionID</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>i4</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_AVTransportID</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>i4</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_RcsID</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>i4</dataType> - </stateVariable> - </serviceStateTable> - - <actionList> - <action> - <name>GetProtocolInfo</name> - <argumentList> - <argument> - <name>Source</name> - <direction>out</direction> - <relatedStateVariable>SourceProtocolInfo</relatedStateVariable> - </argument> - <argument> - <name>Sink</name> - <direction>out</direction> - <relatedStateVariable>SinkProtocolInfo</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>PrepareForConnection</name> - <argumentList> - <argument> - <name>RemoteProtocolInfo</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ProtocolInfo</relatedStateVariable> - </argument> - <argument> - <name>PeerConnectionManager</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionManager</relatedStateVariable> - </argument> - <argument> - <name>PeerConnectionID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionID</relatedStateVariable> - </argument> - <argument> - <name>Direction</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Direction</relatedStateVariable> - </argument> - <argument> - <name>ConnectionID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionID</relatedStateVariable> - </argument> - <argument> - <name>AVTransportID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_AVTransportID</relatedStateVariable> - </argument> - <argument> - <name>RcsID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_RcsID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>ConnectionComplete</name> - <argumentList> - <argument> - <name>ConnectionID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <name>GetCurrentConnectionIDs</name> - <argumentList> - <argument> - <name>ConnectionIDs</name> - <direction>out</direction> - <relatedStateVariable>CurrentConnectionIDs</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <name>GetCurrentConnectionInfo</name> - <argumentList> - <argument> - <name>ConnectionID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionID</relatedStateVariable> - </argument> - <argument> - <name>RcsID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_RcsID</relatedStateVariable> - </argument> - <argument> - <name>AVTransportID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_AVTransportID</relatedStateVariable> - </argument> - <argument> - <name>ProtocolInfo</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ProtocolInfo</relatedStateVariable> - </argument> - <argument> - <name>PeerConnectionManager</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionManager</relatedStateVariable> - </argument> - <argument> - <name>PeerConnectionID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionID</relatedStateVariable> - </argument> - <argument> - <name>Direction</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Direction</relatedStateVariable> - </argument> - <argument> - <name>Status</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ConnectionStatus</relatedStateVariable> - </argument> - </argumentList> - </action> - </actionList> -</scpd> diff --git a/data/xml/ContentDirectory.xml b/data/xml/ContentDirectory.xml deleted file mode 100644 index d74a43ca..00000000 --- a/data/xml/ContentDirectory.xml +++ /dev/null @@ -1,539 +0,0 @@ -<!--============================================================ -Title: UPnP AV Content Directory Service (CDS) Template - -Purpose: -To identify the required/optional actions and state variables -and the required allowed values defined by this service type. - -Note: -This file uses tabs (not spaces) for block indentation. -Any updates to this file should maintain this convention. -This includes disabling any automatic tab-to-space conversion -feature provided by your editor. -================================================================--> -<scpd> - <serviceStateTable> - <stateVariable> - <name>SearchCapabilities</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>SortCapabilities</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>SortExtensionCapabilities</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>SystemUpdateID</name> - <sendEventsAttribute>yes</sendEventsAttribute> - <dataType>ui4</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>ContainerUpdateIDs</name> - <sendEventsAttribute>yes</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>TransferIDs</name> - <sendEventsAttribute>yes</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>FeatureList</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_ObjectID</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_Result</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_SearchCriteria</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_BrowseFlag</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - <allowedValueList> - <allowedValue>BrowseMetadata</allowedValue> - <allowedValue>BrowseDirectChildren</allowedValue> - </allowedValueList> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_Filter</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_SortCriteria</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_Index</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>ui4</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_Count</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>ui4</dataType> - </stateVariable> - - <stateVariable> - <name>A_ARG_TYPE_UpdateID</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>ui4</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_TransferID</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>ui4</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_TransferStatus</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - <allowedValueList> - <allowedValue>COMPLETED</allowedValue> - <allowedValue>ERROR</allowedValue> - <allowedValue>IN_PROGRESS</allowedValue> - <allowedValue>STOPPED</allowedValue> - </allowedValueList> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_TransferLength</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_TransferTotal</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_TagValueList</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>string</dataType> - </stateVariable> - - <stateVariable> - <Optional/> - <name>A_ARG_TYPE_URI</name> - <sendEventsAttribute>no</sendEventsAttribute> - <dataType>uri</dataType> - </stateVariable> - </serviceStateTable> - - <actionList> - <action> - <name>GetSearchCapabilities</name> - <argumentList> - <argument> - <name>SearchCaps</name> - <direction>out</direction> - <relatedStateVariable>SearchCapabilities</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <name>GetSortCapabilities</name> - <argumentList> - <argument> - <name>SortCaps</name> - <direction>out</direction> - <relatedStateVariable>SortCapabilities</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>GetSortExtensionCapabilities</name> - <argumentList> - <argument> - <name>SortExtensionCaps</name> - <direction>out</direction> - <relatedStateVariable>SortExtensionCapabilities</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <name>GetFeatureList</name> - <argumentList> - <argument> - <name>FeatureList</name> - <direction>out</direction> - <relatedStateVariable>FeatureList</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <name>GetSystemUpdateID</name> - <argumentList> - <argument> - <name>Id</name> - <direction>out</direction> - <relatedStateVariable>SystemUpdateID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <name>Browse</name> - <argumentList> - <argument> - <name>ObjectID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>BrowseFlag</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_BrowseFlag</relatedStateVariable> - </argument> - <argument> - <name>Filter</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Filter</relatedStateVariable> - </argument> - <argument> - <name>StartingIndex</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Index</relatedStateVariable> - </argument> - <argument> - <name>RequestedCount</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable> - </argument> - <argument> - <name>SortCriteria</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_SortCriteria</relatedStateVariable> - </argument> - <argument> - <name>Result</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable> - </argument> - <argument> - <name>NumberReturned</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable> - </argument> - <argument> - <name>TotalMatches</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable> - </argument> - <argument> - <name>UpdateID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_UpdateID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>Search</name> - <argumentList> - <argument> - <name>ContainerID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>SearchCriteria</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_SearchCriteria</relatedStateVariable> - </argument> - <argument> - <name>Filter</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Filter</relatedStateVariable> - </argument> - <argument> - <name>StartingIndex</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Index</relatedStateVariable> - </argument> - <argument> - <name>RequestedCount</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable> - </argument> - <argument> - <name>SortCriteria</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_SortCriteria</relatedStateVariable> - </argument> - <argument> - <name>Result</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable> - </argument> - <argument> - <name>NumberReturned</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable> - </argument> - <argument> - <name>TotalMatches</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable> - </argument> - <argument> - <name>UpdateID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_UpdateID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>CreateObject</name> - <argumentList> - <argument> - <name>ContainerID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>Elements</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable> - </argument> - <argument> - <name>ObjectID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>Result</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>DestroyObject</name> - <argumentList> - <argument> - <name>ObjectID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>UpdateObject</name> - <argumentList> - <argument> - <name>ObjectID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>CurrentTagValue</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_TagValueList</relatedStateVariable> - </argument> - <argument> - <name>NewTagValue</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_TagValueList</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>MoveObject</name> - <argumentList> - <argument> - <name>objectID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>NewParentID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>NewObjectID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>ImportResource</name> - <argumentList> - <argument> - <name>SourceURI</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable> - </argument> - <argument> - <name>DestinationURI</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable> - </argument> - <argument> - <name>TransferID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_TransferID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>ExportResource</name> - <argumentList> - <argument> - <name>SourceURI</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable> - </argument> - <argument> - <name>DestinationURI</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable> - </argument> - <argument> - <name>TransferID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_TransferID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>DeleteResource</name> - <argumentList> - <argument> - <name>ResourceURI</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>StopTransferResource</name> - <argumentList> - <argument> - <name>TransferID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_TransferID</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>GetTransferProgress</name> - <argumentList> - <argument> - <name>TransferID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_TransferID</relatedStateVariable> - </argument> - <argument> - <name>TransferStatus</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_TransferStatus</relatedStateVariable> - </argument> - <argument> - <name>TransferLength</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_TransferLength</relatedStateVariable> - </argument> - <argument> - <name>TransferTotal</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_TransferTotal</relatedStateVariable> - </argument> - </argumentList> - </action> - - <action> - <Optional/> - <name>CreateReference</name> - <argumentList> - <argument> - <name>ContainerID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>ObjectID</name> - <direction>in</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - <argument> - <name>NewID</name> - <direction>out</direction> - <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable> - </argument> - </argumentList> - </action> - </actionList> -</scpd> diff --git a/data/xml/Makefile.am b/data/xml/Makefile.am deleted file mode 100644 index 6f74dda0..00000000 --- a/data/xml/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -xml_DATA = description.xml \ - ConnectionManager.xml \ - ContentDirectory.xml - -xmldir = $(datadir)/gupnp-media-server/xml - -EXTRA_DIST = $(xml_DATA) - -MAINTAINERCLEANFILES = Makefile.in - - diff --git a/data/xml/description.xml b/data/xml/description.xml deleted file mode 100644 index 4aacdec1..00000000 --- a/data/xml/description.xml +++ /dev/null @@ -1,35 +0,0 @@ -<root xmlns="urn:schemas-upnp-org:device-1-0"> -<specVersion> -<major>1</major> -<minor>0</minor> -</specVersion> -<device> -<deviceType>urn:schemas-upnp-org:device:MediaServer:2</deviceType> -<UDN></UDN> -<friendlyName></friendlyName> -<manufacturer>GUPnP Team</manufacturer> -<manufacturerURL>http://www.gupnp.org/</manufacturerURL> -<modelName>gupnp-media-server</modelName> -<modelNumber>0.1</modelNumber> -<modelDescription></modelDescription> -<serialNumber>0000001</serialNumber> -<UPC></UPC> -<presentationURL></presentationURL> -<serviceList> -<service> -<serviceType>urn:schemas-upnp-org:service:ContentDirectory:2</serviceType> -<serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId> -<SCPDURL>xml/ContentDirectory.xml</SCPDURL> -<eventSubURL>/ContentDirectory/Event</eventSubURL> -<controlURL>/ContentDirectory/Control</controlURL> -</service> -<service> -<serviceType>urn:schemas-upnp-org:service:ConnectionManager:2</serviceType> -<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId> -<SCPDURL>xml/ConnectionManager.xml</SCPDURL> -<eventSubURL>/ConnectionManager/Event</eventSubURL> -<controlURL>/ConnectionManager/Control</controlURL> -</service> -</serviceList> -</device> -</root> diff --git a/doc/design.txt b/doc/design.txt deleted file mode 100644 index feaa978c..00000000 --- a/doc/design.txt +++ /dev/null @@ -1,16 +0,0 @@ -objects and interfaces: - -Name: GUPnPMediaServer -description: The MediaServer implementing singleton object. - -Name: GUPnPMediaProvider -description: Interface that all Media provider/backend objects must implement. - -Name: GUPnPMediaDb -description: Object that: - - imlements GUPnPMediaProvider - - manages plugins that provides GUPnPMediaProvider - -Name: GUPnPMetadataExtractor -description: Helper object providing metadata extraction facility. - diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index 3ebd3916..00000000 --- a/src/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -if UNINSTALLED -shareddir = $(abs_top_builddir)/data -else -shareddir = $(datadir)/gupnp-media-server -endif - -AM_CFLAGS = $(LIBGUPNP_CFLAGS) $(LIBGUPNP_AV_CFLAGS) $(LIBGCONF_CFLAGS) \ - -I$(top_srcdir) -DDATA_DIR='"$(shareddir)"' - -bin_PROGRAMS = gupnp-media-server - -gupnp_media_server_SOURCES = main.c \ - gupnp-media-server.h \ - gupnp-media-server.c -gupnp_media_server_LDADD = $(LIBGUPNP_LIBS) \ - $(LIBGUPNP_AV_LIBS) \ - $(LIBGCONF_LIBS) -gupnp_media_server_LDFLAGS = -export-dynamic - -MAINTAINERCLEANFILES = Makefile.in diff --git a/src/gupnp-media-server.c b/src/gupnp-media-server.c deleted file mode 100644 index a4a037c5..00000000 --- a/src/gupnp-media-server.c +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright (C) 2008 Zeeshan Ali <zeenix@gmail.com>. - * Copyright (C) 2007 OpenedHand Ltd. - * - * Author: Zeeshan Ali <zeenix@gmail.com> - * Jorn Baayen <jorn@openedhand.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - */ - -#include <string.h> -#include <libgupnp/gupnp.h> -#include <libgupnp-av/gupnp-av.h> - -#include "gupnp-media-server.h" - -#define HOME_DIR_ALIAS "/media" - -G_DEFINE_TYPE (GUPnPMediaServer, - gupnp_media_server, - GUPNP_TYPE_ROOT_DEVICE); - -struct _GUPnPMediaServerPrivate { - guint32 system_update_id; - - GUPnPService *content_dir; - - GUPnPDIDLLiteWriter *didl_writer; - GUPnPSearchCriteriaParser *search_parser; -}; - -/* Hard-coded items (mime, title, path) - * - * paths are relative to home directory - * */ -char *items[3][4] = { - { "4000", - "audio/mpeg", - "Maa", - "entertainment/songs/Maa.mp3" }, - { "4001", - "audio/mpeg", - "Hoo", - "entertainment/songs/Ho.mp3" }, - { NULL } -}; - -/* GObject stuff */ -static void -gupnp_media_server_dispose (GObject *object) -{ - GUPnPMediaServer *server; - GObjectClass *object_class; - - server = GUPNP_MEDIA_SERVER (object); - - /* Free GUPnP resources */ - if (server->priv->search_parser) { - g_object_unref (server->priv->search_parser); - server->priv->search_parser = NULL; - } - - if (server->priv->didl_writer) { - g_object_unref (server->priv->didl_writer); - server->priv->didl_writer = NULL; - } - if (server->priv->content_dir) { - g_object_unref (server->priv->content_dir); - server->priv->content_dir = NULL; - } - - /* Call super */ - object_class = G_OBJECT_CLASS (gupnp_media_server_parent_class); - object_class->dispose (object); -} - -static void -gupnp_media_server_init (GUPnPMediaServer *server) -{ - server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, - GUPNP_TYPE_MEDIA_SERVER, - GUPnPMediaServerPrivate); - - /* Create a new DIDL-Lite writer */ - server->priv->didl_writer = gupnp_didl_lite_writer_new (); - - /* Create a new search criteria parser */ - server->priv->search_parser = gupnp_search_criteria_parser_new (); -} - -static GObject * -gupnp_media_server_constructor (GType type, - guint n_construct_params, - GObjectConstructParam *construct_params) -{ - GObject *object; - GObjectClass *object_class; - GUPnPMediaServer *server; - GUPnPServiceInfo *service; - GUPnPContext *context; - - object_class = G_OBJECT_CLASS (gupnp_media_server_parent_class); - object = object_class->constructor (type, - n_construct_params, - construct_params); - - if (object == NULL) - return NULL; - - server = GUPNP_MEDIA_SERVER (object); - - /* Connect ContentDirectory signals */ - service = gupnp_device_info_get_service - (GUPNP_DEVICE_INFO (server), - "urn:schemas-upnp-org:service:ContentDirectory:2"); - if (service != NULL) { - GError *error; - - server->priv->content_dir = GUPNP_SERVICE (service); - - error = NULL; - gupnp_service_signals_autoconnect (server->priv->content_dir, - server, - &error); - if (error) { - g_warning ("Error autoconnecting signals: %s", - error->message); - g_error_free (error); - } - } - - context = gupnp_device_info_get_context (GUPNP_DEVICE_INFO (server)); - - /* Host user's home dir */ - gupnp_context_host_path (context, g_get_home_dir (), HOME_DIR_ALIAS); - - return object; -} - -static void -gupnp_media_server_class_init (GUPnPMediaServerClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - - object_class->dispose = gupnp_media_server_dispose; - object_class->constructor = gupnp_media_server_constructor; - - g_type_class_add_private (klass, sizeof (GUPnPMediaServerPrivate)); -} - -static void -add_root_container (GUPnPDIDLLiteWriter *didl_writer) -{ - guint child_count; - - /* Count items */ - for (child_count = 0; items[child_count][0]; child_count++); - - gupnp_didl_lite_writer_start_container (didl_writer, - "0", - "-1", - child_count, - FALSE, - FALSE); - - gupnp_didl_lite_writer_add_string - (didl_writer, - "class", - GUPNP_DIDL_LITE_WRITER_NAMESPACE_UPNP, - NULL, - "object.container.storageFolder"); - - /* End of Container */ - gupnp_didl_lite_writer_end_container (didl_writer); -} - -static void -add_item (GUPnPContext *context, - GUPnPDIDLLiteWriter *didl_writer, - const char *id, - const char *parent_id, - const char *mime, - const char *title, - const char *path) -{ - GUPnPDIDLLiteResource res; - - gupnp_didl_lite_writer_start_item (didl_writer, - id, - parent_id, - NULL, - FALSE); - - /* Add fields */ - gupnp_didl_lite_writer_add_string (didl_writer, - "title", - GUPNP_DIDL_LITE_WRITER_NAMESPACE_DC, - NULL, - title); - - gupnp_didl_lite_writer_add_string - (didl_writer, - "class", - GUPNP_DIDL_LITE_WRITER_NAMESPACE_UPNP, - NULL, - "object.item.audioItem.musicTrack"); - - gupnp_didl_lite_writer_add_string - (didl_writer, - "album", - GUPNP_DIDL_LITE_WRITER_NAMESPACE_UPNP, - NULL, - "Some album"); - - /* Add resource data */ - gupnp_didl_lite_resource_reset (&res); - - /* URI */ - res.uri = g_strdup_printf ("http://%s:%d%s/%s", - gupnp_context_get_host_ip (context), - gupnp_context_get_port (context), - HOME_DIR_ALIAS, - path); - - /* Protocol info */ - res.protocol_info = g_strdup_printf ("http-get:*:%s:*", mime); - - gupnp_didl_lite_writer_add_res (didl_writer, &res); - - /* Cleanup */ - g_free (res.protocol_info); - g_free (res.uri); - - /* End of item */ - gupnp_didl_lite_writer_end_item (didl_writer); -} - -static char * -browse_direct_children (GUPnPMediaServer *server, guint *num_returned) -{ - GUPnPContext *context; - const char *didl; - char *result; - guint i; - - context = gupnp_device_info_get_context (GUPNP_DEVICE_INFO (server)); - - /* Start DIDL-Lite fragment */ - gupnp_didl_lite_writer_start_didl_lite (server->priv->didl_writer, - NULL, - NULL, - TRUE); - /* Add items */ - for (i = 0; items[i][0]; i++) - add_item (context, - server->priv->didl_writer, - items[i][0], - "0", - items[i][1], - items[i][2], - items[i][3]); - - /* End DIDL-Lite fragment */ - gupnp_didl_lite_writer_end_didl_lite (server->priv->didl_writer); - - /* Retrieve generated string */ - didl = gupnp_didl_lite_writer_get_string (server->priv->didl_writer); - result = g_strdup (didl); - - /* Reset the parser state */ - gupnp_didl_lite_writer_reset (server->priv->didl_writer); - - *num_returned = i; - - return result; -} - -static char * -get_metadata (GUPnPMediaServer *server, - const char *object_id, - guint *num_returned) -{ - GUPnPContext *context; - char *result; - guint i; - - context = gupnp_device_info_get_context (GUPNP_DEVICE_INFO (server)); - - /* Start DIDL-Lite fragment */ - gupnp_didl_lite_writer_start_didl_lite (server->priv->didl_writer, - NULL, - NULL, - TRUE); - *num_returned = 0; - if (strcmp (object_id, "0") == 0) { - add_root_container (server->priv->didl_writer); - - *num_returned = 1; - } else { - /* Find and add the item */ - for (i = 0; items[i][0]; i++) { - if (strcmp (object_id, items[i][0]) == 0) { - add_item (context, - server->priv->didl_writer, - items[i][0], - "0", - items[i][1], - items[i][2], - items[i][3]); - - *num_returned = 1; - - break; - } - } - } - - if (*num_returned != 0) { - const char *didl; - - /* End DIDL-Lite fragment */ - gupnp_didl_lite_writer_end_didl_lite - (server->priv->didl_writer); - - /* Retrieve generated string */ - didl = gupnp_didl_lite_writer_get_string - (server->priv->didl_writer); - result = g_strdup (didl); - } else - result = NULL; - - /* Reset the parser state */ - gupnp_didl_lite_writer_reset (server->priv->didl_writer); - - return result; -} - -/* Browse action implementation */ -void -browse_cb (GUPnPService *service, - GUPnPServiceAction *action, - gpointer user_data) -{ - GUPnPMediaServer *server; - char *object_id, *browse_flag; - gboolean browse_metadata; - char *result; - guint num_returned; - - server = GUPNP_MEDIA_SERVER (user_data); - - /* Handle incoming arguments */ - gupnp_service_action_get (action, - "ObjectID", - G_TYPE_STRING, - &object_id, - "BrowseFlag", - G_TYPE_STRING, - &browse_flag, - NULL); - - /* BrowseFlag */ - if (browse_flag && !strcmp (browse_flag, "BrowseDirectChildren")) { - browse_metadata = FALSE; - } else if (browse_flag && !strcmp (browse_flag, "BrowseMetadata")) { - browse_metadata = TRUE; - } else { - gupnp_service_action_return_error - (action, GUPNP_CONTROL_ERROR_INVALID_ARGS, NULL); - - goto OUT; - } - - /* ObjectID */ - if (!object_id) { - gupnp_service_action_return_error - (action, 701, "No such object"); - - goto OUT; - } - - if (browse_metadata) { - result = get_metadata (server, object_id, &num_returned); - - if (result == NULL) { - gupnp_service_action_return_error - (action, 701, "No such object"); - - goto OUT; - } - } else { - /* We only have a root object */ - if (strcmp (object_id, "0")) { - gupnp_service_action_return_error - (action, 701, "No such object"); - - goto OUT; - } - - result = browse_direct_children (server, &num_returned); - } - - /* Set action return arguments */ - gupnp_service_action_set (action, - "Result", - G_TYPE_STRING, - result, - "NumberReturned", - G_TYPE_UINT, - num_returned, - "TotalMatches", - G_TYPE_UINT, - num_returned, - "UpdateID", - G_TYPE_UINT, - server->priv->system_update_id, - NULL); - - gupnp_service_action_return (action); - - g_free (result); -OUT: - g_free (object_id); -} - -GUPnPMediaServer * -gupnp_media_server_new (GUPnPContext *context, - xmlDoc *description_doc, - const char *relative_location) -{ - GUPnPResourceFactory *factory; - - factory = gupnp_resource_factory_get_default (); - - return g_object_new (GUPNP_TYPE_MEDIA_SERVER, - "context", context, - "resource-factory", factory, - "root-device", NULL, - "description-doc", description_doc, - "relative-location", relative_location, - NULL); -} - diff --git a/src/gupnp-media-server.h b/src/gupnp-media-server.h deleted file mode 100644 index 4f3cbea9..00000000 --- a/src/gupnp-media-server.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2008 Zeeshan Ali <zeenix@gmail.com>. - * Copyright (C) 2007 OpenedHand Ltd. - * - * Author: Zeeshan Ali <zeenix@gmail.com> - * Jorn Baayen <jorn@openedhand.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __GUPNP_MEDIA_SERVER_H__ -#define __GUPNP_MEDIA_SERVER_H__ - -#include <libgupnp/gupnp.h> - -G_BEGIN_DECLS - -GType -gupnp_media_server_get_type (void) G_GNUC_CONST; - -#define GUPNP_TYPE_MEDIA_SERVER \ - (gupnp_media_server_get_type ()) -#define GUPNP_MEDIA_SERVER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - GUPNP_TYPE_MEDIA_SERVER, \ - GUPnPMediaServer)) -#define GUPNP_MEDIA_SERVER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_CAST ((obj), \ - GUPNP_TYPE_MEDIA_SERVER, \ - GUPnPMediaServerClass)) -#define GUPNP_IS_MEDIA_SERVER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - GUPNP_TYPE_MEDIA_SERVER)) -#define GUPNP_IS_MEDIA_SERVER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE ((obj), \ - GUPNP_TYPE_MEDIA_SERVER)) -#define GUPNP_MEDIA_SERVER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - GUPNP_TYPE_MEDIA_SERVER, \ - GUPnPMediaServerClass)) - -typedef struct _GUPnPMediaServerPrivate GUPnPMediaServerPrivate; - -typedef struct { - GUPnPRootDevice parent; - - GUPnPMediaServerPrivate *priv; -} GUPnPMediaServer; - -typedef struct { - GUPnPRootDeviceClass parent_class; - - /* future padding */ - void (* _gupnp_reserved1) (void); - void (* _gupnp_reserved2) (void); - void (* _gupnp_reserved3) (void); - void (* _gupnp_reserved4) (void); -} GUPnPMediaServerClass; - -GUPnPMediaServer * -gupnp_media_server_new (GUPnPContext *context, - xmlDoc *description_doc, - const char *relative_location); - -G_END_DECLS - -#endif /* __GUPNP_MEDIA_SERVER_H__ */ diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 677f6b90..00000000 --- a/src/main.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright (C) 2007 Zeeshan Ali. - * Copyright (C) 2007 OpenedHand Ltd. - * - * Author: Zeeshan Ali <zeenix@gstreamer.net> - * Author: Jorn Baayen <jorn@openedhand.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include <stdio.h> -#include <locale.h> -#include <string.h> -#include <gconf/gconf-client.h> -#include <uuid/uuid.h> - -#include "gupnp-media-server.h" - -#define DESC_DOC "xml/description.xml" -#define MODIFIED_DESC_DOC "gupnp-media-server.xml" -#define GCONF_PATH "/apps/gupnp-media-server/" - -static GMainLoop *main_loop; - -/* Copy-paste from gupnp. */ -static xmlNode * -xml_util_get_element (xmlNode *node, - ...) -{ - va_list var_args; - - va_start (var_args, node); - - while (TRUE) { - const char *arg; - - arg = va_arg (var_args, const char *); - if (!arg) - break; - - for (node = node->children; node; node = node->next) - if (!strcmp (arg, (char *) node->name)) - break; - - if (!node) - break; - } - - va_end (var_args); - - return node; -} - -static GUPnPContext * -create_context (GConfClient *gconf_client, - char *desc_path) -{ - GUPnPContext *context; - char *host_ip; - int port; - GError *error; - - error = NULL; - host_ip = gconf_client_get_string (gconf_client, - GCONF_PATH "host-ip", - &error); - if (error) { - g_warning ("%s", error->message); - - g_error_free (error); - } - - error = NULL; - port = gconf_client_get_int (gconf_client, - GCONF_PATH "port", - &error); - if (error) { - g_warning ("%s", error->message); - - g_error_free (error); - } - - error = NULL; - context = gupnp_context_new (NULL, host_ip, port, &error); - - if (host_ip) - g_free (host_ip); - - if (error) { - g_warning ("Error setting up GUPnP context: %s", - error->message); - g_error_free (error); - - return NULL; - } - - /* Host UPnP dir */ - gupnp_context_host_path (context, DATA_DIR, ""); - - /* Host our modified file */ - gupnp_context_host_path (context, desc_path, "/" MODIFIED_DESC_DOC); - - return context; -} - -static char * -get_str_from_gconf (GConfClient *gconf_client, - const char *key, - const char *default_value) -{ - char *str; - - str = gconf_client_get_string (gconf_client, key, NULL); - if (str == NULL) { - GError *error; - - str = g_strdup (default_value); - - error = NULL; - gconf_client_set_string (gconf_client, key, str, &error); - if (error) { - g_warning ("Error setting gconf key '%s': %s.", - key, - error->message); - - g_error_free (error); - g_free (str); - - str = NULL; - } - } - - return str; -} - -/* Fills the description doc @doc with a friendly name, and UDN from gconf. If - * these keys are not present in gconf, they are set with default values */ -static void -set_friendly_name_and_udn (xmlDoc *doc, - GConfClient *gconf_client) -{ - xmlNode *device_element; - xmlNode *element; - char *str, *default_value; - xmlChar *xml_str; - uuid_t id; - - device_element = xml_util_get_element ((xmlNode *) doc, - "root", - "device", - NULL); - if (device_element == NULL) { - g_warning ("Element /root/device not found."); - - return; - } - - /* friendlyName */ - element = xml_util_get_element (device_element, - "friendlyName", - NULL); - if (element == NULL) { - g_warning ("Element /root/device/friendlyName not found."); - - return; - } - - default_value = g_strdup_printf ("%s's GUPnP MediaServer", - g_get_real_name ()); - str = get_str_from_gconf (gconf_client, - GCONF_PATH "friendly-name", - default_value); - g_free (default_value); - - if (str == NULL) { - return; - } - - xml_str = xmlEncodeSpecialChars (doc, (xmlChar *) str); - g_free (str); - - xmlNodeSetContent (element, xml_str); - - xmlFree (xml_str); - - /* UDN */ - element = xml_util_get_element (device_element, - "UDN", - NULL); - if (element == NULL) { - g_warning ("Element /root/device/UDN not found."); - - return; - } - - default_value = g_malloc (64); - strcpy (default_value, "uuid:"); - - /* Generate new UUID */ - uuid_generate (id); - uuid_unparse (id, default_value + 5); - - str = get_str_from_gconf (gconf_client, - GCONF_PATH "UDN", - default_value); - g_free (default_value); - - if (str == NULL) { - return; - } - - xmlNodeSetContent (element, (xmlChar *) str); -} - -static GUPnPMediaServer * -create_ms (void) -{ - GUPnPMediaServer *server; - GUPnPContext *context; - GConfClient *gconf_client; - char *desc_path; - xmlDoc *doc; - FILE *f; - int res; - - /* We store a modified description.xml in the user's config dir */ - desc_path = g_build_filename (g_get_user_config_dir (), - MODIFIED_DESC_DOC, - NULL); - - doc = xmlParseFile (DATA_DIR G_DIR_SEPARATOR_S DESC_DOC); - - if (doc == NULL) - return NULL; - - gconf_client = gconf_client_get_default (); - - /* Modify description.xml to include a UDN and a friendy name */ - set_friendly_name_and_udn (doc, gconf_client); - - /* Save the modified description.xml into the user's config dir. - * We do this so that we can host the modified file, and also to - * make sure the generated UDN stays the same between sessions. */ - f = fopen (desc_path, "w+"); - - if (f != NULL) { - res = xmlDocDump (f, doc); - - fclose (f); - } - - if (f == NULL || res == -1) { - g_critical ("Failed to write modified" - " description.xml to %s.\n", - desc_path); - - g_free (desc_path); - xmlFreeDoc (doc); - g_object_unref (gconf_client); - - return NULL; - } - - /* Set up GUPnP context */ - context = create_context (gconf_client, desc_path); - if (!context) { - g_free (desc_path); - xmlFreeDoc (doc); - g_object_unref (gconf_client); - - return NULL; - } - - g_object_unref (gconf_client); - g_free (desc_path); - - /* Set up the root device */ - server = gupnp_media_server_new (context, - doc, - MODIFIED_DESC_DOC); - g_object_unref (context); - g_object_weak_ref (G_OBJECT (server), - (GWeakNotify) xmlFreeDoc, doc); - - /* Make our device available */ - gupnp_root_device_set_available (GUPNP_ROOT_DEVICE (server), TRUE); - - return server; -} - -int -main (int argc, char **argv) -{ - GUPnPMediaServer *server; - - g_type_init (); - - server = create_ms (); - if (server == NULL) { - return -1; - } - - main_loop = g_main_loop_new (NULL, FALSE); - g_main_loop_run (main_loop); - - g_main_loop_unref (main_loop); - g_object_unref (server); - - return 0; -} - |