private static void Main(string[] args) { Console.WriteLine(); var options = new Options(); try { Console.TreatControlCAsInput = false; Console.CancelKeyPress += CancelKeyPressed; options.Parse(args); if (options.ShowHelp) { options.PrintUsage(); return; } if (options.ShowVersion) { ShowVersion(); return; } if (options.ShowLicense) { ShowLicense(); return; } if (options.ListViews) { ListViews(); return; } if (options.ListOrders) { ListOrders(); return; } if (options.Directories.Length == 0) { throw new GetOptException("No directories specified"); } options.SetupLogging(); using (var icon = new ProgramIcon()) { var server = new HttpServer(options.Port); try { using (var authorizer = new HttpAuthorizer(server)) { if (options.Ips.Length != 0) { authorizer.AddMethod(new IPAddressAuthorizer(options.Ips)); } if (options.Macs.Length != 0) { authorizer.AddMethod(new MacAuthorizer(options.Macs)); } if (options.UserAgents.Length != 0) { authorizer.AddMethod( new UserAgentAuthorizer(options.UserAgents)); } Console.Title = "SimpleDLNA - starting ..."; var types = options.Types[0]; foreach (var t in options.Types) { types = types | t; server.InfoFormat("Enabled type {0}", t); } var friendlyName = "sdlna"; if (options.Seperate) { foreach (var d in options.Directories) { server.InfoFormat("Mounting FileServer for {0}", d.FullName); var fs = SetupFileServer( options, types, new DirectoryInfo[] { d }); friendlyName = fs.FriendlyName; server.RegisterMediaServer(fs); server.NoticeFormat("{0} mounted", d.FullName); } } else { server.InfoFormat( "Mounting FileServer for {0} ({1})", options.Directories[0], options.Directories.Length); var fs = SetupFileServer(options, types, options.Directories); friendlyName = fs.FriendlyName; server.RegisterMediaServer(fs); server.NoticeFormat( "{0} ({1}) mounted", options.Directories[0], options.Directories.Length); } Console.Title = String.Format("{0} - running ...", friendlyName); Run(server); } } finally { server.Dispose(); } } } catch (GetOptException ex) { Console.Error.WriteLine("Error: {0}\n\n", ex.Message); options.PrintUsage(); } #if !DEBUG catch (Exception ex) { LogManager.GetLogger(typeof(Program)).Fatal("Failed to run", ex); } #endif }
private static FileServer SetupFileServer(Options options, DlnaMediaTypes types, DirectoryInfo[] d) { var ids = new Identifiers( ComparerRepository.Lookup(options.Order), options.DescendingOrder); foreach (var v in options.Views) { try { ids.AddView(v); } catch (RepositoryLookupException) { throw new GetOptException("Invalid view " + v); } } var fs = new FileServer(types, ids, d); if (!string.IsNullOrEmpty(options.FriendlyName)) { fs.FriendlyName = options.FriendlyName; } try { if (options.CacheFile != null) { fs.SetCacheFile(options.CacheFile); } fs.Load(); if (!options.Rescanning) { fs.Rescanning = false; } } catch (Exception) { fs.Dispose(); throw; } return fs; }