diff options
author | James Willcox <snopr@snorp.net> | 2007-04-19 21:01:45 +0000 |
---|---|---|
committer | James Willcox <snopr@snorp.net> | 2007-04-19 21:01:45 +0000 |
commit | 3025a26988fe2de9d14867056c945e20f490ec1e (patch) | |
tree | 3bcd3e15bce426c8dc1163b980dd34d5661d4e9d /avahi-ui-sharp | |
parent | 6d19f5e1d1800396007e0f26bac8232539a2094c (diff) |
add avahi-ui-sharp
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1444 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-ui-sharp')
-rw-r--r-- | avahi-ui-sharp/Makefile.am | 65 | ||||
-rw-r--r-- | avahi-ui-sharp/ServiceDialog.cs | 238 | ||||
-rw-r--r-- | avahi-ui-sharp/avahi-ui-sharp-docs.source | 4 | ||||
-rw-r--r-- | avahi-ui-sharp/avahi-ui-sharp.dll.config.in | 4 | ||||
-rw-r--r-- | avahi-ui-sharp/en/Avahi.UI.xml | 6 | ||||
-rw-r--r-- | avahi-ui-sharp/en/Avahi.UI/ServiceDialog.xml | 171 | ||||
-rw-r--r-- | avahi-ui-sharp/en/index.xml | 13 | ||||
-rwxr-xr-x | avahi-ui-sharp/gencfg.sh | 6 | ||||
-rw-r--r-- | avahi-ui-sharp/zssh.cs | 37 |
9 files changed, 544 insertions, 0 deletions
diff --git a/avahi-ui-sharp/Makefile.am b/avahi-ui-sharp/Makefile.am new file mode 100644 index 0000000..b7f020e --- /dev/null +++ b/avahi-ui-sharp/Makefile.am @@ -0,0 +1,65 @@ +# $Id: Makefile.am 1251 2006-08-21 23:31:59Z lennart $ + +# This file is part of avahi. +# +# avahi is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# avahi 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 Lesser General Public +# License along with avahi; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. + +ASSEMBLY = avahi-ui-sharp.dll + +CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb $(ASSEMBLY).config + +AVAHISOURCES = \ + $(srcdir)/ServiceDialog.cs + +EXTRA_DIST = \ + $(AVAHISOURCES) \ + $(srcdir)/avahi-ui-sharp-docs.source \ + $(srcdir)/en/*.xml \ + $(srcdir)/en/*/*.xml \ + $(srcdir)/gencfg.sh + +$(ASSEMBLY): $(AVAHISOURCES) + mcs -keyfile:$(top_srcdir)/avahi-sharp/avahi.snk -target:library -out:$@ -debug $(AVAHISOURCES) -pkg:gtk-sharp-2.0 -r:$(top_builddir)/avahi-sharp/avahi-sharp.dll -r:Mono.Posix + +$(ASSEMBLY).config: $(ASSEMBLY).config.in + $(srcdir)/gencfg.sh $(top_builddir)/avahi-common/libavahi-common.la < $< > $@ + +if HAVE_MONO +if HAVE_DBUS +all: $(ASSEMBLY) $(ASSEMBLY).config + +if HAVE_MONODOC +update-docs: $(ASSEMBLY) + $(MONODOCER) -assembly:$(ASSEMBLY) -path:en + +avahi-ui-sharp-docs.zip: avahi-ui-sharp-docs.tree + +avahi-ui-sharp-docs.tree: $(srcdir)/en/*/* + $(MDASSEMBLER) --out avahi-ui-sharp-docs --ecma $(srcdir)/en + +monodocdir = $(MONODOC_DIR) +monodoc_DATA = avahi-ui-sharp-docs.zip avahi-ui-sharp-docs.tree avahi-ui-sharp-docs.source + +endif + +install-data-hook: $(ASSEMBLY) + $(GACUTIL) /i $(ASSEMBLY) /package avahi-ui-sharp /gacdir $(libdir) /root $(DESTDIR)$(libdir) + +uninstall-hook: $(ASSEMBLY) + $(GACUTIL) /u avahi-sharp /package avahi-ui-sharp /gacdir $(libdir) /root $(DESTDIR)$(libdir) + +endif +endif diff --git a/avahi-ui-sharp/ServiceDialog.cs b/avahi-ui-sharp/ServiceDialog.cs new file mode 100644 index 0000000..e0306e1 --- /dev/null +++ b/avahi-ui-sharp/ServiceDialog.cs @@ -0,0 +1,238 @@ +using System; +using System.Net; +using System.Collections; +using System.Runtime.InteropServices; +using Gtk; +using Mono.Unix; +using Mono.Unix.Native; + +namespace Avahi.UI +{ + public class ServiceDialog : Dialog + { + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_new (string title, IntPtr parent, IntPtr dummy); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_browse_service_typesv (IntPtr dialog, IntPtr[] types); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_browse_service_types (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_domain (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_domain (IntPtr dialog, IntPtr domain); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_service_type (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_service_type (IntPtr dialog, IntPtr type); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_service_name (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_service_name (IntPtr dialog, IntPtr type); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_address (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern UInt16 aui_service_dialog_get_port (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_host_name (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern IntPtr aui_service_dialog_get_txt_data (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern bool aui_service_dialog_get_resolve_service (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_resolve_service (IntPtr dialog, bool val); + + [DllImport ("avahi-ui")] + private static extern bool aui_service_dialog_get_resolve_host_name (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_resolve_host_name (IntPtr dialog, bool val); + + [DllImport ("avahi-ui")] + private static extern Protocol aui_service_dialog_get_address_family (IntPtr dialog); + + [DllImport ("avahi-ui")] + private static extern void aui_service_dialog_set_address_family (IntPtr dialog, Protocol proto); + + [DllImport ("avahi-common")] + private static extern IntPtr avahi_address_snprint (IntPtr buf, int size, IntPtr address); + + [DllImport ("avahi-common")] + private static extern IntPtr avahi_string_list_get_next (IntPtr list); + + [DllImport ("avahi-common")] + private static extern IntPtr avahi_string_list_get_text (IntPtr list); + + [DllImport ("avahi-common")] + private static extern int avahi_string_list_get_size (IntPtr list); + + public string[] BrowseServiceTypes { + get { + IntPtr arr = aui_service_dialog_get_browse_service_types (Raw); + + ArrayList values = new ArrayList (); + + for (int i = 0;;i++) { + IntPtr ptr = Marshal.ReadIntPtr (arr, i * Marshal.SizeOf (typeof (IntPtr))); + + if (ptr == IntPtr.Zero) + break; + + values.Add (GLib.Marshaller.Utf8PtrToString (ptr)); + } + + return (string[]) values.ToArray (typeof (string)); + } set { + IntPtr[] types; + if (value == null) { + types = new IntPtr[] { IntPtr.Zero }; + } else { + types = new IntPtr[value.Length + 1]; + + for (int i = 0; i < value.Length; i++) { + types[i] = GLib.Marshaller.StringToPtrGStrdup (value[i]); + } + + types[value.Length] = IntPtr.Zero; + } + + aui_service_dialog_set_browse_service_typesv (Raw, types); + + for (int i = 0;;i++) { + if (types[i] != IntPtr.Zero) + break; + + GLib.Marshaller.Free (types[i]); + } + } + } + + public string ServiceType { + get { + return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_service_type (Raw)); + } set { + IntPtr type = GLib.Marshaller.StringToPtrGStrdup (value); + aui_service_dialog_set_service_type (Raw, type); + GLib.Marshaller.Free (type); + } + } + + public string ServiceName { + get { + return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_service_name (Raw)); + } set { + IntPtr name = GLib.Marshaller.StringToPtrGStrdup (value); + aui_service_dialog_set_service_name (Raw, name); + GLib.Marshaller.Free (name); + } + } + + public IPAddress Address { + get { + return PtrToAddress (aui_service_dialog_get_address (Raw)); + } + } + + public UInt16 Port { + get { + return aui_service_dialog_get_port (Raw); + } + } + + public string HostName { + get { + return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_host_name (Raw)); + } + } + + public string Domain { + get { + return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_domain (Raw)); + } set { + IntPtr domain = GLib.Marshaller.StringToPtrGStrdup (value); + aui_service_dialog_set_domain (Raw, domain); + GLib.Marshaller.Free (domain); + } + } + + public byte[][] TxtData { + get { + ArrayList txtlist = new ArrayList (); + IntPtr txt = aui_service_dialog_get_txt_data (Raw); + + for (IntPtr l = txt; l != IntPtr.Zero; l = avahi_string_list_get_next (l)) { + IntPtr buf = avahi_string_list_get_text (l); + int len = avahi_string_list_get_size (l); + + byte[] txtbuf = new byte[len]; + Marshal.Copy (buf, txtbuf, 0, len); + txtlist.Add (txtbuf); + } + + return (byte[][]) txtlist.ToArray (typeof (byte[])); + } + } + + public bool ResolveServiceEnabled { + get { + return aui_service_dialog_get_resolve_service (Raw); + } set { + aui_service_dialog_set_resolve_service (Raw, value); + } + } + + public bool ResolveHostNameEnabled { + get { + return aui_service_dialog_get_resolve_host_name (Raw); + } set { + aui_service_dialog_set_resolve_host_name (Raw, value); + } + } + + public Protocol AddressFamily { + get { + return aui_service_dialog_get_address_family (Raw); + } set { + aui_service_dialog_set_address_family (Raw, value); + } + } + + public ServiceDialog (string title, Window parent, params object[] buttonData) + { + Raw = aui_service_dialog_new (title, parent == null ? IntPtr.Zero : parent.Handle, + IntPtr.Zero); + + for (int i = 0; i < buttonData.Length - 1; i += 2) { + AddButton ((string) buttonData[i], (int) buttonData[i + 1]); + } + } + + private static IPAddress PtrToAddress (IntPtr ptr) + { + IPAddress address = null; + + if (ptr != IntPtr.Zero) { + IntPtr buf = Stdlib.malloc (256); + IntPtr addrPtr = avahi_address_snprint (buf, 256, ptr); + address = IPAddress.Parse (GLib.Marshaller.Utf8PtrToString (addrPtr)); + + Stdlib.free (addrPtr); + } + + return address; + } + } +} diff --git a/avahi-ui-sharp/avahi-ui-sharp-docs.source b/avahi-ui-sharp/avahi-ui-sharp-docs.source new file mode 100644 index 0000000..2e7b172 --- /dev/null +++ b/avahi-ui-sharp/avahi-ui-sharp-docs.source @@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<monodoc> + <source provider="ecma" basefile="avahi-ui-sharp-docs" path="various" title="Avahi" /> +</monodoc> diff --git a/avahi-ui-sharp/avahi-ui-sharp.dll.config.in b/avahi-ui-sharp/avahi-ui-sharp.dll.config.in new file mode 100644 index 0000000..819577f --- /dev/null +++ b/avahi-ui-sharp/avahi-ui-sharp.dll.config.in @@ -0,0 +1,4 @@ +<configuration> + <dllmap dll="avahi-ui" target="libavahi-ui.so.0"/> + <dllmap dll="avahi-common" target="@COMMON_DLNAME@"/> +</configuration> diff --git a/avahi-ui-sharp/en/Avahi.UI.xml b/avahi-ui-sharp/en/Avahi.UI.xml new file mode 100644 index 0000000..949581c --- /dev/null +++ b/avahi-ui-sharp/en/Avahi.UI.xml @@ -0,0 +1,6 @@ +<Namespace Name="Avahi.UI"> + <Docs> + <summary>To be added.</summary> + <remarks>To be added.</remarks> + </Docs> +</Namespace> diff --git a/avahi-ui-sharp/en/Avahi.UI/ServiceDialog.xml b/avahi-ui-sharp/en/Avahi.UI/ServiceDialog.xml new file mode 100644 index 0000000..72fa8ed --- /dev/null +++ b/avahi-ui-sharp/en/Avahi.UI/ServiceDialog.xml @@ -0,0 +1,171 @@ +<Type Name="ServiceDialog" FullName="Avahi.UI.ServiceDialog"> + <TypeSignature Language="C#" Value="public class ServiceDialog : Gtk.Dialog" /> + <AssemblyInfo> + <AssemblyName>avahi-ui-sharp</AssemblyName> + <AssemblyVersion>0.0.0.0</AssemblyVersion> + </AssemblyInfo> + <Base> + <BaseTypeName>Gtk.Dialog</BaseTypeName> + </Base> + <Interfaces /> + <Members> + <Member MemberName=".ctor"> + <MemberSignature Language="C#" Value="public ServiceDialog (string title, Gtk.Window parent, object[] buttonData);" /> + <MemberType>Constructor</MemberType> + <Parameters> + <Parameter Name="title" Type="System.String" /> + <Parameter Name="parent" Type="Gtk.Window" /> + <Parameter Name="buttonData" Type="System.Object[]"> + <Attributes> + <Attribute> + <AttributeName>System.ParamArray</AttributeName> + </Attribute> + </Attributes> + </Parameter> + </Parameters> + <Docs> + <param name="title">To be added.</param> + <param name="parent">To be added.</param> + <param name="buttonData">To be added.</param> + <summary>To be added.</summary> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="Address"> + <MemberSignature Language="C#" Value="public System.Net.IPAddress Address { get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.Net.IPAddress</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="AddressFamily"> + <MemberSignature Language="C#" Value="public Avahi.Protocol AddressFamily { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>Avahi.Protocol</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="BrowseServiceTypes"> + <MemberSignature Language="C#" Value="public string[] BrowseServiceTypes { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.String[]</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="Domain"> + <MemberSignature Language="C#" Value="public string Domain { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.String</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="HostName"> + <MemberSignature Language="C#" Value="public string HostName { get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.String</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="Port"> + <MemberSignature Language="C#" Value="public ushort Port { get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.UInt16</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="ResolveHostNameEnabled"> + <MemberSignature Language="C#" Value="public bool ResolveHostNameEnabled { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.Boolean</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="ResolveServiceEnabled"> + <MemberSignature Language="C#" Value="public bool ResolveServiceEnabled { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.Boolean</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="ServiceName"> + <MemberSignature Language="C#" Value="public string ServiceName { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.String</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="ServiceType"> + <MemberSignature Language="C#" Value="public string ServiceType { set; get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.String</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + <Member MemberName="TxtData"> + <MemberSignature Language="C#" Value="public byte[][] TxtData { get; };" /> + <MemberType>Property</MemberType> + <ReturnValue> + <ReturnType>System.Byte[][]</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <value>To be added.</value> + <remarks>To be added.</remarks> + </Docs> + </Member> + </Members> + <Docs> + <summary>To be added.</summary> + <remarks>To be added.</remarks> + </Docs> +</Type> diff --git a/avahi-ui-sharp/en/index.xml b/avahi-ui-sharp/en/index.xml new file mode 100644 index 0000000..d1e808c --- /dev/null +++ b/avahi-ui-sharp/en/index.xml @@ -0,0 +1,13 @@ +<Overview> + <Assemblies> + <Assembly Name="avahi-ui-sharp" Version="0.0.0.0" /> + </Assemblies> + <Remarks>To be added.</Remarks> + <Copyright>To be added.</Copyright> + <Types> + <Namespace Name="Avahi.UI"> + <Type Name="ServiceDialog" /> + </Namespace> + </Types> + <Title>avahi-ui-sharp</Title> +</Overview> diff --git a/avahi-ui-sharp/gencfg.sh b/avahi-ui-sharp/gencfg.sh new file mode 100755 index 0000000..44a6c81 --- /dev/null +++ b/avahi-ui-sharp/gencfg.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +. $1 +common_dlname=$dlname + +exec sed -e "s,@COMMON_DLNAME\@,${common_dlname},g" diff --git a/avahi-ui-sharp/zssh.cs b/avahi-ui-sharp/zssh.cs new file mode 100644 index 0000000..ad45ca9 --- /dev/null +++ b/avahi-ui-sharp/zssh.cs @@ -0,0 +1,37 @@ +using System; +using System.Diagnostics; +using Gtk; +using Avahi.UI; + +public class EntryPoint { + public static void Main () { + Application.Init (); + + ServiceDialog dialog = new ServiceDialog ("Choose SSH Server", null, Stock.Close, ResponseType.Cancel); + dialog.BrowseServiceTypes = new string[] { "_ssh._tcp" }; + dialog.ResolveServiceEnabled = true; + + if (dialog.Run () == (int) ResponseType.Accept) { + Console.WriteLine ("Connecting to {0}:{1}", dialog.Address, dialog.Port); + + string user = Environment.UserName; + + foreach (byte[] txtBytes in dialog.TxtData) { + string txt = System.Text.Encoding.UTF8.GetString (txtBytes); + string[] splitTxt = txt.Split(new char[] { '=' }, 2); + + if (splitTxt.Length != 2) + continue; + + if (splitTxt[0] == "u") { + user = splitTxt[1]; + } + + string args = String.Format ("gnome-terminal -t {0} -x ssh -p {1} -l {2} {3}", + dialog.HostName, dialog.Port, user, dialog.Address.ToString ()); + Console.WriteLine ("Launching: " + args); + Process.Start (args); + } + } + } +} |