added cookie support

This commit is contained in:
Michael Nolan 2021-09-25 14:33:10 -05:00
parent 521ab2cd95
commit ec069264f1
46 changed files with 38 additions and 28712 deletions

View File

@ -1,10 +1,10 @@
<Properties StartupConfiguration="{E26F8159-6B4B-4660-A7A4-D0333DFEF0DD}|Default" NuGet.AddPackagesDialog.IncludePrerelease="True">
<MonoDevelop.Ide.Workbench ActiveDocument="Server/Models/InfoType.cs">
<MonoDevelop.Ide.Workbench>
<Files>
<File FileName="Program.cs" Line="251" Column="50" />
<File FileName="Server/Models/InfoType.cs" Line="16" Column="6" />
<File FileName="Program.cs" Line="13" Column="1" />
<File FileName="Server/Models/InfoType.cs" Line="42" Column="60" />
<File FileName="Server/Models/YoutubeDownloaderResponse.cs" Line="1" Column="1" />
<File FileName="Server/Functions/Downloader.cs" Line="210" Column="44" />
<File FileName="Server/Functions/Downloader.cs" Line="43" Column="17" />
<File FileName="Server/Functions/SavedMedia.cs" Line="1" Column="1" />
</Files>
<Pads>
@ -12,12 +12,16 @@
<State name="__root__">
<Node name="youtube-downloader" expanded="True">
<Node name="youtube-downloader" expanded="True">
<Node name="References" expanded="True">
<Node name="From Packages" expanded="True">
<Node name="CookiesTxtParser" selected="True" />
</Node>
</Node>
<Node name="Packages" expanded="True" />
<Node name="Properties" expanded="True" />
<Node name="Server" expanded="True">
<Node name="Functions" expanded="True" />
<Node name="Models" expanded="True">
<Node name="InfoType.cs" selected="True" />
</Node>
<Node name="Models" expanded="True" />
</Node>
</Node>
</Node>
@ -29,7 +33,9 @@
<MonoDevelop.Ide.Workspace ActiveConfiguration="Release" />
<MonoDevelop.Ide.ItemProperties.youtube-downloader PreferredExecutionTarget="MonoDevelop.Default" />
<MonoDevelop.Ide.DebuggingService.Breakpoints>
<BreakpointStore />
<BreakpointStore>
<Breakpoint file="/home/ddlovato/site/Server/Functions/Downloader.cs" relfile="Server/Functions/Downloader.cs" line="34" column="1" />
</BreakpointStore>
</MonoDevelop.Ide.DebuggingService.Breakpoints>
<MultiItemStartupConfigurations />
</Properties>

View File

