/// <summary> /// <see cref="ChallengeResponse.Generate(RtspRequest.RtspMethod, Uri)"/> /// </summary> public override string Generate(RtspRequest.RtspMethod method, Uri uri) { // Generate digets response value. var ha1 = ToMd5HexString($"{Credentials.Username}:{Realm}:{Credentials.Password}"); var ha2 = ToMd5HexString($"{method}:{uri}"); var response = ToMd5HexString($"{ha1}:{Nonce}:{ha2}"); var sb = new StringBuilder("Digest").Append(" username=\"") .Append(Credentials.Username) .Append("\"") .Append(", realm=\"") .Append(Realm) .Append("\"") .Append(", nonce=\"") .Append(Nonce) .Append("\""); if (!string.IsNullOrEmpty(Domain)) { sb.Append(", domain=\"").Append(Domain).Append("\""); } if (!string.IsNullOrEmpty(Opaque)) { sb.Append(", opaque=\"").Append(Opaque).Append("\""); } sb.Append(", uri=\"").Append(uri).Append("\""); sb.Append(", response=\"").Append(response).Append("\""); return(sb.ToString()); }
private RtspResponse CheckResponse(RtspResponse response, RtspRequest.RtspMethod method) { var status = response.ResponseStatus; if (status.Code >= RtspResponse.Status.BadRequest.Code) { throw new RtspClientException($"{method} received response status {status.Code} {status.ReasonPhrase}"); } return(response); }
/// <summary> /// Generate the RTSP Authorization header value based on the WWW-Authenticate /// challenge type /// </summary> /// <param name="method">The RTSP method used to generate header value</param> /// <param name="uri">The uri used to generate the header value</param> /// <returns></returns> public abstract string Generate(RtspRequest.RtspMethod method, Uri uri);
/// <summary> /// <see cref="ChallengeResponse.Generate(RtspRequest.RtspMethod, Uri)"/> /// </summary> public override string Generate(RtspRequest.RtspMethod method, Uri uri) { string auth = $"{Credentials.Username}:{Credentials.Password}"; return($"Basic {Convert.ToBase64String(Encoding.UTF8.GetBytes(auth))}"); }