public void EditR53Record(Amazon.Route53.Model.ResourceRecordSet rrset, bool delete = false) { using (var r53 = new Amazon.Route53.AmazonRoute53Client( CommonParams.ResolveCredentials(), CommonParams.RegionEndpoint)) { var rrRequ = new Amazon.Route53.Model.ChangeResourceRecordSetsRequest { HostedZoneId = HostedZoneId, ChangeBatch = new Amazon.Route53.Model.ChangeBatch { Changes = new List <Amazon.Route53.Model.Change> { new Amazon.Route53.Model.Change { Action = delete ? Amazon.Route53.ChangeAction.DELETE : Amazon.Route53.ChangeAction.UPSERT, ResourceRecordSet = rrset } } } }; var rrResp = r53.ChangeResourceRecordSets(rrRequ); } }
public async Task EditR53Record(Amazon.Route53.Model.ResourceRecordSet rrSet, bool delete = false) { #pragma warning disable 618 // "'StoredProfileCredentials' is obsolete..." //var creds = new BasicAWSCredentials(AwsAccessKey, AwsSecretKey); var creds = new StoredProfileAWSCredentials("acmesharp-tests"); #pragma warning restore 618 var reg = RegionEndpoint.GetBySystemName(AwsRegion); using (var r53 = new Amazon.Route53.AmazonRoute53Client(creds, reg)) { var rrRequ = new Amazon.Route53.Model.ChangeResourceRecordSetsRequest { HostedZoneId = HostedZoneId, ChangeBatch = new Amazon.Route53.Model.ChangeBatch { Changes = new List <Amazon.Route53.Model.Change> { new Amazon.Route53.Model.Change { Action = delete ? Amazon.Route53.ChangeAction.DELETE : Amazon.Route53.ChangeAction.UPSERT, ResourceRecordSet = rrSet } } } }; var rrResp = await r53.ChangeResourceRecordSetsAsync(rrRequ); } }
public static void Route53CreateAdd(string[] args) { #region Route53CreateAdd string domainName = "www.example.org"; IAmazonRoute53 route53Client = new AmazonRoute53Client(); CreateHostedZoneRequest zoneRequest = new CreateHostedZoneRequest { Name = domainName, CallerReference = "my_change_request" }; CreateHostedZoneResponse zoneResponse = route53Client.CreateHostedZone(zoneRequest); ResourceRecordSet recordSet = new ResourceRecordSet { Name = domainName, TTL = 60, Type = RRType.A, ResourceRecords = new List<ResourceRecord> { new ResourceRecord { Value = "192.0.2.235" } } }; Change change1 = new Change { ResourceRecordSet = recordSet, Action = ChangeAction.CREATE }; ChangeBatch changeBatch = new ChangeBatch { Changes = new List<Change> { change1 } }; ChangeResourceRecordSetsRequest recordsetRequest = new ChangeResourceRecordSetsRequest { HostedZoneId = zoneResponse.HostedZone.Id, ChangeBatch = changeBatch }; ChangeResourceRecordSetsResponse recordsetResponse = route53Client.ChangeResourceRecordSets(recordsetRequest); GetChangeRequest changeRequest = new GetChangeRequest { Id = recordsetResponse.ChangeInfo.Id }; while (route53Client.GetChange(changeRequest).ChangeInfo.Status == ChangeStatus.PENDING) { Console.WriteLine("Change is pending."); Thread.Sleep(TimeSpan.FromSeconds(15)); } #endregion Console.WriteLine("Change is complete."); Console.ReadKey(); }
public void EditR53Record(Amazon.Route53.Model.ResourceRecordSet rrset, bool delete = false) { using (var r53 = new Amazon.Route53.AmazonRoute53Client( CommonParams.ResolveCredentials(), CommonParams.RegionEndpoint)) { var rrRequ = new Amazon.Route53.Model.ChangeResourceRecordSetsRequest { HostedZoneId = HostedZoneId, ChangeBatch = new Amazon.Route53.Model.ChangeBatch { Changes = new List <Amazon.Route53.Model.Change> { new Amazon.Route53.Model.Change { Action = delete ? Amazon.Route53.ChangeAction.DELETE : Amazon.Route53.ChangeAction.UPSERT, ResourceRecordSet = rrset } } } }; LOG.Debug("Submiting R53 action [{0}] to zone [{1}] for record [{2}]", rrRequ.ChangeBatch.Changes[0].Action, rrRequ.HostedZoneId, rrRequ.ChangeBatch.Changes[0].ResourceRecordSet.Name); var rrResp = r53.ChangeResourceRecordSets(rrRequ); if (LOG.IsDebugEnabled) { LOG.Debug("R53 response: [{0}]", NLog.Targets.DefaultJsonSerializer.Instance.SerializeObject(rrResp)); } } }
/// <summary> /// Initiates the asynchronous execution of the ChangeResourceRecordSets operation. /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the ChangeResourceRecordSets operation.</param> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> /// <returns>The task object representing the asynchronous operation.</returns> public Task<ChangeResourceRecordSetsResponse> ChangeResourceRecordSetsAsync(ChangeResourceRecordSetsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = new ChangeResourceRecordSetsRequestMarshaller(); var unmarshaller = ChangeResourceRecordSetsResponseUnmarshaller.Instance; return InvokeAsync<ChangeResourceRecordSetsRequest,ChangeResourceRecordSetsResponse>(request, marshaller, unmarshaller, cancellationToken); }
/// <summary> /// Use this action to create or change your authoritative DNS information. To use this /// action, send a <code>POST</code> request to the <code>2013-04-01/hostedzone/<i>hosted /// Zone ID</i>/rrset</code> resource. The request body must include an XML document with /// a <code>ChangeResourceRecordSetsRequest</code> element. /// /// /// <para> /// Changes are a list of change items and are considered transactional. For more information /// on transactional changes, also known as change batches, see <a href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API">Creating, /// Changing, and Deleting Resource Record Sets Using the Route 53 API</a> in the <i>Amazon /// Route 53 Developer Guide</i>. /// </para> /// <important>Due to the nature of transactional changes, you cannot delete the same /// resource record set more than once in a single change batch. If you attempt to delete /// the same change batch more than once, Route 53 returns an <code>InvalidChangeBatch</code> /// error.</important> /// <para> /// In response to a <code>ChangeResourceRecordSets</code> request, your DNS data is changed /// on all Route 53 DNS servers. Initially, the status of a change is <code>PENDING</code>. /// This means the change has not yet propagated to all the authoritative Route 53 DNS /// servers. When the change is propagated to all hosts, the change returns a status of /// <code>INSYNC</code>. /// </para> /// /// <para> /// Note the following limitations on a <code>ChangeResourceRecordSets</code> request: /// </para> /// /// <para> /// - A request cannot contain more than 100 Change elements. /// </para> /// /// <para> /// - A request cannot contain more than 1000 ResourceRecord elements. /// </para> /// /// <para> /// The sum of the number of characters (including spaces) in all <code>Value</code> elements /// in a request cannot exceed 32,000 characters. /// </para> /// </summary> /// <param name="request">Container for the necessary parameters to execute the ChangeResourceRecordSets service method.</param> /// /// <returns>The response from the ChangeResourceRecordSets service method, as returned by Route53.</returns> /// <exception cref="Amazon.Route53.Model.InvalidChangeBatchException"> /// This error contains a list of one or more error messages. Each error message indicates /// one error in the change batch. For more information, see <a href="http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html#example_Errors">Example /// InvalidChangeBatch Errors</a>. /// </exception> /// <exception cref="Amazon.Route53.Model.InvalidInputException"> /// Some value specified in the request is invalid or the XML document is malformed. /// </exception> /// <exception cref="Amazon.Route53.Model.NoSuchHealthCheckException"> /// The health check you are trying to get or delete does not exist. /// </exception> /// <exception cref="Amazon.Route53.Model.NoSuchHostedZoneException"> /// /// </exception> /// <exception cref="Amazon.Route53.Model.PriorRequestNotCompleteException"> /// The request was rejected because Route 53 was still processing a prior request. /// </exception> public ChangeResourceRecordSetsResponse ChangeResourceRecordSets(ChangeResourceRecordSetsRequest request) { var marshaller = new ChangeResourceRecordSetsRequestMarshaller(); var unmarshaller = ChangeResourceRecordSetsResponseUnmarshaller.Instance; return Invoke<ChangeResourceRecordSetsRequest,ChangeResourceRecordSetsResponse>(request, marshaller, unmarshaller); }
/// <summary> /// Initiates the asynchronous execution of the ChangeResourceRecordSets operation. /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the ChangeResourceRecordSets operation on AmazonRoute53Client.</param> /// <param name="callback">An AsyncCallback delegate that is invoked when the operation completes.</param> /// <param name="state">A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback /// procedure using the AsyncState property.</param> /// /// <returns>An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndChangeResourceRecordSets /// operation.</returns> public IAsyncResult BeginChangeResourceRecordSets(ChangeResourceRecordSetsRequest request, AsyncCallback callback, object state) { var marshaller = new ChangeResourceRecordSetsRequestMarshaller(); var unmarshaller = ChangeResourceRecordSetsResponseUnmarshaller.Instance; return BeginInvoke<ChangeResourceRecordSetsRequest>(request, marshaller, unmarshaller, callback, state); }
IAsyncResult invokeChangeResourceRecordSets(ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest, AsyncCallback callback, object state, bool synchronized) { IRequest irequest = new ChangeResourceRecordSetsRequestMarshaller().Marshall(changeResourceRecordSetsRequest); var unmarshaller = ChangeResourceRecordSetsResponseUnmarshaller.GetInstance(); AsyncResult result = new AsyncResult(irequest, callback, state, synchronized, signer, unmarshaller); Invoke(result); return result; }
/// <summary> /// <para>Use this action to create or change your authoritative DNS information. To use this action, send a <c>POST</c> request to the /// <c>2011-05-05/hostedzone/hosted Zone ID/rrset</c> resource. The request body must include an XML document with a /// <c>ChangeResourceRecordSetsRequest</c> element.</para> <para>Changes are a list of change items and are considered transactional. For more /// information on transactional changes, also known as change batches, see Creating, Changing, and Deleting Resource Record Sets Using the /// Route 53 API in the <i>Amazon Route 53 Developer Guide</i> .</para> <para><b>IMPORTANT:</b>Due to the nature of transactional changes, you /// cannot delete the same resource record set more than once in a single change batch. If you attempt to delete the same change batch more than /// once, Route 53 returns an InvalidChangeBatch error.</para> <para>In response to a <c>ChangeResourceRecordSets</c> request, your DNS data is /// changed on all Route 53 DNS servers. Initially, the status of a change is <c>PENDING</c> . This means the change has not yet propagated to /// all the authoritative Route 53 DNS servers. When the change is propagated to all hosts, the change returns a status of <c>INSYNC</c> /// .</para> <para>Note the following limitations on a <c>ChangeResourceRecordSets</c> request:</para> <para>- A request cannot contain more /// than 100 Change elements.</para> <para>- A request cannot contain more than 1000 ResourceRecord elements.</para> <para>The sum of the number /// of characters (including spaces) in all <c>Value</c> elements in a request cannot exceed 32,000 characters.</para> /// </summary> /// /// <param name="changeResourceRecordSetsRequest">Container for the necessary parameters to execute the ChangeResourceRecordSets service method /// on AmazonRoute53.</param> /// /// <returns>The response from the ChangeResourceRecordSets service method, as returned by AmazonRoute53.</returns> /// /// <exception cref="InvalidInputException"/> /// <exception cref="InvalidChangeBatchException"/> public ChangeResourceRecordSetsResponse ChangeResourceRecordSets(ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest) { IAsyncResult asyncResult = invokeChangeResourceRecordSets(changeResourceRecordSetsRequest, null, null, true); return EndChangeResourceRecordSets(asyncResult); }
internal ChangeResourceRecordSetsResponse ChangeResourceRecordSets(ChangeResourceRecordSetsRequest request) { var task = ChangeResourceRecordSetsAsync(request); try { return task.Result; } catch(AggregateException e) { ExceptionDispatchInfo.Capture(e.InnerException).Throw(); return null; } }
public object Execute(ExecutorContext context) { var cmdletContext = context as CmdletContext; // create request var request = new Amazon.Route53.Model.ChangeResourceRecordSetsRequest(); if (cmdletContext.HostedZoneId != null) { request.HostedZoneId = cmdletContext.HostedZoneId; } // populate ChangeBatch var requestChangeBatchIsNull = true; request.ChangeBatch = new Amazon.Route53.Model.ChangeBatch(); System.String requestChangeBatch_changeBatch_Comment = null; if (cmdletContext.ChangeBatch_Comment != null) { requestChangeBatch_changeBatch_Comment = cmdletContext.ChangeBatch_Comment; } if (requestChangeBatch_changeBatch_Comment != null) { request.ChangeBatch.Comment = requestChangeBatch_changeBatch_Comment; requestChangeBatchIsNull = false; } List <Amazon.Route53.Model.Change> requestChangeBatch_changeBatch_Change = null; if (cmdletContext.ChangeBatch_Change != null) { requestChangeBatch_changeBatch_Change = cmdletContext.ChangeBatch_Change; } if (requestChangeBatch_changeBatch_Change != null) { request.ChangeBatch.Changes = requestChangeBatch_changeBatch_Change; requestChangeBatchIsNull = false; } // determine if request.ChangeBatch should be set to null if (requestChangeBatchIsNull) { request.ChangeBatch = null; } CmdletOutput output; // issue call var client = Client ?? CreateClient(_CurrentCredentials, _RegionEndpoint); try { var response = CallAWSServiceOperation(client, request); object pipelineOutput = null; pipelineOutput = cmdletContext.Select(response, this); output = new CmdletOutput { PipelineOutput = pipelineOutput, ServiceResponse = response }; } catch (Exception e) { output = new CmdletOutput { ErrorResponse = e }; } return(output); }
public void EditR53Record(Amazon.Route53.Model.ResourceRecordSet rrset, bool delete = false) { using (var r53 = new Amazon.Route53.AmazonRoute53Client( CommonParams.ResolveCredentials(), CommonParams.RegionEndpoint)) { var rrRequ = new Amazon.Route53.Model.ChangeResourceRecordSetsRequest { HostedZoneId = HostedZoneId, ChangeBatch = new Amazon.Route53.Model.ChangeBatch { Changes = new List<Amazon.Route53.Model.Change> { new Amazon.Route53.Model.Change { Action = delete ? Amazon.Route53.ChangeAction.DELETE : Amazon.Route53.ChangeAction.UPSERT, ResourceRecordSet = rrset } } } }; var rrResp = r53.ChangeResourceRecordSets(rrRequ); } }
private ChangeResourceRecordSetsRequest GetChangeResourceRecordSetsRequest(string hostname, string ipAddress, string action, List<HostedZone> zones) { string domain = DomainName.Parse(hostname).Domain; string hostedZoneId = zones.Single(z => z.Name.StartsWith(domain)).Id; var record = new ResourceRecord() { Value = ipAddress }; var recordSet = new ResourceRecordSet() { Name = hostname, TTL = 300, //5 min. Type = DnsRecordType.A, ResourceRecords = new List<ResourceRecord> {record} }; var change = new Change() {Action = action, ResourceRecordSet = recordSet}; var request = new ChangeResourceRecordSetsRequest() { ChangeBatch = new ChangeBatch() { Changes = new List<Change> {change}, Comment = string.Format("Automatically updated by {0}", this.ToString()) }, HostedZoneId = hostedZoneId }; return request; }
/// <summary> /// Submits the change request. /// </summary> /// <param name="hostedZoneId">The hosted zone identifier.</param> /// <param name="changes">The changes.</param> /// <returns></returns> private ChangeInfo SubmitChangeResourceRecordSets(string hostedZoneId, List<Change> changes) { var request = new ChangeResourceRecordSetsRequest { HostedZoneId = hostedZoneId, ChangeBatch = new ChangeBatch {Changes = changes} }; var response = Client.ChangeResourceRecordSets(request); return response.ChangeInfo; }
internal ChangeResourceRecordSetsResponse ChangeResourceRecordSets(ChangeResourceRecordSetsRequest request) { var task = ChangeResourceRecordSetsAsync(request); try { return task.Result; } catch(AggregateException e) { throw e.InnerException; } }
/// <summary> /// <para>Use this action to create or change your authoritative DNS information. To use this action, send a <c>POST</c> request to the /// <c>2012-12-12/hostedzone/hosted Zone ID/rrset</c> resource. The request body must include an XML document with a /// <c>ChangeResourceRecordSetsRequest</c> element.</para> <para>Changes are a list of change items and are considered transactional. For more /// information on transactional changes, also known as change batches, see <a href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API">Creating, Changing, and Deleting Resource /// Record Sets Using the Route 53 API</a> in the <i>Amazon Route 53 Developer Guide</i> .</para> <para><b>IMPORTANT:</b>Due to the nature of /// transactional changes, you cannot delete the same resource record set more than once in a single change batch. If you attempt to delete the /// same change batch more than once, Route 53 returns an InvalidChangeBatch error.</para> <para>In response to a /// <c>ChangeResourceRecordSets</c> request, your DNS data is changed on all Route 53 DNS servers. Initially, the status of a change is /// <c>PENDING</c> . This means the change has not yet propagated to all the authoritative Route 53 DNS servers. When the change is propagated /// to all hosts, the change returns a status of <c>INSYNC</c> .</para> <para>Note the following limitations on a /// <c>ChangeResourceRecordSets</c> request:</para> <para>- A request cannot contain more than 100 Change elements.</para> <para>- A request /// cannot contain more than 1000 ResourceRecord elements.</para> <para>The sum of the number of characters (including spaces) in all /// <c>Value</c> elements in a request cannot exceed 32,000 characters.</para> /// </summary> /// /// <param name="changeResourceRecordSetsRequest">Container for the necessary parameters to execute the ChangeResourceRecordSets service method /// on AmazonRoute53.</param> /// /// <returns>The response from the ChangeResourceRecordSets service method, as returned by AmazonRoute53.</returns> /// /// <exception cref="T:Amazon.Route53.Model.InvalidInputException" /> /// <exception cref="T:Amazon.Route53.Model.NoSuchHostedZoneException" /> /// <exception cref="T:Amazon.Route53.Model.InvalidChangeBatchException" /> /// <exception cref="T:Amazon.Route53.Model.NoSuchHealthCheckException" /> /// <exception cref="T:Amazon.Route53.Model.PriorRequestNotCompleteException" /> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> public async Task<ChangeResourceRecordSetsResponse> ChangeResourceRecordSetsAsync(ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest, CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = new ChangeResourceRecordSetsRequestMarshaller(); var unmarshaller = ChangeResourceRecordSetsResponseUnmarshaller.GetInstance(); var response = await Invoke<IRequest, ChangeResourceRecordSetsRequest, ChangeResourceRecordSetsResponse>(changeResourceRecordSetsRequest, marshaller, unmarshaller, signer, cancellationToken) .ConfigureAwait(continueOnCapturedContext: false); return response; }
private Amazon.Route53.Model.ChangeResourceRecordSetsResponse CallAWSServiceOperation(IAmazonRoute53 client, Amazon.Route53.Model.ChangeResourceRecordSetsRequest request) { Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon Route 53", "ChangeResourceRecordSets"); try { #if DESKTOP return(client.ChangeResourceRecordSets(request)); #elif CORECLR return(client.ChangeResourceRecordSetsAsync(request).GetAwaiter().GetResult()); #else #error "Unknown build edition" #endif } catch (AmazonServiceException exc) { var webException = exc.InnerException as System.Net.WebException; if (webException != null) { throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException); } throw; } }
/// <summary> /// <para>Use this action to create or change your authoritative DNS information. To use this action, send a <c>POST</c> request to the /// <c>2013-04-01/hostedzone/hosted Zone ID/rrset</c> resource. The request body must include an XML document with a /// <c>ChangeResourceRecordSetsRequest</c> element.</para> <para>Changes are a list of change items and are considered transactional. For more /// information on transactional changes, also known as change batches, see <a href="http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API">Creating, Changing, and Deleting Resource /// Record Sets Using the Route 53 API</a> in the <i>Amazon Route 53 Developer Guide</i> .</para> <para><b>IMPORTANT:</b>Due to the nature of /// transactional changes, you cannot delete the same resource record set more than once in a single change batch. If you attempt to delete the /// same change batch more than once, Route 53 returns an InvalidChangeBatch error.</para> <para>In response to a /// <c>ChangeResourceRecordSets</c> request, your DNS data is changed on all Route 53 DNS servers. Initially, the status of a change is /// <c>PENDING</c> . This means the change has not yet propagated to all the authoritative Route 53 DNS servers. When the change is propagated /// to all hosts, the change returns a status of <c>INSYNC</c> .</para> <para>Note the following limitations on a /// <c>ChangeResourceRecordSets</c> request:</para> <para>- A request cannot contain more than 100 Change elements.</para> <para>- A request /// cannot contain more than 1000 ResourceRecord elements.</para> <para>The sum of the number of characters (including spaces) in all /// <c>Value</c> elements in a request cannot exceed 32,000 characters.</para> /// </summary> /// /// <param name="changeResourceRecordSetsRequest">Container for the necessary parameters to execute the ChangeResourceRecordSets service method /// on AmazonRoute53.</param> /// /// <returns>The response from the ChangeResourceRecordSets service method, as returned by AmazonRoute53.</returns> /// /// <exception cref="T:Amazon.Route53.Model.PriorRequestNotCompleteException" /> /// <exception cref="T:Amazon.Route53.Model.NoSuchHealthCheckException" /> /// <exception cref="T:Amazon.Route53.Model.NoSuchHostedZoneException" /> /// <exception cref="T:Amazon.Route53.Model.InvalidInputException" /> /// <exception cref="T:Amazon.Route53.Model.InvalidChangeBatchException" /> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> public Task<ChangeResourceRecordSetsResponse> ChangeResourceRecordSetsAsync(ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest, CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = new ChangeResourceRecordSetsRequestMarshaller(); var unmarshaller = ChangeResourceRecordSetsResponseUnmarshaller.GetInstance(); return Invoke<IRequest, ChangeResourceRecordSetsRequest, ChangeResourceRecordSetsResponse>(changeResourceRecordSetsRequest, marshaller, unmarshaller, signer, cancellationToken); }
/// <summary> /// Initiates the asynchronous execution of the ChangeResourceRecordSets operation. /// <seealso cref="Amazon.Route53.AmazonRoute53.ChangeResourceRecordSets"/> /// </summary> /// /// <param name="changeResourceRecordSetsRequest">Container for the necessary parameters to execute the ChangeResourceRecordSets operation on /// AmazonRoute53.</param> /// <param name="callback">An AsyncCallback delegate that is invoked when the operation completes.</param> /// <param name="state">A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback /// procedure using the AsyncState property.</param> /// /// <returns>An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking /// EndChangeResourceRecordSets operation.</returns> public IAsyncResult BeginChangeResourceRecordSets(ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest, AsyncCallback callback, object state) { return invokeChangeResourceRecordSets(changeResourceRecordSetsRequest, callback, state, false); }