@ -10,7 +10,7 @@ using System.Text;
using System.Threading;
using TessesYoutubeDownloader.Server.Models;
using Newtonsoft.Json;
using Makaretu.Dns;
using System.Net;
using System.Threading.Tasks;
using youtube_downloader.Server.Models;
@ -114,10 +114,16 @@ namespace youtube_downloader
});
Route.Add("/api/Storage/File/{Path}", (rq, rp, args) =>
{
string path = Server.Functions.Downloader.DL.GetPath(true, args["Path"]);
rp.AsFile(rq, path);
if (args["path"].StartsWith("config/"))
{
rp.AsText("Access denied");
}
else
{
string path = Server.Functions.Downloader.DL.GetPath(true, args["Path"]);
rp.AsFile(rq, path);
}
});
Route.Add("/api/AddVideo/{Id}", (rq, rp, args) =>
{

View File

@ -29,14 +29,21 @@ namespace youtube_downloader.Server.Functions
public List<InfomationQueueItem> infoQueue = new List<InfomationQueueItem>();
public static YoutubeClient CreateYoutubeClient()
{
ServicePointManager
.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;
HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
Directory.CreateDirectory("config");
string cookiesFile=Path.Combine("config", "cookies.txt");
if (File.Exists(cookiesFile))
{
var cookies=CookiesTxt.Parser.ParseFileAsCookieCollection(cookiesFile);
handler.CookieContainer.Add(cookies);
}
Http = new HttpClient(handler);
return new YoutubeClient(Http);
}

BIN
bin/Release/CookiesTxtParser.dll Executable file

Binary file not shown.

View File

@ -1,862 +0,0 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Makaretu.Dns.Multicast</name>
</assembly>
<members>
<member name="T:Makaretu.Dns.MessageEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or
<see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.Message">
<summary>
The DNS message.
</summary>
<value>
The received message.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.RemoteEndPoint">
<summary>
The DNS message sender endpoint.
</summary>
<value>
The endpoint from the message was received.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.IsLegacyUnicast">
<summary>
Determines if the sender is using legacy unicast DNS.
</summary>
<value>
<b>false</b> if the sender is using port 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastClient">
<summary>
Performs the magic to send and receive datagrams over multicast
sockets.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastClient.MulticastPort">
<summary>
The port number assigned to Multicast DNS.
</summary>
<value>
Port number 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastService">
<summary>
Muticast Domain Name Service.
</summary>
<remarks>
Sends and receives DNS queries and answers via the multicast mechachism
defined in <see href="https://tools.ietf.org/html/rfc6762"/>.
<para>
Use <see cref="M:Makaretu.Dns.MulticastService.Start"/> to start listening for multicast messages.
One of the events, <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>, is
raised when a <see cref="T:Makaretu.Dns.Message"/> is received.
</para>
</remarks>
</member>
<member name="F:Makaretu.Dns.MulticastService.sentMessages">
<summary>
Recently sent messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.receivedMessages">
<summary>
Recently received messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.client">
<summary>
The multicast client.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp4">
<summary>
Use to send unicast IPv4 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp6">
<summary>
Use to send unicast IPv6 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.networkInterfacesFilter">
<summary>
Function used for listening filtered network interfaces.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.#cctor">
<summary>
Set the default TTLs.
</summary>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultTTL"/>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultHostTTL"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.QueryReceived">
<summary>
Raised when any local MDNS service sends a query.
</summary>
<value>
Contains the query <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
<seealso cref="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.AnswerReceived">
<summary>
Raised when any link-local MDNS service responds to a query.
</summary>
<value>
Contains the answer <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
</member>
<member name="E:Makaretu.Dns.MulticastService.MalformedMessage">
<summary>
Raised when a DNS message is received that cannot be decoded.
</summary>
<value>
The DNS message as a byte array.
</value>
</member>
<member name="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered">
<summary>
Raised when one or more network interfaces are discovered.
</summary>
<value>
Contains the network interface(s).
</value>
</member>
<member name="M:Makaretu.Dns.MulticastService.#ctor(System.Func{System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface},System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface}})">
<summary>
Create a new instance of the <see cref="T:Makaretu.Dns.MulticastService"/> class.
</summary>
<param name="filter">
Multicast listener will be bound to result of filtering function.
</param>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv4">
<summary>
Send and receive on IPv4.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv6">
<summary>
Send and receive on IPv6.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.IgnoreDuplicateMessages">
<summary>
Determines if received messages are checked for duplicates.
</summary>
<value>
<b>true</b> to ignore duplicate messages. Defaults to <b>true</b>.
</value>
<remarks>
When set, a message that has been received within the last minute
will be ignored.
</remarks>
</member>
<member name="P:Makaretu.Dns.MulticastService.NetworkInterfaceDiscoveryInterval">
<summary>
The interval for discovering network interfaces.
</summary>
<value>
Default is 2 minutes.
</value>
<remarks>
When the interval is reached a task is started to discover any
new network interfaces.
</remarks>
<seealso cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetNetworkInterfaces">
<summary>
Get the network interfaces that are useable.
</summary>
<returns>
A sequence of <see cref="T:System.Net.NetworkInformation.NetworkInterface"/>.
</returns>
<remarks>
The following filters are applied
<list type="bullet">
<item><description>interface is enabled</description></item>
<item><description>interface is not a loopback</description></item>
</list>
<para>
If no network interface is operational, then the loopback interface(s)
are included (127.0.0.1 and/or ::1).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetIPAddresses">
<summary>
Get the IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses of the local machine.
</returns>
<remarks>
The loopback addresses (127.0.0.1 and ::1) are NOT included in the
returned sequences.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetLinkLocalAddresses">
<summary>
Get the link local IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses.
</returns>
<remarks>
All IPv4 addresses are considered link local.
</remarks>
<seealso href="https://en.wikipedia.org/wiki/Link-local_address"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.Start">
<summary>
Start the service.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.Stop">
<summary>
Stop the service.
</summary>
<remarks>
Clears all the event handlers.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.ResolveAsync(Makaretu.Dns.Message,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendUnicastQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name and accept unicast and/or broadcast response.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Send a "QU" question (unicast). The most significat bit of the Class is set.
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)">
<summary>
Ask for answers.
</summary>
<param name="msg">
A query message.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="msg"/> is too large.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> set to zero and any questions are removed.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
<note type="caution">
If possible the <see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)"/>
method should be used, so that legacy unicast queries are supported.
</note>
</remarks>
<see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/>
<seealso cref="M:Makaretu.Dns.Message.CreateResponse"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="query">
The query that is being answered.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
If the <paramref name="query"/> is a standard multicast query (sent to port 5353), then
<see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)"/> is called.
</para>
<para>
Otherwise a legacy unicast reponse is sent to sender's end point.
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> is set to query's ID,
the <see cref="P:Makaretu.Dns.Message.Questions"/> is set to the query's questions,
and all resource record TTLs have a max value of 10 seconds.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.OnDnsMessage(System.Object,System.Net.Sockets.UdpReceiveResult)">
<summary>
Called by the MulticastClient when a DNS message is received.
</summary>
<param name="sender">
The <see cref="T:Makaretu.Dns.MulticastClient"/> that got the message.
</param>
<param name="result">
The received message <see cref="T:System.Net.Sockets.UdpReceiveResult"/>.
</param>
<remarks>
Decodes the <paramref name="result"/> and then raises
either the <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/> event.
<para>
Multicast DNS messages received with an OPCODE or RCODE other than zero
are silently ignored.
</para>
<para>
If the message cannot be decoded, then the <see cref="E:Makaretu.Dns.MulticastService.MalformedMessage"/>
event is raised.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.NetworkInterfaceEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.NetworkInterfaceEventArgs.NetworkInterfaces">
<summary>
The sequece of detected network interfaces.
</summary>
<value>
A sequence of network interfaces.
</value>
</member>
<member name="T:Makaretu.Dns.RecentMessages">
<summary>
Maintains a sequence of recent messages.
</summary>
<remarks>
<b>RecentMessages</b> is used to determine if a message has already been
processed within the specified <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</remarks>
</member>
<member name="F:Makaretu.Dns.RecentMessages.Messages">
<summary>
Recent messages.
</summary>
<value>
The key is the Base64 encoding of the MD5 hash of
a message and the value is when the message was seen.
</value>
</member>
<member name="P:Makaretu.Dns.RecentMessages.Interval">
<summary>
The time interval used to determine if a message is recent.
</summary>
</member>
<member name="M:Makaretu.Dns.RecentMessages.TryAdd(System.Byte[])">
<summary>
Try adding a message to the recent message list.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
<b>true</b> if the message, did not already exist; otherwise,
<b>false</b> the message exists within the <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</returns>
</member>
<member name="M:Makaretu.Dns.RecentMessages.Prune">
<summary>
Remove any messages that are stale.
</summary>
<returns>
The number messages that were pruned.
</returns>
<remarks>
Anything older than an <see cref="P:Makaretu.Dns.RecentMessages.Interval"/> ago is removed.
</remarks>
</member>
<member name="M:Makaretu.Dns.RecentMessages.GetId(System.Byte[])">
<summary>
Gets a unique ID for a message.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
The Base64 encoding of the MD5 hash of the <paramref name="message"/>.
</returns>
</member>
<member name="T:Makaretu.Dns.ServiceDiscovery">
<summary>
DNS based Service Discovery is a way of using standard DNS programming interfaces, servers,
and packet formats to browse the network for services.
</summary>
<seealso href="https://tools.ietf.org/html/rfc6763">RFC 6763 DNS-Based Service Discovery</seealso>
</member>
<member name="F:Makaretu.Dns.ServiceDiscovery.ServiceName">
<summary>
The service discovery service name.
</summary>
<value>
The service name used to enumerate other services.
</value>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor(Makaretu.Dns.MulticastService)">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class with
the specified <see cref="T:Makaretu.Dns.MulticastService"/>.
</summary>
<param name="mdns">
The underlaying <see cref="T:Makaretu.Dns.MulticastService"/> to use.
</param>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.Mdns">
<summary>
Gets the multicasting service.
</summary>
<value>
Is used to send and recieve multicast <see cref="T:Makaretu.Dns.Message">DNS messages</see>.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.AnswersContainsAdditionalRecords">
<summary>
Add the additional records into the answers.
</summary>
<value>
Defaults to <b>false</b>.
</value>
<remarks>
Some malformed systems, such as js-ipfs and go-ipfs, only examine
the <see cref="P:Makaretu.Dns.Message.Answers"/> and not the <see cref="P:Makaretu.Dns.Message.AdditionalRecords"/>.
Setting this to <b>true</b>, will move the additional records
into the answers.
<para>
This never done for DNS-SD answers.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.NameServer">
<summary>
Gets the name server.
</summary>
<value>
Is used to answer questions.
</value>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered">
<summary>
Raised when a DNS-SD response is received.
</summary>
<value>
Contains the service name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers
to a DNS-SD query. When an anwser is received this event is raised.
<para>
Use <see cref="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices"/> to initiate a DNS-SD question.
</para>
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered">
<summary>
Raised when a servive instance is discovered.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance is received
this event is raised.
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown">
<summary>
Raised when a servive instance is shutting down.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance with a
TTL of zero is received this event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices">
<summary>
Asks other MDNS services to send their service names.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastAllServices">
<summary>
Asks other MDNS services to send their service names;
accepts unicast and/or broadcast answers.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName,System.String)">
<summary>
Asks instances of the specified service with the subtype to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<param name="subtype">
The feature that is needed.
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
accepts unicast and/or broadcast answers.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)">
<summary>
Advertise a service profile.
</summary>
<param name="service">
The service profile.
</param>
<remarks>
Any queries for the service or service instance will be answered with
information from the profile.
<para>
Besides adding the profile's resource records to the <see cref="T:Makaretu.Dns.Resolving.Catalog"/> PTR records are
created to support DNS-SD and reverse address mapping (DNS address lookup).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Announce(Makaretu.Dns.ServiceProfile)">
<summary>
Sends an unsolicited MDNS response describing the
service profile.
</summary>
<param name="profile">
The profile to describe.
</param>
<remarks>
Sends a MDNS response <see cref="T:Makaretu.Dns.Message"/> containing the pointer
and resource records of the <paramref name="profile"/>.
<para>
To provide increased robustness against packet loss,
two unsolicited responses are sent one second apart.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise(Makaretu.Dns.ServiceProfile)">
<summary>
Sends a goodbye message for the provided
profile and removes its pointer from the name sever.
</summary>
<param name="profile">The profile to send a goodbye message for.</param>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise">
<summary>
Sends a goodbye message for each anounced service.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceInstanceShutdownEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceShutdownEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceProfile">
<summary>
Defines a specific service that can be discovered.
</summary>
<seealso cref="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class.
</summary>
<remarks>
All details must be filled in by the caller, especially the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor(Makaretu.Dns.DomainName,Makaretu.Dns.DomainName,System.UInt16,System.Collections.Generic.IEnumerable{System.Net.IPAddress})">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class
with the specified details.
</summary>
<param name="instanceName">
A unique identifier for the specific service instance.
</param>
<param name="serviceName">
The <see cref="P:Makaretu.Dns.ServiceProfile.ServiceName">name</see> of the service.
</param>
<param name="port">
The TCP/UDP port of the service.
</param>
<param name="addresses">
The IP addresses of the specific service instance. If <b>null</b> then
<see cref="M:Makaretu.Dns.MulticastService.GetIPAddresses"/> is used.
</param>
<remarks>
The SRV, TXT and A/AAAA resoruce records are added to the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Domain">
<summary>
The top level domain (TLD) name of the service.
</summary>
<value>
Always "local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.ServiceName">
<summary>
A unique name for the service.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp".
</value>
<remarks>
It consists of a pair of DNS labels, following the
<see href="https://www.ietf.org/rfc/rfc2782.txt">SRV records</see> convention.
The first label of the pair is an underscore character (_) followed by
the <see href="https://tools.ietf.org/html/rfc6335">service name</see>.
The second label is either "_tcp" (for application
protocols that run over TCP) or "_udp" (for all others).
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.InstanceName">
<summary>
A unique identifier for the service instance.
</summary>
<value>
Some unique value.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.QualifiedServiceName">
<summary>
The service name and domain.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp.local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.HostName">
<summary>
The fully qualified name of the instance's host.
</summary>
<remarks>
This can be used to query the address records (A and AAAA)
of the service instance.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName">
<summary>
The instance name, service name and domain.
</summary>
<value>
<see cref="P:Makaretu.Dns.ServiceProfile.InstanceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.Domain"/>
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Resources">
<summary>
DNS resource records that are used to locate the service instance.
</summary>
<value>
More infomation about the service.
</value>
<remarks>
All records should have the <see cref="P:Makaretu.Dns.ResourceRecord.Name"/> equal
to the <see cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/> or the <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
<para>
At a minimum the <see cref="T:Makaretu.Dns.SRVRecord"/> and <see cref="T:Makaretu.Dns.TXTRecord"/>
records must be present.
Typically <see cref="T:Makaretu.Dns.AddressRecord">address records</see>
are also present and are associaed with <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Subtypes">
<summary>
A list of service features implemented by the service instance.
</summary>
<value>
The default is an empty list.
</value>
<seealso href="https://tools.ietf.org/html/rfc6763#section-7.1"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.AddProperty(System.String,System.String)">
<summary>
Add a property of the service to the <see cref="T:Makaretu.Dns.TXTRecord"/>.
</summary>
<param name="key">
The name of the property.
</param>
<param name="value">
The value of the property.
</param>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
191b06d8a6f86332255c3af5c32e3875798ab34e
c8bdc955f173e739a77263ac50434ebe8d35543b

