| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using STUN.Enums;
- using STUN.Message;
- using STUN.Message.Attributes;
- using System.Linq;
- using System.Net;
- namespace STUN.Utils
- {
- public static class AttributeExtensions
- {
- public static Attribute BuildChangeRequest(bool changeIp, bool changePort)
- {
- return new()
- {
- Type = AttributeType.ChangeRequest,
- Length = 4,
- Value = new ChangeRequestAttribute { ChangeIp = changeIp, ChangePort = changePort }
- };
- }
- public static IPEndPoint? GetMappedAddressAttribute(this StunMessage5389? response)
- {
- var mappedAddressAttribute = response?.Attributes.FirstOrDefault(t => t.Type == AttributeType.MappedAddress);
- if (mappedAddressAttribute is null)
- {
- return null;
- }
- var mapped = (MappedAddressAttribute)mappedAddressAttribute.Value;
- return new IPEndPoint(mapped.Address!, mapped.Port);
- }
- public static IPEndPoint? GetChangedAddressAttribute(this StunMessage5389? response)
- {
- var changedAddressAttribute = response?.Attributes.FirstOrDefault(t => t.Type == AttributeType.ChangedAddress);
- if (changedAddressAttribute is null)
- {
- return null;
- }
- var address = (ChangedAddressAttribute)changedAddressAttribute.Value;
- return new IPEndPoint(address.Address!, address.Port);
- }
- public static IPEndPoint? GetXorMappedAddressAttribute(this StunMessage5389? response)
- {
- var mappedAddressAttribute =
- response?.Attributes.FirstOrDefault(t => t.Type == AttributeType.XorMappedAddress) ??
- response?.Attributes.FirstOrDefault(t => t.Type == AttributeType.MappedAddress);
- if (mappedAddressAttribute is null)
- {
- return null;
- }
- var mapped = (AddressAttribute)mappedAddressAttribute.Value;
- return new IPEndPoint(mapped.Address!, mapped.Port);
- }
- public static IPEndPoint? GetOtherAddressAttribute(this StunMessage5389? response)
- {
- var addressAttribute =
- response?.Attributes.FirstOrDefault(t => t.Type == AttributeType.OtherAddress) ??
- response?.Attributes.FirstOrDefault(t => t.Type == AttributeType.ChangedAddress);
- if (addressAttribute is null)
- {
- return null;
- }
- var address = (AddressAttribute)addressAttribute.Value;
- return new IPEndPoint(address.Address!, address.Port);
- }
- }
- }
|