123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- using System.IO;
- using Org.BouncyCastle.Utilities;
- namespace Org.BouncyCastle.Crypto.Tls
- {
- public class ServerName
- {
- protected readonly byte mNameType;
- protected readonly object mName;
- public ServerName(byte nameType, object name)
- {
- if (!IsCorrectType(nameType, name))
- throw new ArgumentException("not an instance of the correct type", "name");
- this.mNameType = nameType;
- this.mName = name;
- }
- public virtual byte NameType
- {
- get { return mNameType; }
- }
- public virtual object Name
- {
- get { return mName; }
- }
- public virtual string GetHostName()
- {
- if (!IsCorrectType(Tls.NameType.host_name, mName))
- throw new InvalidOperationException("'name' is not a HostName string");
- return (string)mName;
- }
- /**
- * Encode this {@link ServerName} to a {@link Stream}.
- *
- * @param output
- * the {@link Stream} to encode to.
- * @throws IOException
- */
- public virtual void Encode(Stream output)
- {
- TlsUtilities.WriteUint8(mNameType, output);
- switch (mNameType)
- {
- case Tls.NameType.host_name:
- byte[] asciiEncoding = Strings.ToAsciiByteArray((string)mName);
- if (asciiEncoding.Length < 1)
- throw new TlsFatalAlert(AlertDescription.internal_error);
- TlsUtilities.WriteOpaque16(asciiEncoding, output);
- break;
- default:
- throw new TlsFatalAlert(AlertDescription.internal_error);
- }
- }
- /**
- * Parse a {@link ServerName} from a {@link Stream}.
- *
- * @param input
- * the {@link Stream} to parse from.
- * @return a {@link ServerName} object.
- * @throws IOException
- */
- public static ServerName Parse(Stream input)
- {
- byte name_type = TlsUtilities.ReadUint8(input);
- object name;
- switch (name_type)
- {
- case Tls.NameType.host_name:
- {
- byte[] asciiEncoding = TlsUtilities.ReadOpaque16(input);
- if (asciiEncoding.Length < 1)
- throw new TlsFatalAlert(AlertDescription.decode_error);
- name = Strings.FromAsciiByteArray(asciiEncoding);
- break;
- }
- default:
- throw new TlsFatalAlert(AlertDescription.decode_error);
- }
- return new ServerName(name_type, name);
- }
- protected static bool IsCorrectType(byte nameType, object name)
- {
- switch (nameType)
- {
- case Tls.NameType.host_name:
- return name is string;
- default:
- throw new ArgumentException("unsupported value", "name");
- }
- }
- }
- }
- #endif
|