View File

@ -244,8 +244,6 @@
/home/ddlovato/site/bin/Release/AsyncEnumerable.dll
/home/ddlovato/site/bin/Release/Common.Logging.Core.dll
/home/ddlovato/site/bin/Release/Common.Logging.dll
/home/ddlovato/site/bin/Release/Makaretu.Dns.dll
/home/ddlovato/site/bin/Release/Makaretu.Dns.Multicast.dll
/home/ddlovato/site/bin/Release/Microsoft.Bcl.AsyncInterfaces.dll
/home/ddlovato/site/bin/Release/MimeTypesMap.dll
/home/ddlovato/site/bin/Release/Newtonsoft.Json.dll
@ -253,7 +251,6 @@
/home/ddlovato/site/bin/Release/SimpleHTTP.dll
/home/ddlovato/site/bin/Release/System.Buffers.dll
/home/ddlovato/site/bin/Release/System.Memory.dll
/home/ddlovato/site/bin/Release/System.Net.IPNetwork.dll
/home/ddlovato/site/bin/Release/System.Numerics.Vectors.dll
/home/ddlovato/site/bin/Release/System.Runtime.CompilerServices.Unsafe.dll
/home/ddlovato/site/bin/Release/System.Text.Encoding.CodePages.dll
@ -278,7 +275,5 @@
/home/ddlovato/site/bin/Release/Common.Logging.pdb
/home/ddlovato/site/bin/Release/Common.Logging.xml
/home/ddlovato/site/bin/Release/SimpleBase.pdb
/home/ddlovato/site/bin/Release/Makaretu.Dns.pdb
/home/ddlovato/site/bin/Release/Makaretu.Dns.xml
/home/ddlovato/site/bin/Release/Makaretu.Dns.Multicast.xml
/home/ddlovato/site/obj/x86/Release/youtube-downloader.csproj.CopyComplete
/home/ddlovato/site/bin/Release/CookiesTxtParser.dll

View File

