#### [Abblix\.SharedSignals](https://www.abblix.com/en/docs/api/abblix-sharedsignals 'index')
### [Abblix\.SharedSignals\.Transmitter](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter 'Abblix\.SharedSignals\.Transmitter')

## ReceiverAddressPolicy Class

Decides whether the transmitter may deliver to the address a receiver put in its stream configuration\.

```csharp
public sealed class ReceiverAddressPolicy
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → ReceiverAddressPolicy

### Remarks
A receiver names its own delivery endpoint \(SSF 1\.0 Section 8\.1\.1\.1\), so that address is input from outside,
and the transmitter POSTs security event tokens to it\. Without this check a receiver could point a stream at a
cloud metadata service and have the transmitter fetch it, which is server\-side request forgery with the
transmitter's own network position\.

The rules about which addresses are internal are shared with every other outbound caller in this family, so
they come from [PrivateNetworks](https://www.abblix.com/en/docs/api/abblix-utils/Abblix.Utils.PrivateNetworks 'Abblix\.Utils\.PrivateNetworks') rather than being restated here.
### Constructors

## ReceiverAddressPolicy\(SharedSignalsTransmitterOptions, HostResolver\) Constructor {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.ReceiverAddressPolicy(Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions,Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.HostResolver)}

Decides whether the transmitter may deliver to the address a receiver put in its stream configuration\.

```csharp
public ReceiverAddressPolicy(Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions options, Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.HostResolver? resolveHost=null);
```
#### Parameters

###### `options` [SharedSignalsTransmitterOptions](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions 'Abblix\.SharedSignals\.Transmitter\.SharedSignalsTransmitterOptions') {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.ReceiverAddressPolicy(Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions,Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.HostResolver).options}

The deployment's transmitter settings, including the operator's allow\-list\.

###### `resolveHost` [HostResolver\(string, CancellationToken\)](Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.HostResolver(string,System.Threading.CancellationToken).md 'Abblix\.SharedSignals\.Transmitter\.ReceiverAddressPolicy\.HostResolver\(string, System\.Threading\.CancellationToken\)') {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.ReceiverAddressPolicy(Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions,Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.HostResolver).resolveHost}

Resolves a hostname to its addresses; defaults to [System\.Net\.Dns\.GetHostAddressesAsync\(System\.String,System\.Threading\.CancellationToken\)](https://learn.microsoft.com/en-us/dotnet/api/system.net.dns.gethostaddressesasync#system-net-dns-gethostaddressesasync(system-string-system-threading-cancellationtoken) 'System\.Net\.Dns\.GetHostAddressesAsync\(System\.String,System\.Threading\.CancellationToken\)')\. A test supplies its own so the resolved\-address branch, the only part of this policy
that is not a string comparison, can be driven in both directions without a live DNS\.

### Remarks
A receiver names its own delivery endpoint \(SSF 1\.0 Section 8\.1\.1\.1\), so that address is input from outside,
and the transmitter POSTs security event tokens to it\. Without this check a receiver could point a stream at a
cloud metadata service and have the transmitter fetch it, which is server\-side request forgery with the
transmitter's own network position\.

The rules about which addresses are internal are shared with every other outbound caller in this family, so
they come from [PrivateNetworks](https://www.abblix.com/en/docs/api/abblix-utils/Abblix.Utils.PrivateNetworks 'Abblix\.Utils\.PrivateNetworks') rather than being restated here.
### Methods

## ReceiverAddressPolicy\.RejectionOf\(Uri, CancellationToken\) Method {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.RejectionOf(System.Uri,System.Threading.CancellationToken)}

Judges the address of a delivery endpoint\.

```csharp
public System.Threading.Tasks.Task<string?> RejectionOf(System.Uri endpoint, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `endpoint` [System\.Uri](https://learn.microsoft.com/en-us/dotnet/api/system.uri 'System\.Uri') {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.RejectionOf(System.Uri,System.Threading.CancellationToken).endpoint}

The endpoint a receiver configured for its stream\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.RejectionOf(System.Uri,System.Threading.CancellationToken).cancellationToken}

Cancels the name resolution\.

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')  
Null when delivery may proceed; otherwise why it may not, in a form fit for a log\.

## ReceiverAddressPolicy\.RejectionOfName\(Uri\) Method {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.RejectionOfName(System.Uri)}

Why this transmitter will never deliver to the address AS WRITTEN, or null when its name alone
gives no reason to refuse\.

```csharp
public string? RejectionOfName(System.Uri endpoint);
```
#### Parameters

###### `endpoint` [System\.Uri](https://learn.microsoft.com/en-us/dotnet/api/system.uri 'System\.Uri') {#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.RejectionOfName(System.Uri).endpoint}

The endpoint a receiver proposed for its stream\.

#### Returns
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')

### Remarks

This is the question a REGISTRATION may answer, and it is a strict prefix of
[RejectionOf\(Uri, CancellationToken\)](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy#Abblix.SharedSignals.Transmitter.ReceiverAddressPolicy.RejectionOf(System.Uri,System.Threading.CancellationToken) 'Abblix\.SharedSignals\.Transmitter\.ReceiverAddressPolicy\.RejectionOf\(System\.Uri, System\.Threading\.CancellationToken\)') rather than a second copy of it - so the two cannot come to disagree,
which is the whole reason there is one policy and not a rule restated at each call site.

Everything judged here is fixed the moment the receiver names the address: an operator's
permission, the scheme, a hostname spelling out this deployment's own network, an IP literal.
None of it can change between registration and delivery, so accepting such an address and then
refusing every push tells the receiver nothing the transmitter did not already know.

Resolution is deliberately NOT part of it. A name is resolved again for every pass, so an answer
given now says nothing about the next one - and a resolver that is briefly down is a condition an
operator recovers from, which delivery treats as one by holding the queue. Answered at
registration the identical fact becomes a terminal refusal, and a receiver registering while its
own DNS record is still propagating cannot tell that from a permanent misconfiguration.
