banshee r3600 - in trunk/banshee: . src/Extensions/Banshee.Daap src/Extensions/Banshee.Daap/Banshee.Daap src/Extensions/Banshee.Daap/daap-sharp



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]