diff options
author | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2010-01-19 23:01:36 +0000 |
---|---|---|
committer | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2010-01-19 23:01:36 +0000 |
commit | 8454b37d7aacc6dc9a13d718a80274f6354e9f19 (patch) | |
tree | 40bc2fed19e15f5a9a8997dc39df9c8176294dbb /scripts | |
parent | ef3a73a215c74b42e82819ffc944844d6c16359a (diff) | |
download | semanticscuttle-8454b37d7aacc6dc9a13d718a80274f6354e9f19.tar.gz semanticscuttle-8454b37d7aacc6dc9a13d718a80274f6354e9f19.tar.bz2 |
Implement request #2833793: Export to avahi config files
- we support zeroconf networking!
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@620 b3834d28-1941-0410-a4f8-b48e95affb8f
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/avahi-export.php | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/scripts/avahi-export.php b/scripts/avahi-export.php new file mode 100644 index 0000000..f609949 --- /dev/null +++ b/scripts/avahi-export.php @@ -0,0 +1,107 @@ +<?php +/** + * Exports bookmarks tagged with "zeroconf" + * as avahi service files. + * + * XML Documentation: "man 5 avahi.service" + * + * + * This file is part of + * SemanticScuttle - your social bookmark manager. + * + * PHP version 5. + * + * @category Bookmarking + * @package SemanticScuttle + * @author Christian Weiske <cweiske@cweiske.de> + * @license GPL http://www.gnu.org/licenses/gpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ +require_once dirname(__FILE__) . '/../src/SemanticScuttle/header-standalone.php'; + +$fileprefix = $GLOBALS['avahiServiceFilePrefix']; +$filepath = $GLOBALS['avahiServiceFilePath']; + +$arSchemes = array( + 'ftp' => array(21, '_ftp._tcp'), + 'ssh' => array(22, '_ftp._tcp'), + 'sftp' => array(22, '_sftp-ssh._tcp'), + 'http' => array(80, '_http._tcp'), +); + +if (!is_writable($filepath)) { + echo "avahi service directory is not writable:\n"; + echo $filepath . "\n"; + exit(1); +} + +//clean out existing SemanticScuttle service files +$existing = glob($filepath . '/' . $fileprefix . '*'); +if (count($existing) > 0) { + foreach ($existing as $file) { + unlink($file); + } +} + +$bs = SemanticScuttle_Service_Factory::get('Bookmark'); +$bookmarks = $bs->getBookmarks(0, null, null, $GLOBALS['avahiTagName']); +$bookmarks = $bookmarks['bookmarks']; + +if (count($bookmarks) == 0) { + echo 'No "' . $GLOBALS['avahiTagName'] . '"-tagged bookmarks available.' . "\n"; + exit(0); +} + +$written = 0; +foreach ($bookmarks as $bm) { + $xTitle = htmlspecialchars($bm['bTitle']); + $parts = parse_url($bm['bAddress']); + + if (!isset($parts['host'])) { + echo 'No hostname in: ' . $bm['bAddress'] . "\n"; + exit(2); + } + + $xHostname = htmlspecialchars($parts['host']); + $xPath = isset($parts['path']) ? $parts['path'] : ''; + if (isset($parts['query'])) { + $xPath .= '?' . $parts['query']; + } + if (isset($parts['fragment'])) { + $xPath .= '#' . $parts['fragment']; + } + + $scheme = isset($parts['scheme']) ? $parts['scheme'] : 'http'; + if (!isset($arSchemes[$scheme])) { + //dying is hard, but at least the user knows + // that something is seriously wrong + echo "Unknown scheme: $scheme\n"; + exit(3); + } + list($xPort, $xType) = $arSchemes[$scheme]; + + if (isset($parts['port'])) { + $xPort = (int)$parts['port']; + } + + $xml = <<<XML +<?xml version="1.0" standalone='no'?> +<!DOCTYPE service-group SYSTEM "avahi-service.dtd"> +<service-group> + <name>{$xTitle}</name> + <service> + <type>{$xType}</type> + <host-name>{$xHostname}</host-name> + <port>{$xPort}</port> + <txt-record>path={$xPath}</txt-record> + </service> +</service-group> +XML; + + $file = $filepath . '/' . $fileprefix . $bm['bId'] . '.service'; + file_put_contents($file, $xml); + ++$written; +} + +echo $written . " service files created\n"; +?>
\ No newline at end of file |