1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| public static TResponse ExecuteRequest<TResponse>(string baseUrl, AbstractRequest<TResponse> request, IWebProxy proxy, [CanBeNull] BlackList blackList, int timeoutInMilliseconds = 0) where TResponse : AbstractResponse { TResponse tresponse; if (blackList != null && blackList.IsBlacklisted(baseUrl)) { ClientUtil.Logger.Trace("{0} is blacklisted", baseUrl); string blacklistedLicenseServerMessage = ClientUtil.BlacklistedLicenseServerMessage; long salt = 0L; ResponseCode responseCode = ResponseCode.ERROR; tresponse = default(TResponse); return AbstractResponse.Error<TResponse>(blacklistedLicenseServerMessage, salt, responseCode, tresponse); } string text = baseUrl + "/rpc/" + request.ActionName + "?"; try { foreach (FieldInfo fieldInfo in request.GetType().GetFields()) { string text2 = AbstractResponse.ConvertFieldName(fieldInfo.Name); if (!(text2 == "actionName") && !(text2 == "class")) { if (!text.EndsWith("?")) { text += "&"; } object value = fieldInfo.GetValue(request) ?? ""; text += string.Format("{0}={1}", text2, UrlUtil.Encode(AbstractResponse.ValueToString(value), Encoding.UTF8)); } } if (ClientUtil.Logger.IsTraceEnabled()) { ClientUtil.Logger.Trace("Request: {0}", text); ClientUtil.Logger.Trace("Request decoded: {0}", UrlUtil.Decode(text, Encoding.UTF8)); ClientUtil.Logger.Trace("Authorization header: {0}", request.AuthorizationHeader); } ValueTuple<string, string> valueTuple = ClientUtil.ExecuteRequest(text, proxy, request.SignatureVerifier, request.AuthorizationHeader, timeoutInMilliseconds); string item = valueTuple.Item1; ClientUtil.Logger.Trace("Response: {0}", item); if (item == null) { string message = "No valid response returned by license server"; long salt2 = request.Salt; ResponseCode responseCode2 = ResponseCode.ERROR; tresponse = default(TResponse); tresponse = AbstractResponse.Error<TResponse>(message, salt2, responseCode2, tresponse); } else if (item == ClientUtil.BlacklistedLicenseServerMessage) { tresponse = AbstractResponse.Error<TResponse>(ClientUtil.BlacklistedLicenseServerMessage, request.Salt, ResponseCode.ERROR, default(TResponse)); } else if (item == ClientUtil.FipsEnabledLicenseServerMessage) { tresponse = AbstractResponse.Error<TResponse>(ClientUtil.FipsEnabledLicenseServerMessage, request.Salt, ResponseCode.ERROR, default(TResponse)); } else if (item == ClientUtil.InvalidResponseSignatureMessage) { tresponse = AbstractResponse.NetworkError<TResponse>(ClientUtil.InvalidResponseSignatureMessage, request.Salt); } else if (item == ClientUtil.ExpiredCertificateLicenseServerMessage) { tresponse = AbstractResponse.NetworkError<TResponse>(ClientUtil.ExpiredCertificateLicenseServerMessage, request.Salt); } else { TResponse tresponse2 = AbstractResponse.CreateResponse<TResponse>(item); if (tresponse2.ResponseCode == ResponseCode.SERVER_INTERNAL_ERROR) { tresponse = AbstractResponse.NetworkError<TResponse>("License server internal error: " + tresponse2.Message, request.Salt); } else if (tresponse2.ResponseCode != ResponseCode.OK) { tresponse = AbstractResponse.Error<TResponse>("License server response: " + tresponse2.Message, request.Salt, ResponseCode.ERROR, tresponse2); } else if (tresponse2.Salt != request.Salt) { tresponse = AbstractResponse.Error<TResponse>("Unmatched response returned by license server", request.Salt, ResponseCode.ERROR, default(TResponse)); } else { IResponseWithFullTicket responseWithFullTicket = tresponse2 as IResponseWithFullTicket; if (responseWithFullTicket != null) { responseWithFullTicket.TicketFull = new ValueTuple<string, string>(item, valueTuple.Item2); } tresponse = tresponse2; } } } catch (WebException ex) { ClientUtil.Logger.LogExceptionSilently(ex); tresponse = ClientUtil.ToResponse<TResponse>(ex, "Connect to license server"); } catch (SocketException ex2) { ClientUtil.Logger.LogExceptionSilently(ex2); tresponse = ClientUtil.ToResponse<TResponse>(ex2, "Connect to license server"); } catch (Exception ex3) { ClientUtil.Logger.LogExceptionSilently(ex3); tresponse = ClientUtil.ToResponse<TResponse>(ex3, "Connect to license server"); } return tresponse; }
|