banshee r3600 - in trunk/banshee: . src/Extensions/Banshee.Daap src/Extensions/Banshee.Daap/Banshee.Daap src/Extensions/Banshee.Daap/daap-sharp
- From: ahixon svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3600 - in trunk/banshee: . src/Extensions/Banshee.Daap src/Extensions/Banshee.Daap/Banshee.Daap src/Extensions/Banshee.Daap/daap-sharp
- Date: Sun, 30 Mar 2008 09:44:20 +0100 (BST)
Author: ahixon
Date: Sun Mar 30 09:44:20 2008
New Revision: 3600
URL: http://svn.gnome.org/viewvc/banshee?rev=3600&view=rev
Log:
2008-03-30 Alexander Hixon <hixon alexander mediati org>
* src/Extensions/Banshee.Daap/daap-sharp/Server.cs
* src/Extensions/Banshee.Daap/daap-sharp/Database.cs:
* src/Extensions/Banshee.Daap/daap-sharp/Client.cs: Fix some warnings so
it is actually possible to build the thing.
* src/Extensions/Banshee.Daap/daap-sharp/ContentCodeBag.cs: Only load the
content-code resource, instead of everything.
* src/Extensions/Banshee.Daap/daap-sharp/ServiceLocator.cs:
* src/Extensions/Banshee.Daap/daap-sharp/Server.cs: Use Mono.Zeroconf
instead of having #if statements all over the place to support both direct
Avahi support and Mono.Zeroconf.
* src/Extensions/Banshee.Daap/Makefile.am: Use the Mono.Zeroconf package
directly. We should probably build this info the build/*.mk stuff.
* src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs: Try to connect
to the source anyway, even if we fail - wrap it in a try as well.
* src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs: Dispose any
child sources that are connected to stuff when we dispose the service.
* src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs:
Implement Count override. Woops.
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs
trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs
trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am
trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Client.cs
trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ContentCodeBag.cs
trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Database.cs
trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Server.cs
trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ServiceLocator.cs
Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs Sun Mar 30 09:44:20 2008
@@ -55,6 +55,10 @@
get { return false; }
}
+ public override int Count {
+ get { return 0; }
+ }
+
/*private int count;
public override int Count {
get { return count; }
Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs Sun Mar 30 09:44:20 2008
@@ -62,9 +62,6 @@
locator.Removed += OnServiceRemoved;
locator.ShowLocalServices = true;
locator.Start ();
-
- proxy_server = new DaapProxyWebServer ();
- proxy_server.Start ();
}
public void Dispose ()
@@ -75,6 +72,14 @@
locator.Removed -= OnServiceRemoved;
locator = null;
}
+
+ // Dispose any remaining child sources
+ foreach (KeyValuePair <string, DaapSource> kv in source_map) {
+ kv.Value.Disconnect (true);
+ kv.Value.Dispose ();
+ }
+
+ source_map.Clear ();
}
private void OnServiceFound (object o, ServiceArgs args)
Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs Sun Mar 30 09:44:20 2008
@@ -73,8 +73,12 @@
// XXX: We get connect failures if we try with IPv6 address - what's up with that?!
// Investigate.
- //client = new Client (service);
- client = new Client (System.Net.IPAddress.Parse ("127.0.0.1"), service.Port);
+ if (service.Address.ToString ().Contains (".")) {
+ client = new DAAP.Client (service);
+ } else {
+ Console.WriteLine ("Was IPv6 address - we're probably going to die... :(");
+ }
+ //client = new Client (System.Net.IPAddress.Parse ("127.0.0.1"), service.Port);
client.Updated += OnClientUpdated;
if (client.AuthenticationMethod == AuthenticationMethod.None) {
Modified: trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am Sun Mar 30 09:44:20 2008
@@ -1,6 +1,6 @@
ASSEMBLY = Banshee.Daap
TARGET = library
-LINK = $(REF_EXTENSION_PLAYQUEUE) $(LINK_MONOZEROCONF) $(LINK_ICSHARP_ZIP_LIB) $(LINK_SYSTEM_WEB) -r:/home/alex/Desktop/Downloads/mono-zeroconf-0.7.5/src/Mono.Zeroconf/Mono.Zeroconf.dll
+LINK = $(REF_EXTENSION_PLAYQUEUE) $(LINK_MONOZEROCONF) $(LINK_ICSHARP_ZIP_LIB) $(LINK_SYSTEM_WEB) -pkg:mono-zeroconf
INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
SOURCES = Banshee.Daap/DaapService.cs \
Modified: trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Client.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Client.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Client.cs Sun Mar 30 09:44:20 2008
@@ -79,7 +79,7 @@
public Client (Service service) : this (service.Address, service.Port) {
}
- public Client (string host, UInt16 port) : this (Dns.Resolve (host).AddressList[0], port) {
+ public Client (string host, UInt16 port) : this (Dns.GetHostEntry (host).AddressList[0], port) {
}
public Client (IPAddress address, UInt16 port) {
@@ -150,7 +150,7 @@
updateRunning = false;
fetcher.KillAll ();
fetcher.Fetch ("/logout");
- } catch (WebException e) {
+ } catch (WebException) {
// some servers don't implement this, etc.
}
@@ -213,7 +213,7 @@
break;
Refresh ();
- } catch (WebException e) {
+ } catch (WebException) {
if (!updateRunning)
break;
Modified: trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ContentCodeBag.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ContentCodeBag.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ContentCodeBag.cs Sun Mar 30 09:44:20 2008
@@ -58,18 +58,19 @@
if (defaultBag == null) {
// this is crappy
- foreach (string name in Assembly.GetExecutingAssembly().GetManifestResourceNames()) {
- using (BinaryReader reader = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(name))) {
- MemoryStream buf = new MemoryStream();
- byte[] bytes = null;
-
- do {
- bytes = reader.ReadBytes(ChunkLength);
- buf.Write(bytes, 0, bytes.Length);
- } while (bytes.Length == ChunkLength);
+ // Alex: Agreed. :)
+
+ string name = "content-codes";
+ using (BinaryReader reader = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(name))) {
+ MemoryStream buf = new MemoryStream();
+ byte[] bytes = null;
+
+ do {
+ bytes = reader.ReadBytes(ChunkLength);
+ buf.Write(bytes, 0, bytes.Length);
+ } while (bytes.Length == ChunkLength);
- defaultBag = ContentCodeBag.ParseCodes(buf.GetBuffer());
- }
+ defaultBag = ContentCodeBag.ParseCodes(buf.GetBuffer());
}
}
Modified: trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Database.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Database.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Database.cs Sun Mar 30 09:44:20 2008
@@ -266,7 +266,7 @@
try {
playlistsData = client.Fetcher.Fetch (String.Format ("/databases/{0}/containers", id, revquery));
- } catch (WebException e) {
+ } catch (WebException) {
return;
}
Modified: trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Server.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Server.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/Server.cs Sun Mar 30 09:44:20 2008
@@ -30,11 +30,7 @@
using System.Net.Sockets;
using System.Web;
-#if ENABLE_MDNSD
using Mono.Zeroconf;
-#else
-using Avahi;
-#endif
namespace DAAP {
@@ -297,7 +293,7 @@
}
return handler (client, user, uri.AbsolutePath, query, range);
- } catch (IOException e) {
+ } catch (IOException) {
ret = false;
} catch (Exception e) {
ret = false;
@@ -314,7 +310,7 @@
try {
while (HandleRequest (client)) { }
- } catch (IOException e) {
+ } catch (IOException) {
// ignore
} catch (Exception e) {
Console.Error.WriteLine ("Error handling request: " + e);
@@ -333,7 +329,7 @@
Socket client = server.Accept ();
clients.Add (client);
ThreadPool.QueueUserWorkItem (HandleConnection, client);
- } catch (SocketException e) {
+ } catch (SocketException) {
break;
}
}
@@ -450,12 +446,7 @@
private int maxUsers = 0;
private bool running;
-#if !ENABLE_MDNSD
- private Avahi.Client client;
- private EntryGroup eg;
-#else
private RegisterService zc_service;
-#endif
private object eglock = new object ();
private RevisionManager revmgr = new RevisionManager ();
@@ -535,11 +526,6 @@
running = true;
ws.Start ();
-#if !ENABLE_MDNSD
- client = new Avahi.Client ();
- client.StateChanged += OnClientStateChanged;
-#endif
-
if (publish)
RegisterService ();
}
@@ -554,13 +540,6 @@
lock (revmgr) {
Monitor.PulseAll (revmgr);
}
-
-#if !ENABLE_MDNSD
- if (client != null) {
- client.Dispose ();
- client = null;
- }
-#endif
}
public void AddDatabase (Database db) {
@@ -591,7 +570,6 @@
}
}
-#if ENABLE_MDNSD
private void RegisterService () {
lock (eglock) {
if (zc_service != null) {
@@ -600,15 +578,18 @@
string auth = serverInfo.AuthenticationMethod == AuthenticationMethod.None ? "false" : "true";
- zc_service = new RegisterService (serverInfo.Name, null, "_daap._tcp");
+ zc_service = new RegisterService ();
+ zc_service.Name = serverInfo.Name;
+ zc_service.RegType = "_daap._tcp";
zc_service.Port = (short)ws.BoundPort;
zc_service.TxtRecord = new TxtRecord ();
zc_service.TxtRecord.Add ("Password", auth);
zc_service.TxtRecord.Add ("Machine Name", serverInfo.Name);
zc_service.TxtRecord.Add ("txtvers", "1");
zc_service.Response += OnRegisterServiceResponse;
- zc_service.AutoRename = false;
- zc_service.RegisterAsync ();
+ //zc_service.AutoRename = false;
+ zc_service.Register ();
+ //zc_service.RegisterAsync ();
}
}
@@ -627,60 +608,10 @@
}
private void OnRegisterServiceResponse (object o, RegisterServiceEventArgs args) {
- if (args.NameConflict && Collision != null) {
- Collision (this, new EventArgs ());
- }
- }
-#else
- private void OnClientStateChanged (object o, ClientStateArgs args) {
- if (publish && args.State == ClientState.Running) {
- RegisterService ();
- }
- }
-
- private void RegisterService () {
- lock (eglock) {
-
- if (eg != null) {
- eg.Reset ();
- } else {
- eg = new EntryGroup (client);
- eg.StateChanged += OnEntryGroupStateChanged;
- }
-
- try {
- string auth = serverInfo.AuthenticationMethod == AuthenticationMethod.None ? "false" : "true";
- eg.AddService (serverInfo.Name, "_daap._tcp", "", ws.BoundPort,
- new string[] { "Password=" + auth, "Machine Name=" + serverInfo.Name,
- "txtvers=1" });
- eg.Commit ();
- } catch (ClientException e) {
- if (e.ErrorCode == ErrorCode.Collision && Collision != null) {
- Collision (this, new EventArgs ());
- } else {
- throw e;
- }
- }
- }
- }
-
- private void UnregisterService () {
- lock (eglock) {
- if (eg == null)
- return;
-
- eg.Reset ();
- eg.Dispose ();
- eg = null;
- }
- }
-
- private void OnEntryGroupStateChanged (object o, EntryGroupStateArgs args) {
- if (args.State == EntryGroupState.Collision && Collision != null) {
+ if (Collision != null) {
Collision (this, new EventArgs ());
}
}
-#endif
private void ExpireSessions () {
lock (sessions) {
@@ -837,7 +768,7 @@
try {
ws.WriteResponseStream (client, trackStream, trackLength);
- } catch (IOException e) {
+ } catch (IOException) {
}
} else {
ws.WriteResponse (client, HttpStatusCode.InternalServerError, "no file");
Modified: trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ServiceLocator.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ServiceLocator.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/daap-sharp/ServiceLocator.cs Sun Mar 30 09:44:20 2008
@@ -22,11 +22,7 @@
using System.Text;
using System.Collections;
-#if ENABLE_MDNSD
using Mono.Zeroconf;
-#else
-using Avahi;
-#endif
namespace DAAP {
@@ -81,7 +77,6 @@
}
-#if ENABLE_MDNSD
public class ServiceLocator {
private ServiceBrowser browser;
@@ -105,10 +100,10 @@
Stop ();
}
- browser = new ServiceBrowser ("_daap._tcp");
+ browser = new ServiceBrowser ();
browser.ServiceAdded += OnServiceAdded;
browser.ServiceRemoved += OnServiceRemoved;
- browser.StartAsync ();
+ browser.Browse ("_daap._tcp", null);
}
public void Stop () {
@@ -122,12 +117,10 @@
args.Service.Resolve ();
}
- private void OnServiceResolved (object o, EventArgs args) {
- BrowseService zc_service = o as BrowseService;
-
- string name = zc_service.Name;
+ private void OnServiceResolved (object o, ServiceResolvedEventArgs args) {
+ string name = args.Service.Name;
- if (services[zc_service.Name] != null) {
+ if (services[name] != null) {
return; // we already have it somehow
}
@@ -139,7 +132,9 @@
pwRequired = true;
}
- foreach(TxtRecordItem item in zc_service.TxtRecord) {
+ IResolvableService service = (IResolvableService) args.Service;
+
+ foreach(TxtRecordItem item in service.TxtRecord) {
if(item.Key.ToLower () == "password") {
pwRequired = item.ValueString.ToLower () == "true";
} else if (item.Key.ToLower () == "machine name") {
@@ -147,7 +142,7 @@
}
}
- DAAP.Service svc = new DAAP.Service (zc_service.HostEntry.AddressList[0], (ushort)zc_service.Port,
+ DAAP.Service svc = new DAAP.Service (service.HostEntry.AddressList[0], (ushort)service.Port,
name, pwRequired);
services[svc.Name] = svc;
@@ -166,114 +161,4 @@
}
}
}
-#else
- public class ServiceLocator {
-
- private Avahi.Client client;
- private ServiceBrowser browser;
- private Hashtable services = new Hashtable ();
- private ArrayList resolvers = new ArrayList ();
- private bool showLocals = false;
-
- public event ServiceHandler Found;
- public event ServiceHandler Removed;
-
- public bool ShowLocalServices {
- get { return showLocals; }
- set { showLocals = value; }
- }
-
- public IEnumerable Services {
- get { return services; }
- }
-
- public ServiceLocator () {
- }
-
- public void Start () {
- if (client == null) {
- client = new Avahi.Client ();
- browser = new ServiceBrowser (client, "_daap._tcp");
- browser.ServiceAdded += OnServiceAdded;
- browser.ServiceRemoved += OnServiceRemoved;
- }
- }
-
- public void Stop () {
- if (client != null) {
- services.Clear ();
- browser.Dispose ();
- client.Dispose ();
- client = null;
- browser = null;
- }
- }
-
- private void OnServiceAdded (object o, ServiceInfoArgs args) {
- if ((args.Service.Flags & LookupResultFlags.Local) > 0 && !showLocals)
- return;
-
- ServiceResolver resolver = new ServiceResolver (client, args.Service);
- resolvers.Add (resolver);
- resolver.Found += OnServiceResolved;
- resolver.Timeout += OnServiceTimeout;
- }
-
- private void OnServiceResolved (object o, ServiceInfoArgs args) {
-
- resolvers.Remove (o);
- (o as ServiceResolver).Dispose ();
-
- string name = args.Service.Name;
-
- if (services[args.Service.Name] != null) {
- return; // we already have it somehow
- }
-
- bool pwRequired = false;
-
- // iTunes tacks this on to indicate a passsword protected share. Ugh.
- if (name.EndsWith ("_PW")) {
- name = name.Substring (0, name.Length - 3);
- pwRequired = true;
- }
-
- foreach (byte[] txt in args.Service.Text) {
- string txtstr = Encoding.UTF8.GetString (txt);
-
- string[] splitstr = txtstr.Split('=');
-
- if (splitstr.Length < 2)
- continue;
-
- if (splitstr[0].ToLower () == "password")
- pwRequired = splitstr[1].ToLower () == "true";
- else if (splitstr[0].ToLower () == "machine name")
- name = splitstr[1];
- }
-
- Service svc = new Service (args.Service.Address, args.Service.Port,
- name, pwRequired);
-
- services[svc.Name] = svc;
-
- if (Found != null)
- Found (this, new ServiceArgs (svc));
- }
-
- private void OnServiceTimeout (object o, EventArgs args) {
- Console.Error.WriteLine ("Failed to resolve");
- }
-
- private void OnServiceRemoved (object o, ServiceInfoArgs args) {
- Service svc = (Service) services[args.Service.Name];
- if (svc != null) {
- services.Remove (svc.Name);
-
- if (Removed != null)
- Removed (this, new ServiceArgs (svc));
- }
- }
- }
-#endif
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]