@ -4,9 +4,7 @@
<package id="AsyncEnumerator" version="4.0.2" targetFramework="net47" />
<package id="Common.Logging" version="3.4.1" targetFramework="net47" />
<package id="Common.Logging.Core" version="3.4.1" targetFramework="net47" />
<package id="IPNetwork2" version="2.1.2" targetFramework="net47" />
<package id="Makaretu.Dns" version="2.0.1" targetFramework="net47" />
<package id="Makaretu.Dns.Multicast" version="0.27.0" targetFramework="net47" />
<package id="CookiesTxtParser" version="1.0.1" targetFramework="net47" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="6.0.0-preview.7.21377.19" targetFramework="net47" />
<package id="Microsoft.CSharp" version="4.0.1" targetFramework="net47" />
<package id="MimeTypesMap" version="1.0.2" targetFramework="net47" />

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,862 +0,0 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Makaretu.Dns.Multicast</name>
</assembly>
<members>
<member name="T:Makaretu.Dns.MessageEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or
<see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.Message">
<summary>
The DNS message.
</summary>
<value>
The received message.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.RemoteEndPoint">
<summary>
The DNS message sender endpoint.
</summary>
<value>
The endpoint from the message was received.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.IsLegacyUnicast">
<summary>
Determines if the sender is using legacy unicast DNS.
</summary>
<value>
<b>false</b> if the sender is using port 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastClient">
<summary>
Performs the magic to send and receive datagrams over multicast
sockets.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastClient.MulticastPort">
<summary>
The port number assigned to Multicast DNS.
</summary>
<value>
Port number 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastService">
<summary>
Muticast Domain Name Service.
</summary>
<remarks>
Sends and receives DNS queries and answers via the multicast mechachism
defined in <see href="https://tools.ietf.org/html/rfc6762"/>.
<para>
Use <see cref="M:Makaretu.Dns.MulticastService.Start"/> to start listening for multicast messages.
One of the events, <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>, is
raised when a <see cref="T:Makaretu.Dns.Message"/> is received.
</para>
</remarks>
</member>
<member name="F:Makaretu.Dns.MulticastService.sentMessages">
<summary>
Recently sent messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.receivedMessages">
<summary>
Recently received messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.client">
<summary>
The multicast client.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp4">
<summary>
Use to send unicast IPv4 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp6">
<summary>
Use to send unicast IPv6 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.networkInterfacesFilter">
<summary>
Function used for listening filtered network interfaces.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.#cctor">
<summary>
Set the default TTLs.
</summary>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultTTL"/>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultHostTTL"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.QueryReceived">
<summary>
Raised when any local MDNS service sends a query.
</summary>
<value>
Contains the query <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
<seealso cref="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.AnswerReceived">
<summary>
Raised when any link-local MDNS service responds to a query.
</summary>
<value>
Contains the answer <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
</member>
<member name="E:Makaretu.Dns.MulticastService.MalformedMessage">
<summary>
Raised when a DNS message is received that cannot be decoded.
</summary>
<value>
The DNS message as a byte array.
</value>
</member>
<member name="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered">
<summary>
Raised when one or more network interfaces are discovered.
</summary>
<value>
Contains the network interface(s).
</value>
</member>
<member name="M:Makaretu.Dns.MulticastService.#ctor(System.Func{System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface},System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface}})">
<summary>
Create a new instance of the <see cref="T:Makaretu.Dns.MulticastService"/> class.
</summary>
<param name="filter">
Multicast listener will be bound to result of filtering function.
</param>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv4">
<summary>
Send and receive on IPv4.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv6">
<summary>
Send and receive on IPv6.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.IgnoreDuplicateMessages">
<summary>
Determines if received messages are checked for duplicates.
</summary>
<value>
<b>true</b> to ignore duplicate messages. Defaults to <b>true</b>.
</value>
<remarks>
When set, a message that has been received within the last minute
will be ignored.
</remarks>
</member>
<member name="P:Makaretu.Dns.MulticastService.NetworkInterfaceDiscoveryInterval">
<summary>
The interval for discovering network interfaces.
</summary>
<value>
Default is 2 minutes.
</value>
<remarks>
When the interval is reached a task is started to discover any
new network interfaces.
</remarks>
<seealso cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetNetworkInterfaces">
<summary>
Get the network interfaces that are useable.
</summary>
<returns>
A sequence of <see cref="T:System.Net.NetworkInformation.NetworkInterface"/>.
</returns>
<remarks>
The following filters are applied
<list type="bullet">
<item><description>interface is enabled</description></item>
<item><description>interface is not a loopback</description></item>
</list>
<para>
If no network interface is operational, then the loopback interface(s)
are included (127.0.0.1 and/or ::1).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetIPAddresses">
<summary>
Get the IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses of the local machine.
</returns>
<remarks>
The loopback addresses (127.0.0.1 and ::1) are NOT included in the
returned sequences.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetLinkLocalAddresses">
<summary>
Get the link local IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses.
</returns>
<remarks>
All IPv4 addresses are considered link local.
</remarks>
<seealso href="https://en.wikipedia.org/wiki/Link-local_address"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.Start">
<summary>
Start the service.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.Stop">
<summary>
Stop the service.
</summary>
<remarks>
Clears all the event handlers.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.ResolveAsync(Makaretu.Dns.Message,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendUnicastQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name and accept unicast and/or broadcast response.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Send a "QU" question (unicast). The most significat bit of the Class is set.
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)">
<summary>
Ask for answers.
</summary>
<param name="msg">
A query message.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="msg"/> is too large.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> set to zero and any questions are removed.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
<note type="caution">
If possible the <see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)"/>
method should be used, so that legacy unicast queries are supported.
</note>
</remarks>
<see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/>
<seealso cref="M:Makaretu.Dns.Message.CreateResponse"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="query">
The query that is being answered.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
If the <paramref name="query"/> is a standard multicast query (sent to port 5353), then
<see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)"/> is called.
</para>
<para>
Otherwise a legacy unicast reponse is sent to sender's end point.
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> is set to query's ID,
the <see cref="P:Makaretu.Dns.Message.Questions"/> is set to the query's questions,
and all resource record TTLs have a max value of 10 seconds.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.OnDnsMessage(System.Object,System.Net.Sockets.UdpReceiveResult)">
<summary>
Called by the MulticastClient when a DNS message is received.
</summary>
<param name="sender">
The <see cref="T:Makaretu.Dns.MulticastClient"/> that got the message.
</param>
<param name="result">
The received message <see cref="T:System.Net.Sockets.UdpReceiveResult"/>.
</param>
<remarks>
Decodes the <paramref name="result"/> and then raises
either the <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/> event.
<para>
Multicast DNS messages received with an OPCODE or RCODE other than zero
are silently ignored.
</para>
<para>
If the message cannot be decoded, then the <see cref="E:Makaretu.Dns.MulticastService.MalformedMessage"/>
event is raised.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.NetworkInterfaceEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.NetworkInterfaceEventArgs.NetworkInterfaces">
<summary>
The sequece of detected network interfaces.
</summary>
<value>
A sequence of network interfaces.
</value>
</member>
<member name="T:Makaretu.Dns.RecentMessages">
<summary>
Maintains a sequence of recent messages.
</summary>
<remarks>
<b>RecentMessages</b> is used to determine if a message has already been
processed within the specified <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</remarks>
</member>
<member name="F:Makaretu.Dns.RecentMessages.Messages">
<summary>
Recent messages.
</summary>
<value>
The key is the Base64 encoding of the MD5 hash of
a message and the value is when the message was seen.
</value>
</member>
<member name="P:Makaretu.Dns.RecentMessages.Interval">
<summary>
The time interval used to determine if a message is recent.
</summary>
</member>
<member name="M:Makaretu.Dns.RecentMessages.TryAdd(System.Byte[])">
<summary>
Try adding a message to the recent message list.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
<b>true</b> if the message, did not already exist; otherwise,
<b>false</b> the message exists within the <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</returns>
</member>
<member name="M:Makaretu.Dns.RecentMessages.Prune">
<summary>
Remove any messages that are stale.
</summary>
<returns>
The number messages that were pruned.
</returns>
<remarks>
Anything older than an <see cref="P:Makaretu.Dns.RecentMessages.Interval"/> ago is removed.
</remarks>
</member>
<member name="M:Makaretu.Dns.RecentMessages.GetId(System.Byte[])">
<summary>
Gets a unique ID for a message.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
The Base64 encoding of the MD5 hash of the <paramref name="message"/>.
</returns>
</member>
<member name="T:Makaretu.Dns.ServiceDiscovery">
<summary>
DNS based Service Discovery is a way of using standard DNS programming interfaces, servers,
and packet formats to browse the network for services.
</summary>
<seealso href="https://tools.ietf.org/html/rfc6763">RFC 6763 DNS-Based Service Discovery</seealso>
</member>
<member name="F:Makaretu.Dns.ServiceDiscovery.ServiceName">
<summary>
The service discovery service name.
</summary>
<value>
The service name used to enumerate other services.
</value>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor(Makaretu.Dns.MulticastService)">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class with
the specified <see cref="T:Makaretu.Dns.MulticastService"/>.
</summary>
<param name="mdns">
The underlaying <see cref="T:Makaretu.Dns.MulticastService"/> to use.
</param>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.Mdns">
<summary>
Gets the multicasting service.
</summary>
<value>
Is used to send and recieve multicast <see cref="T:Makaretu.Dns.Message">DNS messages</see>.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.AnswersContainsAdditionalRecords">
<summary>
Add the additional records into the answers.
</summary>
<value>
Defaults to <b>false</b>.
</value>
<remarks>
Some malformed systems, such as js-ipfs and go-ipfs, only examine
the <see cref="P:Makaretu.Dns.Message.Answers"/> and not the <see cref="P:Makaretu.Dns.Message.AdditionalRecords"/>.
Setting this to <b>true</b>, will move the additional records
into the answers.
<para>
This never done for DNS-SD answers.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.NameServer">
<summary>
Gets the name server.
</summary>
<value>
Is used to answer questions.
</value>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered">
<summary>
Raised when a DNS-SD response is received.
</summary>
<value>
Contains the service name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers
to a DNS-SD query. When an anwser is received this event is raised.
<para>
Use <see cref="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices"/> to initiate a DNS-SD question.
</para>
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered">
<summary>
Raised when a servive instance is discovered.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance is received
this event is raised.
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown">
<summary>
Raised when a servive instance is shutting down.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance with a
TTL of zero is received this event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices">
<summary>
Asks other MDNS services to send their service names.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastAllServices">
<summary>
Asks other MDNS services to send their service names;
accepts unicast and/or broadcast answers.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName,System.String)">
<summary>
Asks instances of the specified service with the subtype to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<param name="subtype">
The feature that is needed.
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
accepts unicast and/or broadcast answers.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)">
<summary>
Advertise a service profile.
</summary>
<param name="service">
The service profile.
</param>
<remarks>
Any queries for the service or service instance will be answered with
information from the profile.
<para>
Besides adding the profile's resource records to the <see cref="T:Makaretu.Dns.Resolving.Catalog"/> PTR records are
created to support DNS-SD and reverse address mapping (DNS address lookup).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Announce(Makaretu.Dns.ServiceProfile)">
<summary>
Sends an unsolicited MDNS response describing the
service profile.
</summary>
<param name="profile">
The profile to describe.
</param>
<remarks>
Sends a MDNS response <see cref="T:Makaretu.Dns.Message"/> containing the pointer
and resource records of the <paramref name="profile"/>.
<para>
To provide increased robustness against packet loss,
two unsolicited responses are sent one second apart.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise(Makaretu.Dns.ServiceProfile)">
<summary>
Sends a goodbye message for the provided
profile and removes its pointer from the name sever.
</summary>
<param name="profile">The profile to send a goodbye message for.</param>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise">
<summary>
Sends a goodbye message for each anounced service.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceInstanceShutdownEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceShutdownEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceProfile">
<summary>
Defines a specific service that can be discovered.
</summary>
<seealso cref="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class.
</summary>
<remarks>
All details must be filled in by the caller, especially the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor(Makaretu.Dns.DomainName,Makaretu.Dns.DomainName,System.UInt16,System.Collections.Generic.IEnumerable{System.Net.IPAddress})">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class
with the specified details.
</summary>
<param name="instanceName">
A unique identifier for the specific service instance.
</param>
<param name="serviceName">
The <see cref="P:Makaretu.Dns.ServiceProfile.ServiceName">name</see> of the service.
</param>
<param name="port">
The TCP/UDP port of the service.
</param>
<param name="addresses">
The IP addresses of the specific service instance. If <b>null</b> then
<see cref="M:Makaretu.Dns.MulticastService.GetIPAddresses"/> is used.
</param>
<remarks>
The SRV, TXT and A/AAAA resoruce records are added to the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Domain">
<summary>
The top level domain (TLD) name of the service.
</summary>
<value>
Always "local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.ServiceName">
<summary>
A unique name for the service.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp".
</value>
<remarks>
It consists of a pair of DNS labels, following the
<see href="https://www.ietf.org/rfc/rfc2782.txt">SRV records</see> convention.
The first label of the pair is an underscore character (_) followed by
the <see href="https://tools.ietf.org/html/rfc6335">service name</see>.
The second label is either "_tcp" (for application
protocols that run over TCP) or "_udp" (for all others).
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.InstanceName">
<summary>
A unique identifier for the service instance.
</summary>
<value>
Some unique value.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.QualifiedServiceName">
<summary>
The service name and domain.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp.local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.HostName">
<summary>
The fully qualified name of the instance's host.
</summary>
<remarks>
This can be used to query the address records (A and AAAA)
of the service instance.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName">
<summary>
The instance name, service name and domain.
</summary>
<value>
<see cref="P:Makaretu.Dns.ServiceProfile.InstanceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.Domain"/>
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Resources">
<summary>
DNS resource records that are used to locate the service instance.
</summary>
<value>
More infomation about the service.
</value>
<remarks>
All records should have the <see cref="P:Makaretu.Dns.ResourceRecord.Name"/> equal
to the <see cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/> or the <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
<para>
At a minimum the <see cref="T:Makaretu.Dns.SRVRecord"/> and <see cref="T:Makaretu.Dns.TXTRecord"/>
records must be present.
Typically <see cref="T:Makaretu.Dns.AddressRecord">address records</see>
are also present and are associaed with <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Subtypes">
<summary>
A list of service features implemented by the service instance.
</summary>
<value>
The default is an empty list.
</value>
<seealso href="https://tools.ietf.org/html/rfc6763#section-7.1"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.AddProperty(System.String,System.String)">
<summary>
Add a property of the service to the <see cref="T:Makaretu.Dns.TXTRecord"/>.
</summary>
<param name="key">
The name of the property.
</param>
<param name="value">
The value of the property.
</param>
</member>
</members>
</doc>

View File

@ -1,862 +0,0 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Makaretu.Dns.Multicast</name>
</assembly>
<members>
<member name="T:Makaretu.Dns.MessageEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or
<see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.Message">
<summary>
The DNS message.
</summary>
<value>
The received message.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.RemoteEndPoint">
<summary>
The DNS message sender endpoint.
</summary>
<value>
The endpoint from the message was received.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.IsLegacyUnicast">
<summary>
Determines if the sender is using legacy unicast DNS.
</summary>
<value>
<b>false</b> if the sender is using port 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastClient">
<summary>
Performs the magic to send and receive datagrams over multicast
sockets.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastClient.MulticastPort">
<summary>
The port number assigned to Multicast DNS.
</summary>
<value>
Port number 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastService">
<summary>
Muticast Domain Name Service.
</summary>
<remarks>
Sends and receives DNS queries and answers via the multicast mechachism
defined in <see href="https://tools.ietf.org/html/rfc6762"/>.
<para>
Use <see cref="M:Makaretu.Dns.MulticastService.Start"/> to start listening for multicast messages.
One of the events, <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>, is
raised when a <see cref="T:Makaretu.Dns.Message"/> is received.
</para>
</remarks>
</member>
<member name="F:Makaretu.Dns.MulticastService.sentMessages">
<summary>
Recently sent messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.receivedMessages">
<summary>
Recently received messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.client">
<summary>
The multicast client.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp4">
<summary>
Use to send unicast IPv4 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp6">
<summary>
Use to send unicast IPv6 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.networkInterfacesFilter">
<summary>
Function used for listening filtered network interfaces.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.#cctor">
<summary>
Set the default TTLs.
</summary>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultTTL"/>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultHostTTL"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.QueryReceived">
<summary>
Raised when any local MDNS service sends a query.
</summary>
<value>
Contains the query <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
<seealso cref="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.AnswerReceived">
<summary>
Raised when any link-local MDNS service responds to a query.
</summary>
<value>
Contains the answer <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
</member>
<member name="E:Makaretu.Dns.MulticastService.MalformedMessage">
<summary>
Raised when a DNS message is received that cannot be decoded.
</summary>
<value>
The DNS message as a byte array.
</value>
</member>
<member name="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered">
<summary>
Raised when one or more network interfaces are discovered.
</summary>
<value>
Contains the network interface(s).
</value>
</member>
<member name="M:Makaretu.Dns.MulticastService.#ctor(System.Func{System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface},System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface}})">
<summary>
Create a new instance of the <see cref="T:Makaretu.Dns.MulticastService"/> class.
</summary>
<param name="filter">
Multicast listener will be bound to result of filtering function.
</param>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv4">
<summary>
Send and receive on IPv4.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv6">
<summary>
Send and receive on IPv6.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.IgnoreDuplicateMessages">
<summary>
Determines if received messages are checked for duplicates.
</summary>
<value>
<b>true</b> to ignore duplicate messages. Defaults to <b>true</b>.
</value>
<remarks>
When set, a message that has been received within the last minute
will be ignored.
</remarks>
</member>
<member name="P:Makaretu.Dns.MulticastService.NetworkInterfaceDiscoveryInterval">
<summary>
The interval for discovering network interfaces.
</summary>
<value>
Default is 2 minutes.
</value>
<remarks>
When the interval is reached a task is started to discover any
new network interfaces.
</remarks>
<seealso cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetNetworkInterfaces">
<summary>
Get the network interfaces that are useable.
</summary>
<returns>
A sequence of <see cref="T:System.Net.NetworkInformation.NetworkInterface"/>.
</returns>
<remarks>
The following filters are applied
<list type="bullet">
<item><description>interface is enabled</description></item>
<item><description>interface is not a loopback</description></item>
</list>
<para>
If no network interface is operational, then the loopback interface(s)
are included (127.0.0.1 and/or ::1).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetIPAddresses">
<summary>
Get the IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses of the local machine.
</returns>
<remarks>
The loopback addresses (127.0.0.1 and ::1) are NOT included in the
returned sequences.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetLinkLocalAddresses">
<summary>
Get the link local IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses.
</returns>
<remarks>
All IPv4 addresses are considered link local.
</remarks>
<seealso href="https://en.wikipedia.org/wiki/Link-local_address"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.Start">
<summary>
Start the service.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.Stop">
<summary>
Stop the service.
</summary>
<remarks>
Clears all the event handlers.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.ResolveAsync(Makaretu.Dns.Message,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendUnicastQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name and accept unicast and/or broadcast response.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Send a "QU" question (unicast). The most significat bit of the Class is set.
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)">
<summary>
Ask for answers.
</summary>
<param name="msg">
A query message.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="msg"/> is too large.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> set to zero and any questions are removed.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
<note type="caution">
If possible the <see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)"/>
method should be used, so that legacy unicast queries are supported.
</note>
</remarks>
<see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/>
<seealso cref="M:Makaretu.Dns.Message.CreateResponse"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="query">
The query that is being answered.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
If the <paramref name="query"/> is a standard multicast query (sent to port 5353), then
<see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)"/> is called.
</para>
<para>
Otherwise a legacy unicast reponse is sent to sender's end point.
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> is set to query's ID,
the <see cref="P:Makaretu.Dns.Message.Questions"/> is set to the query's questions,
and all resource record TTLs have a max value of 10 seconds.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.OnDnsMessage(System.Object,System.Net.Sockets.UdpReceiveResult)">
<summary>
Called by the MulticastClient when a DNS message is received.
</summary>
<param name="sender">
The <see cref="T:Makaretu.Dns.MulticastClient"/> that got the message.
</param>
<param name="result">
The received message <see cref="T:System.Net.Sockets.UdpReceiveResult"/>.
</param>
<remarks>
Decodes the <paramref name="result"/> and then raises
either the <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/> event.
<para>
Multicast DNS messages received with an OPCODE or RCODE other than zero
are silently ignored.
</para>
<para>
If the message cannot be decoded, then the <see cref="E:Makaretu.Dns.MulticastService.MalformedMessage"/>
event is raised.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.NetworkInterfaceEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.NetworkInterfaceEventArgs.NetworkInterfaces">
<summary>
The sequece of detected network interfaces.
</summary>
<value>
A sequence of network interfaces.
</value>
</member>
<member name="T:Makaretu.Dns.RecentMessages">
<summary>
Maintains a sequence of recent messages.
</summary>
<remarks>
<b>RecentMessages</b> is used to determine if a message has already been
processed within the specified <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</remarks>
</member>
<member name="F:Makaretu.Dns.RecentMessages.Messages">
<summary>
Recent messages.
</summary>
<value>
The key is the Base64 encoding of the MD5 hash of
a message and the value is when the message was seen.
</value>
</member>
<member name="P:Makaretu.Dns.RecentMessages.Interval">
<summary>
The time interval used to determine if a message is recent.
</summary>
</member>
<member name="M:Makaretu.Dns.RecentMessages.TryAdd(System.Byte[])">
<summary>
Try adding a message to the recent message list.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
<b>true</b> if the message, did not already exist; otherwise,
<b>false</b> the message exists within the <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</returns>
</member>
<member name="M:Makaretu.Dns.RecentMessages.Prune">
<summary>
Remove any messages that are stale.
</summary>
<returns>
The number messages that were pruned.
</returns>
<remarks>
Anything older than an <see cref="P:Makaretu.Dns.RecentMessages.Interval"/> ago is removed.
</remarks>
</member>
<member name="M:Makaretu.Dns.RecentMessages.GetId(System.Byte[])">
<summary>
Gets a unique ID for a message.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
The Base64 encoding of the MD5 hash of the <paramref name="message"/>.
</returns>
</member>
<member name="T:Makaretu.Dns.ServiceDiscovery">
<summary>
DNS based Service Discovery is a way of using standard DNS programming interfaces, servers,
and packet formats to browse the network for services.
</summary>
<seealso href="https://tools.ietf.org/html/rfc6763">RFC 6763 DNS-Based Service Discovery</seealso>
</member>
<member name="F:Makaretu.Dns.ServiceDiscovery.ServiceName">
<summary>
The service discovery service name.
</summary>
<value>
The service name used to enumerate other services.
</value>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor(Makaretu.Dns.MulticastService)">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class with
the specified <see cref="T:Makaretu.Dns.MulticastService"/>.
</summary>
<param name="mdns">
The underlaying <see cref="T:Makaretu.Dns.MulticastService"/> to use.
</param>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.Mdns">
<summary>
Gets the multicasting service.
</summary>
<value>
Is used to send and recieve multicast <see cref="T:Makaretu.Dns.Message">DNS messages</see>.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.AnswersContainsAdditionalRecords">
<summary>
Add the additional records into the answers.
</summary>
<value>
Defaults to <b>false</b>.
</value>
<remarks>
Some malformed systems, such as js-ipfs and go-ipfs, only examine
the <see cref="P:Makaretu.Dns.Message.Answers"/> and not the <see cref="P:Makaretu.Dns.Message.AdditionalRecords"/>.
Setting this to <b>true</b>, will move the additional records
into the answers.
<para>
This never done for DNS-SD answers.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.NameServer">
<summary>
Gets the name server.
</summary>
<value>
Is used to answer questions.
</value>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered">
<summary>
Raised when a DNS-SD response is received.
</summary>
<value>
Contains the service name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers
to a DNS-SD query. When an anwser is received this event is raised.
<para>
Use <see cref="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices"/> to initiate a DNS-SD question.
</para>
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered">
<summary>
Raised when a servive instance is discovered.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance is received
this event is raised.
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown">
<summary>
Raised when a servive instance is shutting down.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance with a
TTL of zero is received this event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices">
<summary>
Asks other MDNS services to send their service names.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastAllServices">
<summary>
Asks other MDNS services to send their service names;
accepts unicast and/or broadcast answers.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName,System.String)">
<summary>
Asks instances of the specified service with the subtype to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<param name="subtype">
The feature that is needed.
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
accepts unicast and/or broadcast answers.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)">
<summary>
Advertise a service profile.
</summary>
<param name="service">
The service profile.
</param>
<remarks>
Any queries for the service or service instance will be answered with
information from the profile.
<para>
Besides adding the profile's resource records to the <see cref="T:Makaretu.Dns.Resolving.Catalog"/> PTR records are
created to support DNS-SD and reverse address mapping (DNS address lookup).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Announce(Makaretu.Dns.ServiceProfile)">
<summary>
Sends an unsolicited MDNS response describing the
service profile.
</summary>
<param name="profile">
The profile to describe.
</param>
<remarks>
Sends a MDNS response <see cref="T:Makaretu.Dns.Message"/> containing the pointer
and resource records of the <paramref name="profile"/>.
<para>
To provide increased robustness against packet loss,
two unsolicited responses are sent one second apart.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise(Makaretu.Dns.ServiceProfile)">
<summary>
Sends a goodbye message for the provided
profile and removes its pointer from the name sever.
</summary>
<param name="profile">The profile to send a goodbye message for.</param>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise">
<summary>
Sends a goodbye message for each anounced service.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceInstanceShutdownEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceShutdownEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceProfile">
<summary>
Defines a specific service that can be discovered.
</summary>
<seealso cref="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class.
</summary>
<remarks>
All details must be filled in by the caller, especially the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor(Makaretu.Dns.DomainName,Makaretu.Dns.DomainName,System.UInt16,System.Collections.Generic.IEnumerable{System.Net.IPAddress})">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class
with the specified details.
</summary>
<param name="instanceName">
A unique identifier for the specific service instance.
</param>
<param name="serviceName">
The <see cref="P:Makaretu.Dns.ServiceProfile.ServiceName">name</see> of the service.
</param>
<param name="port">
The TCP/UDP port of the service.
</param>
<param name="addresses">
The IP addresses of the specific service instance. If <b>null</b> then
<see cref="M:Makaretu.Dns.MulticastService.GetIPAddresses"/> is used.
</param>
<remarks>
The SRV, TXT and A/AAAA resoruce records are added to the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Domain">
<summary>
The top level domain (TLD) name of the service.
</summary>
<value>
Always "local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.ServiceName">
<summary>
A unique name for the service.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp".
</value>
<remarks>
It consists of a pair of DNS labels, following the
<see href="https://www.ietf.org/rfc/rfc2782.txt">SRV records</see> convention.
The first label of the pair is an underscore character (_) followed by
the <see href="https://tools.ietf.org/html/rfc6335">service name</see>.
The second label is either "_tcp" (for application
protocols that run over TCP) or "_udp" (for all others).
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.InstanceName">
<summary>
A unique identifier for the service instance.
</summary>
<value>
Some unique value.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.QualifiedServiceName">
<summary>
The service name and domain.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp.local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.HostName">
<summary>
The fully qualified name of the instance's host.
</summary>
<remarks>
This can be used to query the address records (A and AAAA)
of the service instance.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName">
<summary>
The instance name, service name and domain.
</summary>
<value>
<see cref="P:Makaretu.Dns.ServiceProfile.InstanceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.Domain"/>
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Resources">
<summary>
DNS resource records that are used to locate the service instance.
</summary>
<value>
More infomation about the service.
</value>
<remarks>
All records should have the <see cref="P:Makaretu.Dns.ResourceRecord.Name"/> equal
to the <see cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/> or the <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
<para>
At a minimum the <see cref="T:Makaretu.Dns.SRVRecord"/> and <see cref="T:Makaretu.Dns.TXTRecord"/>
records must be present.
Typically <see cref="T:Makaretu.Dns.AddressRecord">address records</see>
are also present and are associaed with <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Subtypes">
<summary>
A list of service features implemented by the service instance.
</summary>
<value>
The default is an empty list.
</value>
<seealso href="https://tools.ietf.org/html/rfc6763#section-7.1"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.AddProperty(System.String,System.String)">
<summary>
Add a property of the service to the <see cref="T:Makaretu.Dns.TXTRecord"/>.
</summary>
<param name="key">
The name of the property.
</param>
<param name="value">
The value of the property.
</param>
</member>
</members>
</doc>

View File

@ -1,862 +0,0 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Makaretu.Dns.Multicast</name>
</assembly>
<members>
<member name="T:Makaretu.Dns.MessageEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or
<see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.Message">
<summary>
The DNS message.
</summary>
<value>
The received message.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.RemoteEndPoint">
<summary>
The DNS message sender endpoint.
</summary>
<value>
The endpoint from the message was received.
</value>
</member>
<member name="P:Makaretu.Dns.MessageEventArgs.IsLegacyUnicast">
<summary>
Determines if the sender is using legacy unicast DNS.
</summary>
<value>
<b>false</b> if the sender is using port 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastClient">
<summary>
Performs the magic to send and receive datagrams over multicast
sockets.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastClient.MulticastPort">
<summary>
The port number assigned to Multicast DNS.
</summary>
<value>
Port number 5353.
</value>
</member>
<member name="T:Makaretu.Dns.MulticastService">
<summary>
Muticast Domain Name Service.
</summary>
<remarks>
Sends and receives DNS queries and answers via the multicast mechachism
defined in <see href="https://tools.ietf.org/html/rfc6762"/>.
<para>
Use <see cref="M:Makaretu.Dns.MulticastService.Start"/> to start listening for multicast messages.
One of the events, <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>, is
raised when a <see cref="T:Makaretu.Dns.Message"/> is received.
</para>
</remarks>
</member>
<member name="F:Makaretu.Dns.MulticastService.sentMessages">
<summary>
Recently sent messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.receivedMessages">
<summary>
Recently received messages.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.client">
<summary>
The multicast client.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp4">
<summary>
Use to send unicast IPv4 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.unicastClientIp6">
<summary>
Use to send unicast IPv6 answers.
</summary>
</member>
<member name="F:Makaretu.Dns.MulticastService.networkInterfacesFilter">
<summary>
Function used for listening filtered network interfaces.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.#cctor">
<summary>
Set the default TTLs.
</summary>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultTTL"/>
<seealso cref="F:Makaretu.Dns.ResourceRecord.DefaultHostTTL"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.QueryReceived">
<summary>
Raised when any local MDNS service sends a query.
</summary>
<value>
Contains the query <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
<seealso cref="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)"/>
</member>
<member name="E:Makaretu.Dns.MulticastService.AnswerReceived">
<summary>
Raised when any link-local MDNS service responds to a query.
</summary>
<value>
Contains the answer <see cref="T:Makaretu.Dns.Message"/>.
</value>
<remarks>
Any exception throw by the event handler is simply logged and
then forgotten.
</remarks>
</member>
<member name="E:Makaretu.Dns.MulticastService.MalformedMessage">
<summary>
Raised when a DNS message is received that cannot be decoded.
</summary>
<value>
The DNS message as a byte array.
</value>
</member>
<member name="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered">
<summary>
Raised when one or more network interfaces are discovered.
</summary>
<value>
Contains the network interface(s).
</value>
</member>
<member name="M:Makaretu.Dns.MulticastService.#ctor(System.Func{System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface},System.Collections.Generic.IEnumerable{System.Net.NetworkInformation.NetworkInterface}})">
<summary>
Create a new instance of the <see cref="T:Makaretu.Dns.MulticastService"/> class.
</summary>
<param name="filter">
Multicast listener will be bound to result of filtering function.
</param>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv4">
<summary>
Send and receive on IPv4.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.UseIpv6">
<summary>
Send and receive on IPv6.
</summary>
<value>
Defaults to <b>true</b> if the OS supports it.
</value>
</member>
<member name="P:Makaretu.Dns.MulticastService.IgnoreDuplicateMessages">
<summary>
Determines if received messages are checked for duplicates.
</summary>
<value>
<b>true</b> to ignore duplicate messages. Defaults to <b>true</b>.
</value>
<remarks>
When set, a message that has been received within the last minute
will be ignored.
</remarks>
</member>
<member name="P:Makaretu.Dns.MulticastService.NetworkInterfaceDiscoveryInterval">
<summary>
The interval for discovering network interfaces.
</summary>
<value>
Default is 2 minutes.
</value>
<remarks>
When the interval is reached a task is started to discover any
new network interfaces.
</remarks>
<seealso cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetNetworkInterfaces">
<summary>
Get the network interfaces that are useable.
</summary>
<returns>
A sequence of <see cref="T:System.Net.NetworkInformation.NetworkInterface"/>.
</returns>
<remarks>
The following filters are applied
<list type="bullet">
<item><description>interface is enabled</description></item>
<item><description>interface is not a loopback</description></item>
</list>
<para>
If no network interface is operational, then the loopback interface(s)
are included (127.0.0.1 and/or ::1).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetIPAddresses">
<summary>
Get the IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses of the local machine.
</returns>
<remarks>
The loopback addresses (127.0.0.1 and ::1) are NOT included in the
returned sequences.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.GetLinkLocalAddresses">
<summary>
Get the link local IP addresses of the local machine.
</summary>
<returns>
A sequence of IP addresses.
</returns>
<remarks>
All IPv4 addresses are considered link local.
</remarks>
<seealso href="https://en.wikipedia.org/wiki/Link-local_address"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.Start">
<summary>
Start the service.
</summary>
</member>
<member name="M:Makaretu.Dns.MulticastService.Stop">
<summary>
Stop the service.
</summary>
<remarks>
Clears all the event handlers.
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.ResolveAsync(Makaretu.Dns.Message,System.Threading.CancellationToken)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendUnicastQuery(Makaretu.Dns.DomainName,Makaretu.Dns.DnsClass,Makaretu.Dns.DnsType)">
<summary>
Ask for answers about a name and accept unicast and/or broadcast response.
</summary>
<param name="name">
A domain name that should end with ".local", e.g. "myservice.local".
</param>
<param name="klass">
The class, defaults to <see cref="F:Makaretu.Dns.DnsClass.IN"/>.
</param>
<param name="type">
The question type, defaults to <see cref="F:Makaretu.Dns.DnsType.ANY"/>.
</param>
<remarks>
Send a "QU" question (unicast). The most significat bit of the Class is set.
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendQuery(Makaretu.Dns.Message)">
<summary>
Ask for answers.
</summary>
<param name="msg">
A query message.
</param>
<remarks>
Answers to any query are obtained on the <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/>
event.
</remarks>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="msg"/> is too large.
</exception>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> set to zero and any questions are removed.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
<note type="caution">
If possible the <see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)"/>
method should be used, so that legacy unicast queries are supported.
</note>
</remarks>
<see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/>
<seealso cref="M:Makaretu.Dns.Message.CreateResponse"/>
</member>
<member name="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,Makaretu.Dns.MessageEventArgs,System.Boolean)">
<summary>
Send an answer to a query.
</summary>
<param name="answer">
The answer message.
</param>
<param name="query">
The query that is being answered.
</param>
<param name="checkDuplicate">
If <b>true</b>, then if the same <paramref name="answer"/> was
recently sent it will not be sent again.
</param>
<exception cref="T:System.InvalidOperationException">
When the service has not started.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException">
When the serialised <paramref name="answer"/> is too large.
</exception>
<remarks>
<para>
If the <paramref name="query"/> is a standard multicast query (sent to port 5353), then
<see cref="M:Makaretu.Dns.MulticastService.SendAnswer(Makaretu.Dns.Message,System.Boolean)"/> is called.
</para>
<para>
Otherwise a legacy unicast reponse is sent to sender's end point.
The <see cref="P:Makaretu.Dns.Message.AA"/> flag is set to true,
the <see cref="P:Makaretu.Dns.Message.Id"/> is set to query's ID,
the <see cref="P:Makaretu.Dns.Message.Questions"/> is set to the query's questions,
and all resource record TTLs have a max value of 10 seconds.
</para>
<para>
The <paramref name="answer"/> is <see cref="M:Makaretu.Dns.Message.Truncate(System.Int32)">truncated</see>
if exceeds the maximum packet length.
</para>
<para>
<paramref name="checkDuplicate"/> should always be <b>true</b> except
when <see href="https://tools.ietf.org/html/rfc6762#section-8.1">answering a probe</see>.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.OnDnsMessage(System.Object,System.Net.Sockets.UdpReceiveResult)">
<summary>
Called by the MulticastClient when a DNS message is received.
</summary>
<param name="sender">
The <see cref="T:Makaretu.Dns.MulticastClient"/> that got the message.
</param>
<param name="result">
The received message <see cref="T:System.Net.Sockets.UdpReceiveResult"/>.
</param>
<remarks>
Decodes the <paramref name="result"/> and then raises
either the <see cref="E:Makaretu.Dns.MulticastService.QueryReceived"/> or <see cref="E:Makaretu.Dns.MulticastService.AnswerReceived"/> event.
<para>
Multicast DNS messages received with an OPCODE or RCODE other than zero
are silently ignored.
</para>
<para>
If the message cannot be decoded, then the <see cref="E:Makaretu.Dns.MulticastService.MalformedMessage"/>
event is raised.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.MulticastService.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.NetworkInterfaceEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.MulticastService.NetworkInterfaceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.NetworkInterfaceEventArgs.NetworkInterfaces">
<summary>
The sequece of detected network interfaces.
</summary>
<value>
A sequence of network interfaces.
</value>
</member>
<member name="T:Makaretu.Dns.RecentMessages">
<summary>
Maintains a sequence of recent messages.
</summary>
<remarks>
<b>RecentMessages</b> is used to determine if a message has already been
processed within the specified <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</remarks>
</member>
<member name="F:Makaretu.Dns.RecentMessages.Messages">
<summary>
Recent messages.
</summary>
<value>
The key is the Base64 encoding of the MD5 hash of
a message and the value is when the message was seen.
</value>
</member>
<member name="P:Makaretu.Dns.RecentMessages.Interval">
<summary>
The time interval used to determine if a message is recent.
</summary>
</member>
<member name="M:Makaretu.Dns.RecentMessages.TryAdd(System.Byte[])">
<summary>
Try adding a message to the recent message list.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
<b>true</b> if the message, did not already exist; otherwise,
<b>false</b> the message exists within the <see cref="P:Makaretu.Dns.RecentMessages.Interval"/>.
</returns>
</member>
<member name="M:Makaretu.Dns.RecentMessages.Prune">
<summary>
Remove any messages that are stale.
</summary>
<returns>
The number messages that were pruned.
</returns>
<remarks>
Anything older than an <see cref="P:Makaretu.Dns.RecentMessages.Interval"/> ago is removed.
</remarks>
</member>
<member name="M:Makaretu.Dns.RecentMessages.GetId(System.Byte[])">
<summary>
Gets a unique ID for a message.
</summary>
<param name="message">
The binary representation of a message.
</param>
<returns>
The Base64 encoding of the MD5 hash of the <paramref name="message"/>.
</returns>
</member>
<member name="T:Makaretu.Dns.ServiceDiscovery">
<summary>
DNS based Service Discovery is a way of using standard DNS programming interfaces, servers,
and packet formats to browse the network for services.
</summary>
<seealso href="https://tools.ietf.org/html/rfc6763">RFC 6763 DNS-Based Service Discovery</seealso>
</member>
<member name="F:Makaretu.Dns.ServiceDiscovery.ServiceName">
<summary>
The service discovery service name.
</summary>
<value>
The service name used to enumerate other services.
</value>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.#ctor(Makaretu.Dns.MulticastService)">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceDiscovery"/> class with
the specified <see cref="T:Makaretu.Dns.MulticastService"/>.
</summary>
<param name="mdns">
The underlaying <see cref="T:Makaretu.Dns.MulticastService"/> to use.
</param>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.Mdns">
<summary>
Gets the multicasting service.
</summary>
<value>
Is used to send and recieve multicast <see cref="T:Makaretu.Dns.Message">DNS messages</see>.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.AnswersContainsAdditionalRecords">
<summary>
Add the additional records into the answers.
</summary>
<value>
Defaults to <b>false</b>.
</value>
<remarks>
Some malformed systems, such as js-ipfs and go-ipfs, only examine
the <see cref="P:Makaretu.Dns.Message.Answers"/> and not the <see cref="P:Makaretu.Dns.Message.AdditionalRecords"/>.
Setting this to <b>true</b>, will move the additional records
into the answers.
<para>
This never done for DNS-SD answers.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceDiscovery.NameServer">
<summary>
Gets the name server.
</summary>
<value>
Is used to answer questions.
</value>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered">
<summary>
Raised when a DNS-SD response is received.
</summary>
<value>
Contains the service name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers
to a DNS-SD query. When an anwser is received this event is raised.
<para>
Use <see cref="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices"/> to initiate a DNS-SD question.
</para>
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered">
<summary>
Raised when a servive instance is discovered.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance is received
this event is raised.
</remarks>
</member>
<member name="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown">
<summary>
Raised when a servive instance is shutting down.
</summary>
<value>
Contains the service instance name.
</value>
<remarks>
<b>ServiceDiscovery</b> passively monitors the network for any answers.
When an answer containing a PTR to a service instance with a
TTL of zero is received this event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryAllServices">
<summary>
Asks other MDNS services to send their service names.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastAllServices">
<summary>
Asks other MDNS services to send their service names;
accepts unicast and/or broadcast answers.
</summary>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceDiscovered"/> event is raised.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryServiceInstances(Makaretu.Dns.DomainName,System.String)">
<summary>
Asks instances of the specified service with the subtype to send details.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<param name="subtype">
The feature that is needed.
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.QueryUnicastServiceInstances(Makaretu.Dns.DomainName)">
<summary>
Asks instances of the specified service to send details.
accepts unicast and/or broadcast answers.
</summary>
<param name="service">
The service name to query. Typically of the form "_<i>service</i>._tcp".
</param>
<remarks>
When an answer is received the <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/> event is raised.
</remarks>
<seealso cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)">
<summary>
Advertise a service profile.
</summary>
<param name="service">
The service profile.
</param>
<remarks>
Any queries for the service or service instance will be answered with
information from the profile.
<para>
Besides adding the profile's resource records to the <see cref="T:Makaretu.Dns.Resolving.Catalog"/> PTR records are
created to support DNS-SD and reverse address mapping (DNS address lookup).
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Announce(Makaretu.Dns.ServiceProfile)">
<summary>
Sends an unsolicited MDNS response describing the
service profile.
</summary>
<param name="profile">
The profile to describe.
</param>
<remarks>
Sends a MDNS response <see cref="T:Makaretu.Dns.Message"/> containing the pointer
and resource records of the <paramref name="profile"/>.
<para>
To provide increased robustness against packet loss,
two unsolicited responses are sent one second apart.
</para>
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise(Makaretu.Dns.ServiceProfile)">
<summary>
Sends a goodbye message for the provided
profile and removes its pointer from the name sever.
</summary>
<param name="profile">The profile to send a goodbye message for.</param>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Unadvertise">
<summary>
Sends a goodbye message for each anounced service.
</summary>
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Makaretu.Dns.ServiceDiscovery.Dispose">
<inheritdoc />
</member>
<member name="T:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceDiscovered"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceDiscoveryEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceInstanceShutdownEventArgs">
<summary>
The event data for <see cref="E:Makaretu.Dns.ServiceDiscovery.ServiceInstanceShutdown"/>.
</summary>
</member>
<member name="P:Makaretu.Dns.ServiceInstanceShutdownEventArgs.ServiceInstanceName">
<summary>
The fully qualified name of the service instance.
</summary>
<value>
Typically of the form "<i>instance</i>._<i>service</i>._tcp.local".
</value>
<seealso cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/>
</member>
<member name="T:Makaretu.Dns.ServiceProfile">
<summary>
Defines a specific service that can be discovered.
</summary>
<seealso cref="M:Makaretu.Dns.ServiceDiscovery.Advertise(Makaretu.Dns.ServiceProfile)"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class.
</summary>
<remarks>
All details must be filled in by the caller, especially the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.#ctor(Makaretu.Dns.DomainName,Makaretu.Dns.DomainName,System.UInt16,System.Collections.Generic.IEnumerable{System.Net.IPAddress})">
<summary>
Creates a new instance of the <see cref="T:Makaretu.Dns.ServiceProfile"/> class
with the specified details.
</summary>
<param name="instanceName">
A unique identifier for the specific service instance.
</param>
<param name="serviceName">
The <see cref="P:Makaretu.Dns.ServiceProfile.ServiceName">name</see> of the service.
</param>
<param name="port">
The TCP/UDP port of the service.
</param>
<param name="addresses">
The IP addresses of the specific service instance. If <b>null</b> then
<see cref="M:Makaretu.Dns.MulticastService.GetIPAddresses"/> is used.
</param>
<remarks>
The SRV, TXT and A/AAAA resoruce records are added to the <see cref="P:Makaretu.Dns.ServiceProfile.Resources"/>.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Domain">
<summary>
The top level domain (TLD) name of the service.
</summary>
<value>
Always "local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.ServiceName">
<summary>
A unique name for the service.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp".
</value>
<remarks>
It consists of a pair of DNS labels, following the
<see href="https://www.ietf.org/rfc/rfc2782.txt">SRV records</see> convention.
The first label of the pair is an underscore character (_) followed by
the <see href="https://tools.ietf.org/html/rfc6335">service name</see>.
The second label is either "_tcp" (for application
protocols that run over TCP) or "_udp" (for all others).
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.InstanceName">
<summary>
A unique identifier for the service instance.
</summary>
<value>
Some unique value.
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.QualifiedServiceName">
<summary>
The service name and domain.
</summary>
<value>
Typically of the form "_<i>service</i>._tcp.local".
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.HostName">
<summary>
The fully qualified name of the instance's host.
</summary>
<remarks>
This can be used to query the address records (A and AAAA)
of the service instance.
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName">
<summary>
The instance name, service name and domain.
</summary>
<value>
<see cref="P:Makaretu.Dns.ServiceProfile.InstanceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.ServiceName"/>.<see cref="P:Makaretu.Dns.ServiceProfile.Domain"/>
</value>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Resources">
<summary>
DNS resource records that are used to locate the service instance.
</summary>
<value>
More infomation about the service.
</value>
<remarks>
All records should have the <see cref="P:Makaretu.Dns.ResourceRecord.Name"/> equal
to the <see cref="P:Makaretu.Dns.ServiceProfile.FullyQualifiedName"/> or the <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
<para>
At a minimum the <see cref="T:Makaretu.Dns.SRVRecord"/> and <see cref="T:Makaretu.Dns.TXTRecord"/>
records must be present.
Typically <see cref="T:Makaretu.Dns.AddressRecord">address records</see>
are also present and are associaed with <see cref="P:Makaretu.Dns.ServiceProfile.HostName"/>.
</para>
</remarks>
</member>
<member name="P:Makaretu.Dns.ServiceProfile.Subtypes">
<summary>
A list of service features implemented by the service instance.
</summary>
<value>
The default is an empty list.
</value>
<seealso href="https://tools.ietf.org/html/rfc6763#section-7.1"/>
</member>
<member name="M:Makaretu.Dns.ServiceProfile.AddProperty(System.String,System.String)">
<summary>
Add a property of the service to the <see cref="T:Makaretu.Dns.TXTRecord"/>.
</summary>
<param name="key">
The name of the property.
</param>
<param name="value">
The value of the property.
</param>
</member>
</members>
</doc>

View File

@ -104,9 +104,6 @@
<HintPath>packages\AsyncEnumerator.4.0.2\lib\net461\AsyncEnumerable.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Net.IPNetwork">
<HintPath>packages\IPNetwork2.2.1.2\lib\net46\System.Net.IPNetwork.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="Common.Logging.Core">
@ -118,11 +115,8 @@
<Reference Include="SimpleBase">
<HintPath>packages\SimpleBase.1.3.1\lib\net45\SimpleBase.dll</HintPath>
</Reference>
<Reference Include="Makaretu.Dns">
<HintPath>packages\Makaretu.Dns.2.0.1\lib\net45\Makaretu.Dns.dll</HintPath>
</Reference>
<Reference Include="Makaretu.Dns.Multicast">
<HintPath>packages\Makaretu.Dns.Multicast.0.27.0\lib\net461\Makaretu.Dns.Multicast.dll</HintPath>
<Reference Include="CookiesTxtParser">
<HintPath>packages\CookiesTxtParser.1.0.1\lib\netstandard2.0\CookiesTxtParser.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>