1package network
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/autorest/validation"
25	"github.com/Azure/go-autorest/tracing"
26	"net/http"
27)
28
29// VirtualNetworkGatewaysClient is the network Client
30type VirtualNetworkGatewaysClient struct {
31	BaseClient
32}
33
34// NewVirtualNetworkGatewaysClient creates an instance of the VirtualNetworkGatewaysClient client.
35func NewVirtualNetworkGatewaysClient(subscriptionID string) VirtualNetworkGatewaysClient {
36	return NewVirtualNetworkGatewaysClientWithBaseURI(DefaultBaseURI, subscriptionID)
37}
38
39// NewVirtualNetworkGatewaysClientWithBaseURI creates an instance of the VirtualNetworkGatewaysClient client using a
40// custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds,
41// Azure stack).
42func NewVirtualNetworkGatewaysClientWithBaseURI(baseURI string, subscriptionID string) VirtualNetworkGatewaysClient {
43	return VirtualNetworkGatewaysClient{NewWithBaseURI(baseURI, subscriptionID)}
44}
45
46// CreateOrUpdate creates or updates a virtual network gateway in the specified resource group.
47// Parameters:
48// resourceGroupName - the name of the resource group.
49// virtualNetworkGatewayName - the name of the virtual network gateway.
50// parameters - parameters supplied to create or update virtual network gateway operation.
51func (client VirtualNetworkGatewaysClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VirtualNetworkGateway) (result VirtualNetworkGatewaysCreateOrUpdateFuture, err error) {
52	if tracing.IsEnabled() {
53		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.CreateOrUpdate")
54		defer func() {
55			sc := -1
56			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
57				sc = result.FutureAPI.Response().StatusCode
58			}
59			tracing.EndSpan(ctx, sc, err)
60		}()
61	}
62	if err := validation.Validate([]validation.Validation{
63		{TargetValue: parameters,
64			Constraints: []validation.Constraint{{Target: "parameters.VirtualNetworkGatewayPropertiesFormat", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
65		return result, validation.NewError("network.VirtualNetworkGatewaysClient", "CreateOrUpdate", err.Error())
66	}
67
68	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
69	if err != nil {
70		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "CreateOrUpdate", nil, "Failure preparing request")
71		return
72	}
73
74	result, err = client.CreateOrUpdateSender(req)
75	if err != nil {
76		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "CreateOrUpdate", nil, "Failure sending request")
77		return
78	}
79
80	return
81}
82
83// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
84func (client VirtualNetworkGatewaysClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VirtualNetworkGateway) (*http.Request, error) {
85	pathParameters := map[string]interface{}{
86		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
87		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
88		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
89	}
90
91	const APIVersion = "2020-03-01"
92	queryParameters := map[string]interface{}{
93		"api-version": APIVersion,
94	}
95
96	parameters.Etag = nil
97	preparer := autorest.CreatePreparer(
98		autorest.AsContentType("application/json; charset=utf-8"),
99		autorest.AsPut(),
100		autorest.WithBaseURL(client.BaseURI),
101		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
102		autorest.WithJSON(parameters),
103		autorest.WithQueryParameters(queryParameters))
104	return preparer.Prepare((&http.Request{}).WithContext(ctx))
105}
106
107// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
108// http.Response Body if it receives an error.
109func (client VirtualNetworkGatewaysClient) CreateOrUpdateSender(req *http.Request) (future VirtualNetworkGatewaysCreateOrUpdateFuture, err error) {
110	var resp *http.Response
111	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
112	if err != nil {
113		return
114	}
115	var azf azure.Future
116	azf, err = azure.NewFutureFromResponse(resp)
117	future.FutureAPI = &azf
118	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
119		var done bool
120		done, err = future.DoneWithContext(context.Background(), client)
121		if err != nil {
122			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
123			return
124		}
125		if !done {
126			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
127			return
128		}
129		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
130		vng.Response.Response, err = future.GetResult(sender)
131		if vng.Response.Response == nil && err == nil {
132			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", nil, "received nil response and error")
133		}
134		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
135			vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
136			if err != nil {
137				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
138			}
139		}
140		return
141	}
142	return
143}
144
145// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
146// closes the http.Response Body.
147func (client VirtualNetworkGatewaysClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
148	err = autorest.Respond(
149		resp,
150		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
151		autorest.ByUnmarshallingJSON(&result),
152		autorest.ByClosing())
153	result.Response = autorest.Response{Response: resp}
154	return
155}
156
157// Delete deletes the specified virtual network gateway.
158// Parameters:
159// resourceGroupName - the name of the resource group.
160// virtualNetworkGatewayName - the name of the virtual network gateway.
161func (client VirtualNetworkGatewaysClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysDeleteFuture, err error) {
162	if tracing.IsEnabled() {
163		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Delete")
164		defer func() {
165			sc := -1
166			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
167				sc = result.FutureAPI.Response().StatusCode
168			}
169			tracing.EndSpan(ctx, sc, err)
170		}()
171	}
172	req, err := client.DeletePreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
173	if err != nil {
174		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Delete", nil, "Failure preparing request")
175		return
176	}
177
178	result, err = client.DeleteSender(req)
179	if err != nil {
180		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Delete", nil, "Failure sending request")
181		return
182	}
183
184	return
185}
186
187// DeletePreparer prepares the Delete request.
188func (client VirtualNetworkGatewaysClient) DeletePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
189	pathParameters := map[string]interface{}{
190		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
191		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
192		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
193	}
194
195	const APIVersion = "2020-03-01"
196	queryParameters := map[string]interface{}{
197		"api-version": APIVersion,
198	}
199
200	preparer := autorest.CreatePreparer(
201		autorest.AsDelete(),
202		autorest.WithBaseURL(client.BaseURI),
203		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
204		autorest.WithQueryParameters(queryParameters))
205	return preparer.Prepare((&http.Request{}).WithContext(ctx))
206}
207
208// DeleteSender sends the Delete request. The method will close the
209// http.Response Body if it receives an error.
210func (client VirtualNetworkGatewaysClient) DeleteSender(req *http.Request) (future VirtualNetworkGatewaysDeleteFuture, err error) {
211	var resp *http.Response
212	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
213	if err != nil {
214		return
215	}
216	var azf azure.Future
217	azf, err = azure.NewFutureFromResponse(resp)
218	future.FutureAPI = &azf
219	future.Result = func(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
220		var done bool
221		done, err = future.DoneWithContext(context.Background(), client)
222		if err != nil {
223			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
224			return
225		}
226		if !done {
227			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
228			return
229		}
230		ar.Response = future.Response()
231		return
232	}
233	return
234}
235
236// DeleteResponder handles the response to the Delete request. The method always
237// closes the http.Response Body.
238func (client VirtualNetworkGatewaysClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
239	err = autorest.Respond(
240		resp,
241		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
242		autorest.ByClosing())
243	result.Response = resp
244	return
245}
246
247// DisconnectVirtualNetworkGatewayVpnConnections disconnect vpn connections of virtual network gateway in the specified
248// resource group.
249// Parameters:
250// resourceGroupName - the name of the resource group.
251// virtualNetworkGatewayName - the name of the virtual network gateway.
252// request - the parameters are supplied to disconnect vpn connections.
253func (client VirtualNetworkGatewaysClient) DisconnectVirtualNetworkGatewayVpnConnections(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, request P2SVpnConnectionRequest) (result VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture, err error) {
254	if tracing.IsEnabled() {
255		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.DisconnectVirtualNetworkGatewayVpnConnections")
256		defer func() {
257			sc := -1
258			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
259				sc = result.FutureAPI.Response().StatusCode
260			}
261			tracing.EndSpan(ctx, sc, err)
262		}()
263	}
264	req, err := client.DisconnectVirtualNetworkGatewayVpnConnectionsPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, request)
265	if err != nil {
266		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "DisconnectVirtualNetworkGatewayVpnConnections", nil, "Failure preparing request")
267		return
268	}
269
270	result, err = client.DisconnectVirtualNetworkGatewayVpnConnectionsSender(req)
271	if err != nil {
272		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "DisconnectVirtualNetworkGatewayVpnConnections", nil, "Failure sending request")
273		return
274	}
275
276	return
277}
278
279// DisconnectVirtualNetworkGatewayVpnConnectionsPreparer prepares the DisconnectVirtualNetworkGatewayVpnConnections request.
280func (client VirtualNetworkGatewaysClient) DisconnectVirtualNetworkGatewayVpnConnectionsPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, request P2SVpnConnectionRequest) (*http.Request, error) {
281	pathParameters := map[string]interface{}{
282		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
283		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
284		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
285	}
286
287	const APIVersion = "2020-03-01"
288	queryParameters := map[string]interface{}{
289		"api-version": APIVersion,
290	}
291
292	preparer := autorest.CreatePreparer(
293		autorest.AsContentType("application/json; charset=utf-8"),
294		autorest.AsPost(),
295		autorest.WithBaseURL(client.BaseURI),
296		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/disconnectVirtualNetworkGatewayVpnConnections", pathParameters),
297		autorest.WithJSON(request),
298		autorest.WithQueryParameters(queryParameters))
299	return preparer.Prepare((&http.Request{}).WithContext(ctx))
300}
301
302// DisconnectVirtualNetworkGatewayVpnConnectionsSender sends the DisconnectVirtualNetworkGatewayVpnConnections request. The method will close the
303// http.Response Body if it receives an error.
304func (client VirtualNetworkGatewaysClient) DisconnectVirtualNetworkGatewayVpnConnectionsSender(req *http.Request) (future VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture, err error) {
305	var resp *http.Response
306	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
307	if err != nil {
308		return
309	}
310	var azf azure.Future
311	azf, err = azure.NewFutureFromResponse(resp)
312	future.FutureAPI = &azf
313	future.Result = func(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
314		var done bool
315		done, err = future.DoneWithContext(context.Background(), client)
316		if err != nil {
317			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
318			return
319		}
320		if !done {
321			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture")
322			return
323		}
324		ar.Response = future.Response()
325		return
326	}
327	return
328}
329
330// DisconnectVirtualNetworkGatewayVpnConnectionsResponder handles the response to the DisconnectVirtualNetworkGatewayVpnConnections request. The method always
331// closes the http.Response Body.
332func (client VirtualNetworkGatewaysClient) DisconnectVirtualNetworkGatewayVpnConnectionsResponder(resp *http.Response) (result autorest.Response, err error) {
333	err = autorest.Respond(
334		resp,
335		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
336		autorest.ByClosing())
337	result.Response = resp
338	return
339}
340
341// Generatevpnclientpackage generates VPN client package for P2S client of the virtual network gateway in the specified
342// resource group.
343// Parameters:
344// resourceGroupName - the name of the resource group.
345// virtualNetworkGatewayName - the name of the virtual network gateway.
346// parameters - parameters supplied to the generate virtual network gateway VPN client package operation.
347func (client VirtualNetworkGatewaysClient) Generatevpnclientpackage(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (result VirtualNetworkGatewaysGeneratevpnclientpackageFuture, err error) {
348	if tracing.IsEnabled() {
349		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Generatevpnclientpackage")
350		defer func() {
351			sc := -1
352			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
353				sc = result.FutureAPI.Response().StatusCode
354			}
355			tracing.EndSpan(ctx, sc, err)
356		}()
357	}
358	req, err := client.GeneratevpnclientpackagePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
359	if err != nil {
360		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", nil, "Failure preparing request")
361		return
362	}
363
364	result, err = client.GeneratevpnclientpackageSender(req)
365	if err != nil {
366		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", nil, "Failure sending request")
367		return
368	}
369
370	return
371}
372
373// GeneratevpnclientpackagePreparer prepares the Generatevpnclientpackage request.
374func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackagePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (*http.Request, error) {
375	pathParameters := map[string]interface{}{
376		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
377		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
378		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
379	}
380
381	const APIVersion = "2020-03-01"
382	queryParameters := map[string]interface{}{
383		"api-version": APIVersion,
384	}
385
386	preparer := autorest.CreatePreparer(
387		autorest.AsContentType("application/json; charset=utf-8"),
388		autorest.AsPost(),
389		autorest.WithBaseURL(client.BaseURI),
390		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/generatevpnclientpackage", pathParameters),
391		autorest.WithJSON(parameters),
392		autorest.WithQueryParameters(queryParameters))
393	return preparer.Prepare((&http.Request{}).WithContext(ctx))
394}
395
396// GeneratevpnclientpackageSender sends the Generatevpnclientpackage request. The method will close the
397// http.Response Body if it receives an error.
398func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageSender(req *http.Request) (future VirtualNetworkGatewaysGeneratevpnclientpackageFuture, err error) {
399	var resp *http.Response
400	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
401	if err != nil {
402		return
403	}
404	var azf azure.Future
405	azf, err = azure.NewFutureFromResponse(resp)
406	future.FutureAPI = &azf
407	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
408		var done bool
409		done, err = future.DoneWithContext(context.Background(), client)
410		if err != nil {
411			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
412			return
413		}
414		if !done {
415			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
416			return
417		}
418		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
419		s.Response.Response, err = future.GetResult(sender)
420		if s.Response.Response == nil && err == nil {
421			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", nil, "received nil response and error")
422		}
423		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
424			s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
425			if err != nil {
426				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
427			}
428		}
429		return
430	}
431	return
432}
433
434// GeneratevpnclientpackageResponder handles the response to the Generatevpnclientpackage request. The method always
435// closes the http.Response Body.
436func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageResponder(resp *http.Response) (result String, err error) {
437	err = autorest.Respond(
438		resp,
439		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
440		autorest.ByUnmarshallingJSON(&result),
441		autorest.ByClosing())
442	result.Response = autorest.Response{Response: resp}
443	return
444}
445
446// GenerateVpnProfile generates VPN profile for P2S client of the virtual network gateway in the specified resource
447// group. Used for IKEV2 and radius based authentication.
448// Parameters:
449// resourceGroupName - the name of the resource group.
450// virtualNetworkGatewayName - the name of the virtual network gateway.
451// parameters - parameters supplied to the generate virtual network gateway VPN client package operation.
452func (client VirtualNetworkGatewaysClient) GenerateVpnProfile(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (result VirtualNetworkGatewaysGenerateVpnProfileFuture, err error) {
453	if tracing.IsEnabled() {
454		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GenerateVpnProfile")
455		defer func() {
456			sc := -1
457			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
458				sc = result.FutureAPI.Response().StatusCode
459			}
460			tracing.EndSpan(ctx, sc, err)
461		}()
462	}
463	req, err := client.GenerateVpnProfilePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
464	if err != nil {
465		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GenerateVpnProfile", nil, "Failure preparing request")
466		return
467	}
468
469	result, err = client.GenerateVpnProfileSender(req)
470	if err != nil {
471		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GenerateVpnProfile", nil, "Failure sending request")
472		return
473	}
474
475	return
476}
477
478// GenerateVpnProfilePreparer prepares the GenerateVpnProfile request.
479func (client VirtualNetworkGatewaysClient) GenerateVpnProfilePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (*http.Request, error) {
480	pathParameters := map[string]interface{}{
481		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
482		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
483		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
484	}
485
486	const APIVersion = "2020-03-01"
487	queryParameters := map[string]interface{}{
488		"api-version": APIVersion,
489	}
490
491	preparer := autorest.CreatePreparer(
492		autorest.AsContentType("application/json; charset=utf-8"),
493		autorest.AsPost(),
494		autorest.WithBaseURL(client.BaseURI),
495		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/generatevpnprofile", pathParameters),
496		autorest.WithJSON(parameters),
497		autorest.WithQueryParameters(queryParameters))
498	return preparer.Prepare((&http.Request{}).WithContext(ctx))
499}
500
501// GenerateVpnProfileSender sends the GenerateVpnProfile request. The method will close the
502// http.Response Body if it receives an error.
503func (client VirtualNetworkGatewaysClient) GenerateVpnProfileSender(req *http.Request) (future VirtualNetworkGatewaysGenerateVpnProfileFuture, err error) {
504	var resp *http.Response
505	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
506	if err != nil {
507		return
508	}
509	var azf azure.Future
510	azf, err = azure.NewFutureFromResponse(resp)
511	future.FutureAPI = &azf
512	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
513		var done bool
514		done, err = future.DoneWithContext(context.Background(), client)
515		if err != nil {
516			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
517			return
518		}
519		if !done {
520			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
521			return
522		}
523		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
524		s.Response.Response, err = future.GetResult(sender)
525		if s.Response.Response == nil && err == nil {
526			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", nil, "received nil response and error")
527		}
528		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
529			s, err = client.GenerateVpnProfileResponder(s.Response.Response)
530			if err != nil {
531				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
532			}
533		}
534		return
535	}
536	return
537}
538
539// GenerateVpnProfileResponder handles the response to the GenerateVpnProfile request. The method always
540// closes the http.Response Body.
541func (client VirtualNetworkGatewaysClient) GenerateVpnProfileResponder(resp *http.Response) (result String, err error) {
542	err = autorest.Respond(
543		resp,
544		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
545		autorest.ByUnmarshallingJSON(&result),
546		autorest.ByClosing())
547	result.Response = autorest.Response{Response: resp}
548	return
549}
550
551// Get gets the specified virtual network gateway by resource group.
552// Parameters:
553// resourceGroupName - the name of the resource group.
554// virtualNetworkGatewayName - the name of the virtual network gateway.
555func (client VirtualNetworkGatewaysClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGateway, err error) {
556	if tracing.IsEnabled() {
557		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Get")
558		defer func() {
559			sc := -1
560			if result.Response.Response != nil {
561				sc = result.Response.Response.StatusCode
562			}
563			tracing.EndSpan(ctx, sc, err)
564		}()
565	}
566	req, err := client.GetPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
567	if err != nil {
568		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", nil, "Failure preparing request")
569		return
570	}
571
572	resp, err := client.GetSender(req)
573	if err != nil {
574		result.Response = autorest.Response{Response: resp}
575		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", resp, "Failure sending request")
576		return
577	}
578
579	result, err = client.GetResponder(resp)
580	if err != nil {
581		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", resp, "Failure responding to request")
582		return
583	}
584
585	return
586}
587
588// GetPreparer prepares the Get request.
589func (client VirtualNetworkGatewaysClient) GetPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
590	pathParameters := map[string]interface{}{
591		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
592		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
593		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
594	}
595
596	const APIVersion = "2020-03-01"
597	queryParameters := map[string]interface{}{
598		"api-version": APIVersion,
599	}
600
601	preparer := autorest.CreatePreparer(
602		autorest.AsGet(),
603		autorest.WithBaseURL(client.BaseURI),
604		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
605		autorest.WithQueryParameters(queryParameters))
606	return preparer.Prepare((&http.Request{}).WithContext(ctx))
607}
608
609// GetSender sends the Get request. The method will close the
610// http.Response Body if it receives an error.
611func (client VirtualNetworkGatewaysClient) GetSender(req *http.Request) (*http.Response, error) {
612	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
613}
614
615// GetResponder handles the response to the Get request. The method always
616// closes the http.Response Body.
617func (client VirtualNetworkGatewaysClient) GetResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
618	err = autorest.Respond(
619		resp,
620		azure.WithErrorUnlessStatusCode(http.StatusOK),
621		autorest.ByUnmarshallingJSON(&result),
622		autorest.ByClosing())
623	result.Response = autorest.Response{Response: resp}
624	return
625}
626
627// GetAdvertisedRoutes this operation retrieves a list of routes the virtual network gateway is advertising to the
628// specified peer.
629// Parameters:
630// resourceGroupName - the name of the resource group.
631// virtualNetworkGatewayName - the name of the virtual network gateway.
632// peer - the IP address of the peer.
633func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutes(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (result VirtualNetworkGatewaysGetAdvertisedRoutesFuture, err error) {
634	if tracing.IsEnabled() {
635		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetAdvertisedRoutes")
636		defer func() {
637			sc := -1
638			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
639				sc = result.FutureAPI.Response().StatusCode
640			}
641			tracing.EndSpan(ctx, sc, err)
642		}()
643	}
644	req, err := client.GetAdvertisedRoutesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, peer)
645	if err != nil {
646		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetAdvertisedRoutes", nil, "Failure preparing request")
647		return
648	}
649
650	result, err = client.GetAdvertisedRoutesSender(req)
651	if err != nil {
652		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetAdvertisedRoutes", nil, "Failure sending request")
653		return
654	}
655
656	return
657}
658
659// GetAdvertisedRoutesPreparer prepares the GetAdvertisedRoutes request.
660func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (*http.Request, error) {
661	pathParameters := map[string]interface{}{
662		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
663		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
664		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
665	}
666
667	const APIVersion = "2020-03-01"
668	queryParameters := map[string]interface{}{
669		"api-version": APIVersion,
670		"peer":        autorest.Encode("query", peer),
671	}
672
673	preparer := autorest.CreatePreparer(
674		autorest.AsPost(),
675		autorest.WithBaseURL(client.BaseURI),
676		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getAdvertisedRoutes", pathParameters),
677		autorest.WithQueryParameters(queryParameters))
678	return preparer.Prepare((&http.Request{}).WithContext(ctx))
679}
680
681// GetAdvertisedRoutesSender sends the GetAdvertisedRoutes request. The method will close the
682// http.Response Body if it receives an error.
683func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesSender(req *http.Request) (future VirtualNetworkGatewaysGetAdvertisedRoutesFuture, err error) {
684	var resp *http.Response
685	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
686	if err != nil {
687		return
688	}
689	var azf azure.Future
690	azf, err = azure.NewFutureFromResponse(resp)
691	future.FutureAPI = &azf
692	future.Result = func(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
693		var done bool
694		done, err = future.DoneWithContext(context.Background(), client)
695		if err != nil {
696			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
697			return
698		}
699		if !done {
700			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
701			return
702		}
703		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
704		grlr.Response.Response, err = future.GetResult(sender)
705		if grlr.Response.Response == nil && err == nil {
706			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", nil, "received nil response and error")
707		}
708		if err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
709			grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
710			if err != nil {
711				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
712			}
713		}
714		return
715	}
716	return
717}
718
719// GetAdvertisedRoutesResponder handles the response to the GetAdvertisedRoutes request. The method always
720// closes the http.Response Body.
721func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesResponder(resp *http.Response) (result GatewayRouteListResult, err error) {
722	err = autorest.Respond(
723		resp,
724		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
725		autorest.ByUnmarshallingJSON(&result),
726		autorest.ByClosing())
727	result.Response = autorest.Response{Response: resp}
728	return
729}
730
731// GetBgpPeerStatus the GetBgpPeerStatus operation retrieves the status of all BGP peers.
732// Parameters:
733// resourceGroupName - the name of the resource group.
734// virtualNetworkGatewayName - the name of the virtual network gateway.
735// peer - the IP address of the peer to retrieve the status of.
736func (client VirtualNetworkGatewaysClient) GetBgpPeerStatus(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (result VirtualNetworkGatewaysGetBgpPeerStatusFuture, err error) {
737	if tracing.IsEnabled() {
738		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetBgpPeerStatus")
739		defer func() {
740			sc := -1
741			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
742				sc = result.FutureAPI.Response().StatusCode
743			}
744			tracing.EndSpan(ctx, sc, err)
745		}()
746	}
747	req, err := client.GetBgpPeerStatusPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, peer)
748	if err != nil {
749		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetBgpPeerStatus", nil, "Failure preparing request")
750		return
751	}
752
753	result, err = client.GetBgpPeerStatusSender(req)
754	if err != nil {
755		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetBgpPeerStatus", nil, "Failure sending request")
756		return
757	}
758
759	return
760}
761
762// GetBgpPeerStatusPreparer prepares the GetBgpPeerStatus request.
763func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (*http.Request, error) {
764	pathParameters := map[string]interface{}{
765		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
766		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
767		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
768	}
769
770	const APIVersion = "2020-03-01"
771	queryParameters := map[string]interface{}{
772		"api-version": APIVersion,
773	}
774	if len(peer) > 0 {
775		queryParameters["peer"] = autorest.Encode("query", peer)
776	}
777
778	preparer := autorest.CreatePreparer(
779		autorest.AsPost(),
780		autorest.WithBaseURL(client.BaseURI),
781		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getBgpPeerStatus", pathParameters),
782		autorest.WithQueryParameters(queryParameters))
783	return preparer.Prepare((&http.Request{}).WithContext(ctx))
784}
785
786// GetBgpPeerStatusSender sends the GetBgpPeerStatus request. The method will close the
787// http.Response Body if it receives an error.
788func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusSender(req *http.Request) (future VirtualNetworkGatewaysGetBgpPeerStatusFuture, err error) {
789	var resp *http.Response
790	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
791	if err != nil {
792		return
793	}
794	var azf azure.Future
795	azf, err = azure.NewFutureFromResponse(resp)
796	future.FutureAPI = &azf
797	future.Result = func(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
798		var done bool
799		done, err = future.DoneWithContext(context.Background(), client)
800		if err != nil {
801			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
802			return
803		}
804		if !done {
805			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
806			return
807		}
808		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
809		bpslr.Response.Response, err = future.GetResult(sender)
810		if bpslr.Response.Response == nil && err == nil {
811			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", nil, "received nil response and error")
812		}
813		if err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
814			bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
815			if err != nil {
816				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
817			}
818		}
819		return
820	}
821	return
822}
823
824// GetBgpPeerStatusResponder handles the response to the GetBgpPeerStatus request. The method always
825// closes the http.Response Body.
826func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusResponder(resp *http.Response) (result BgpPeerStatusListResult, err error) {
827	err = autorest.Respond(
828		resp,
829		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
830		autorest.ByUnmarshallingJSON(&result),
831		autorest.ByClosing())
832	result.Response = autorest.Response{Response: resp}
833	return
834}
835
836// GetLearnedRoutes this operation retrieves a list of routes the virtual network gateway has learned, including routes
837// learned from BGP peers.
838// Parameters:
839// resourceGroupName - the name of the resource group.
840// virtualNetworkGatewayName - the name of the virtual network gateway.
841func (client VirtualNetworkGatewaysClient) GetLearnedRoutes(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetLearnedRoutesFuture, err error) {
842	if tracing.IsEnabled() {
843		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetLearnedRoutes")
844		defer func() {
845			sc := -1
846			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
847				sc = result.FutureAPI.Response().StatusCode
848			}
849			tracing.EndSpan(ctx, sc, err)
850		}()
851	}
852	req, err := client.GetLearnedRoutesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
853	if err != nil {
854		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetLearnedRoutes", nil, "Failure preparing request")
855		return
856	}
857
858	result, err = client.GetLearnedRoutesSender(req)
859	if err != nil {
860		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetLearnedRoutes", nil, "Failure sending request")
861		return
862	}
863
864	return
865}
866
867// GetLearnedRoutesPreparer prepares the GetLearnedRoutes request.
868func (client VirtualNetworkGatewaysClient) GetLearnedRoutesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
869	pathParameters := map[string]interface{}{
870		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
871		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
872		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
873	}
874
875	const APIVersion = "2020-03-01"
876	queryParameters := map[string]interface{}{
877		"api-version": APIVersion,
878	}
879
880	preparer := autorest.CreatePreparer(
881		autorest.AsPost(),
882		autorest.WithBaseURL(client.BaseURI),
883		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getLearnedRoutes", pathParameters),
884		autorest.WithQueryParameters(queryParameters))
885	return preparer.Prepare((&http.Request{}).WithContext(ctx))
886}
887
888// GetLearnedRoutesSender sends the GetLearnedRoutes request. The method will close the
889// http.Response Body if it receives an error.
890func (client VirtualNetworkGatewaysClient) GetLearnedRoutesSender(req *http.Request) (future VirtualNetworkGatewaysGetLearnedRoutesFuture, err error) {
891	var resp *http.Response
892	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
893	if err != nil {
894		return
895	}
896	var azf azure.Future
897	azf, err = azure.NewFutureFromResponse(resp)
898	future.FutureAPI = &azf
899	future.Result = func(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
900		var done bool
901		done, err = future.DoneWithContext(context.Background(), client)
902		if err != nil {
903			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
904			return
905		}
906		if !done {
907			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
908			return
909		}
910		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
911		grlr.Response.Response, err = future.GetResult(sender)
912		if grlr.Response.Response == nil && err == nil {
913			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", nil, "received nil response and error")
914		}
915		if err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
916			grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
917			if err != nil {
918				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
919			}
920		}
921		return
922	}
923	return
924}
925
926// GetLearnedRoutesResponder handles the response to the GetLearnedRoutes request. The method always
927// closes the http.Response Body.
928func (client VirtualNetworkGatewaysClient) GetLearnedRoutesResponder(resp *http.Response) (result GatewayRouteListResult, err error) {
929	err = autorest.Respond(
930		resp,
931		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
932		autorest.ByUnmarshallingJSON(&result),
933		autorest.ByClosing())
934	result.Response = autorest.Response{Response: resp}
935	return
936}
937
938// GetVpnclientConnectionHealth get VPN client connection health detail per P2S client connection of the virtual
939// network gateway in the specified resource group.
940// Parameters:
941// resourceGroupName - the name of the resource group.
942// virtualNetworkGatewayName - the name of the virtual network gateway.
943func (client VirtualNetworkGatewaysClient) GetVpnclientConnectionHealth(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture, err error) {
944	if tracing.IsEnabled() {
945		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetVpnclientConnectionHealth")
946		defer func() {
947			sc := -1
948			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
949				sc = result.FutureAPI.Response().StatusCode
950			}
951			tracing.EndSpan(ctx, sc, err)
952		}()
953	}
954	req, err := client.GetVpnclientConnectionHealthPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
955	if err != nil {
956		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnclientConnectionHealth", nil, "Failure preparing request")
957		return
958	}
959
960	result, err = client.GetVpnclientConnectionHealthSender(req)
961	if err != nil {
962		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnclientConnectionHealth", nil, "Failure sending request")
963		return
964	}
965
966	return
967}
968
969// GetVpnclientConnectionHealthPreparer prepares the GetVpnclientConnectionHealth request.
970func (client VirtualNetworkGatewaysClient) GetVpnclientConnectionHealthPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
971	pathParameters := map[string]interface{}{
972		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
973		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
974		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
975	}
976
977	const APIVersion = "2020-03-01"
978	queryParameters := map[string]interface{}{
979		"api-version": APIVersion,
980	}
981
982	preparer := autorest.CreatePreparer(
983		autorest.AsPost(),
984		autorest.WithBaseURL(client.BaseURI),
985		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getVpnClientConnectionHealth", pathParameters),
986		autorest.WithQueryParameters(queryParameters))
987	return preparer.Prepare((&http.Request{}).WithContext(ctx))
988}
989
990// GetVpnclientConnectionHealthSender sends the GetVpnclientConnectionHealth request. The method will close the
991// http.Response Body if it receives an error.
992func (client VirtualNetworkGatewaysClient) GetVpnclientConnectionHealthSender(req *http.Request) (future VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture, err error) {
993	var resp *http.Response
994	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
995	if err != nil {
996		return
997	}
998	var azf azure.Future
999	azf, err = azure.NewFutureFromResponse(resp)
1000	future.FutureAPI = &azf
1001	future.Result = func(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
1002		var done bool
1003		done, err = future.DoneWithContext(context.Background(), client)
1004		if err != nil {
1005			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
1006			return
1007		}
1008		if !done {
1009			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
1010			return
1011		}
1012		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1013		vcchdlr.Response.Response, err = future.GetResult(sender)
1014		if vcchdlr.Response.Response == nil && err == nil {
1015			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", nil, "received nil response and error")
1016		}
1017		if err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
1018			vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
1019			if err != nil {
1020				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
1021			}
1022		}
1023		return
1024	}
1025	return
1026}
1027
1028// GetVpnclientConnectionHealthResponder handles the response to the GetVpnclientConnectionHealth request. The method always
1029// closes the http.Response Body.
1030func (client VirtualNetworkGatewaysClient) GetVpnclientConnectionHealthResponder(resp *http.Response) (result VpnClientConnectionHealthDetailListResult, err error) {
1031	err = autorest.Respond(
1032		resp,
1033		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1034		autorest.ByUnmarshallingJSON(&result),
1035		autorest.ByClosing())
1036	result.Response = autorest.Response{Response: resp}
1037	return
1038}
1039
1040// GetVpnclientIpsecParameters the Get VpnclientIpsecParameters operation retrieves information about the vpnclient
1041// ipsec policy for P2S client of virtual network gateway in the specified resource group through Network resource
1042// provider.
1043// Parameters:
1044// resourceGroupName - the name of the resource group.
1045// virtualNetworkGatewayName - the virtual network gateway name.
1046func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParameters(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture, err error) {
1047	if tracing.IsEnabled() {
1048		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetVpnclientIpsecParameters")
1049		defer func() {
1050			sc := -1
1051			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1052				sc = result.FutureAPI.Response().StatusCode
1053			}
1054			tracing.EndSpan(ctx, sc, err)
1055		}()
1056	}
1057	req, err := client.GetVpnclientIpsecParametersPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1058	if err != nil {
1059		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnclientIpsecParameters", nil, "Failure preparing request")
1060		return
1061	}
1062
1063	result, err = client.GetVpnclientIpsecParametersSender(req)
1064	if err != nil {
1065		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnclientIpsecParameters", nil, "Failure sending request")
1066		return
1067	}
1068
1069	return
1070}
1071
1072// GetVpnclientIpsecParametersPreparer prepares the GetVpnclientIpsecParameters request.
1073func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1074	pathParameters := map[string]interface{}{
1075		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1076		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1077		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1078	}
1079
1080	const APIVersion = "2020-03-01"
1081	queryParameters := map[string]interface{}{
1082		"api-version": APIVersion,
1083	}
1084
1085	preparer := autorest.CreatePreparer(
1086		autorest.AsPost(),
1087		autorest.WithBaseURL(client.BaseURI),
1088		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getvpnclientipsecparameters", pathParameters),
1089		autorest.WithQueryParameters(queryParameters))
1090	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1091}
1092
1093// GetVpnclientIpsecParametersSender sends the GetVpnclientIpsecParameters request. The method will close the
1094// http.Response Body if it receives an error.
1095func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersSender(req *http.Request) (future VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture, err error) {
1096	var resp *http.Response
1097	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1098	if err != nil {
1099		return
1100	}
1101	var azf azure.Future
1102	azf, err = azure.NewFutureFromResponse(resp)
1103	future.FutureAPI = &azf
1104	future.Result = func(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
1105		var done bool
1106		done, err = future.DoneWithContext(context.Background(), client)
1107		if err != nil {
1108			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
1109			return
1110		}
1111		if !done {
1112			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
1113			return
1114		}
1115		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1116		vcipp.Response.Response, err = future.GetResult(sender)
1117		if vcipp.Response.Response == nil && err == nil {
1118			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", nil, "received nil response and error")
1119		}
1120		if err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
1121			vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
1122			if err != nil {
1123				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
1124			}
1125		}
1126		return
1127	}
1128	return
1129}
1130
1131// GetVpnclientIpsecParametersResponder handles the response to the GetVpnclientIpsecParameters request. The method always
1132// closes the http.Response Body.
1133func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersResponder(resp *http.Response) (result VpnClientIPsecParameters, err error) {
1134	err = autorest.Respond(
1135		resp,
1136		azure.WithErrorUnlessStatusCode(http.StatusOK),
1137		autorest.ByUnmarshallingJSON(&result),
1138		autorest.ByClosing())
1139	result.Response = autorest.Response{Response: resp}
1140	return
1141}
1142
1143// GetVpnProfilePackageURL gets pre-generated VPN profile for P2S client of the virtual network gateway in the
1144// specified resource group. The profile needs to be generated first using generateVpnProfile.
1145// Parameters:
1146// resourceGroupName - the name of the resource group.
1147// virtualNetworkGatewayName - the name of the virtual network gateway.
1148func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURL(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetVpnProfilePackageURLFuture, err error) {
1149	if tracing.IsEnabled() {
1150		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetVpnProfilePackageURL")
1151		defer func() {
1152			sc := -1
1153			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1154				sc = result.FutureAPI.Response().StatusCode
1155			}
1156			tracing.EndSpan(ctx, sc, err)
1157		}()
1158	}
1159	req, err := client.GetVpnProfilePackageURLPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1160	if err != nil {
1161		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnProfilePackageURL", nil, "Failure preparing request")
1162		return
1163	}
1164
1165	result, err = client.GetVpnProfilePackageURLSender(req)
1166	if err != nil {
1167		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnProfilePackageURL", nil, "Failure sending request")
1168		return
1169	}
1170
1171	return
1172}
1173
1174// GetVpnProfilePackageURLPreparer prepares the GetVpnProfilePackageURL request.
1175func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1176	pathParameters := map[string]interface{}{
1177		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1178		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1179		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1180	}
1181
1182	const APIVersion = "2020-03-01"
1183	queryParameters := map[string]interface{}{
1184		"api-version": APIVersion,
1185	}
1186
1187	preparer := autorest.CreatePreparer(
1188		autorest.AsPost(),
1189		autorest.WithBaseURL(client.BaseURI),
1190		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getvpnprofilepackageurl", pathParameters),
1191		autorest.WithQueryParameters(queryParameters))
1192	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1193}
1194
1195// GetVpnProfilePackageURLSender sends the GetVpnProfilePackageURL request. The method will close the
1196// http.Response Body if it receives an error.
1197func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLSender(req *http.Request) (future VirtualNetworkGatewaysGetVpnProfilePackageURLFuture, err error) {
1198	var resp *http.Response
1199	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1200	if err != nil {
1201		return
1202	}
1203	var azf azure.Future
1204	azf, err = azure.NewFutureFromResponse(resp)
1205	future.FutureAPI = &azf
1206	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
1207		var done bool
1208		done, err = future.DoneWithContext(context.Background(), client)
1209		if err != nil {
1210			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
1211			return
1212		}
1213		if !done {
1214			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
1215			return
1216		}
1217		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1218		s.Response.Response, err = future.GetResult(sender)
1219		if s.Response.Response == nil && err == nil {
1220			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", nil, "received nil response and error")
1221		}
1222		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
1223			s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
1224			if err != nil {
1225				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
1226			}
1227		}
1228		return
1229	}
1230	return
1231}
1232
1233// GetVpnProfilePackageURLResponder handles the response to the GetVpnProfilePackageURL request. The method always
1234// closes the http.Response Body.
1235func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLResponder(resp *http.Response) (result String, err error) {
1236	err = autorest.Respond(
1237		resp,
1238		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1239		autorest.ByUnmarshallingJSON(&result),
1240		autorest.ByClosing())
1241	result.Response = autorest.Response{Response: resp}
1242	return
1243}
1244
1245// List gets all virtual network gateways by resource group.
1246// Parameters:
1247// resourceGroupName - the name of the resource group.
1248func (client VirtualNetworkGatewaysClient) List(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayListResultPage, err error) {
1249	if tracing.IsEnabled() {
1250		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.List")
1251		defer func() {
1252			sc := -1
1253			if result.vnglr.Response.Response != nil {
1254				sc = result.vnglr.Response.Response.StatusCode
1255			}
1256			tracing.EndSpan(ctx, sc, err)
1257		}()
1258	}
1259	result.fn = client.listNextResults
1260	req, err := client.ListPreparer(ctx, resourceGroupName)
1261	if err != nil {
1262		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "List", nil, "Failure preparing request")
1263		return
1264	}
1265
1266	resp, err := client.ListSender(req)
1267	if err != nil {
1268		result.vnglr.Response = autorest.Response{Response: resp}
1269		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "List", resp, "Failure sending request")
1270		return
1271	}
1272
1273	result.vnglr, err = client.ListResponder(resp)
1274	if err != nil {
1275		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "List", resp, "Failure responding to request")
1276		return
1277	}
1278	if result.vnglr.hasNextLink() && result.vnglr.IsEmpty() {
1279		err = result.NextWithContext(ctx)
1280		return
1281	}
1282
1283	return
1284}
1285
1286// ListPreparer prepares the List request.
1287func (client VirtualNetworkGatewaysClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
1288	pathParameters := map[string]interface{}{
1289		"resourceGroupName": autorest.Encode("path", resourceGroupName),
1290		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
1291	}
1292
1293	const APIVersion = "2020-03-01"
1294	queryParameters := map[string]interface{}{
1295		"api-version": APIVersion,
1296	}
1297
1298	preparer := autorest.CreatePreparer(
1299		autorest.AsGet(),
1300		autorest.WithBaseURL(client.BaseURI),
1301		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways", pathParameters),
1302		autorest.WithQueryParameters(queryParameters))
1303	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1304}
1305
1306// ListSender sends the List request. The method will close the
1307// http.Response Body if it receives an error.
1308func (client VirtualNetworkGatewaysClient) ListSender(req *http.Request) (*http.Response, error) {
1309	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1310}
1311
1312// ListResponder handles the response to the List request. The method always
1313// closes the http.Response Body.
1314func (client VirtualNetworkGatewaysClient) ListResponder(resp *http.Response) (result VirtualNetworkGatewayListResult, err error) {
1315	err = autorest.Respond(
1316		resp,
1317		azure.WithErrorUnlessStatusCode(http.StatusOK),
1318		autorest.ByUnmarshallingJSON(&result),
1319		autorest.ByClosing())
1320	result.Response = autorest.Response{Response: resp}
1321	return
1322}
1323
1324// listNextResults retrieves the next set of results, if any.
1325func (client VirtualNetworkGatewaysClient) listNextResults(ctx context.Context, lastResults VirtualNetworkGatewayListResult) (result VirtualNetworkGatewayListResult, err error) {
1326	req, err := lastResults.virtualNetworkGatewayListResultPreparer(ctx)
1327	if err != nil {
1328		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", nil, "Failure preparing next results request")
1329	}
1330	if req == nil {
1331		return
1332	}
1333	resp, err := client.ListSender(req)
1334	if err != nil {
1335		result.Response = autorest.Response{Response: resp}
1336		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", resp, "Failure sending next results request")
1337	}
1338	result, err = client.ListResponder(resp)
1339	if err != nil {
1340		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", resp, "Failure responding to next results request")
1341	}
1342	return
1343}
1344
1345// ListComplete enumerates all values, automatically crossing page boundaries as required.
1346func (client VirtualNetworkGatewaysClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayListResultIterator, err error) {
1347	if tracing.IsEnabled() {
1348		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.List")
1349		defer func() {
1350			sc := -1
1351			if result.Response().Response.Response != nil {
1352				sc = result.page.Response().Response.Response.StatusCode
1353			}
1354			tracing.EndSpan(ctx, sc, err)
1355		}()
1356	}
1357	result.page, err = client.List(ctx, resourceGroupName)
1358	return
1359}
1360
1361// ListConnections gets all the connections in a virtual network gateway.
1362// Parameters:
1363// resourceGroupName - the name of the resource group.
1364// virtualNetworkGatewayName - the name of the virtual network gateway.
1365func (client VirtualNetworkGatewaysClient) ListConnections(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewayListConnectionsResultPage, err error) {
1366	if tracing.IsEnabled() {
1367		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.ListConnections")
1368		defer func() {
1369			sc := -1
1370			if result.vnglcr.Response.Response != nil {
1371				sc = result.vnglcr.Response.Response.StatusCode
1372			}
1373			tracing.EndSpan(ctx, sc, err)
1374		}()
1375	}
1376	result.fn = client.listConnectionsNextResults
1377	req, err := client.ListConnectionsPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1378	if err != nil {
1379		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ListConnections", nil, "Failure preparing request")
1380		return
1381	}
1382
1383	resp, err := client.ListConnectionsSender(req)
1384	if err != nil {
1385		result.vnglcr.Response = autorest.Response{Response: resp}
1386		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ListConnections", resp, "Failure sending request")
1387		return
1388	}
1389
1390	result.vnglcr, err = client.ListConnectionsResponder(resp)
1391	if err != nil {
1392		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ListConnections", resp, "Failure responding to request")
1393		return
1394	}
1395	if result.vnglcr.hasNextLink() && result.vnglcr.IsEmpty() {
1396		err = result.NextWithContext(ctx)
1397		return
1398	}
1399
1400	return
1401}
1402
1403// ListConnectionsPreparer prepares the ListConnections request.
1404func (client VirtualNetworkGatewaysClient) ListConnectionsPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1405	pathParameters := map[string]interface{}{
1406		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1407		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1408		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1409	}
1410
1411	const APIVersion = "2020-03-01"
1412	queryParameters := map[string]interface{}{
1413		"api-version": APIVersion,
1414	}
1415
1416	preparer := autorest.CreatePreparer(
1417		autorest.AsGet(),
1418		autorest.WithBaseURL(client.BaseURI),
1419		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/connections", pathParameters),
1420		autorest.WithQueryParameters(queryParameters))
1421	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1422}
1423
1424// ListConnectionsSender sends the ListConnections request. The method will close the
1425// http.Response Body if it receives an error.
1426func (client VirtualNetworkGatewaysClient) ListConnectionsSender(req *http.Request) (*http.Response, error) {
1427	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1428}
1429
1430// ListConnectionsResponder handles the response to the ListConnections request. The method always
1431// closes the http.Response Body.
1432func (client VirtualNetworkGatewaysClient) ListConnectionsResponder(resp *http.Response) (result VirtualNetworkGatewayListConnectionsResult, err error) {
1433	err = autorest.Respond(
1434		resp,
1435		azure.WithErrorUnlessStatusCode(http.StatusOK),
1436		autorest.ByUnmarshallingJSON(&result),
1437		autorest.ByClosing())
1438	result.Response = autorest.Response{Response: resp}
1439	return
1440}
1441
1442// listConnectionsNextResults retrieves the next set of results, if any.
1443func (client VirtualNetworkGatewaysClient) listConnectionsNextResults(ctx context.Context, lastResults VirtualNetworkGatewayListConnectionsResult) (result VirtualNetworkGatewayListConnectionsResult, err error) {
1444	req, err := lastResults.virtualNetworkGatewayListConnectionsResultPreparer(ctx)
1445	if err != nil {
1446		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listConnectionsNextResults", nil, "Failure preparing next results request")
1447	}
1448	if req == nil {
1449		return
1450	}
1451	resp, err := client.ListConnectionsSender(req)
1452	if err != nil {
1453		result.Response = autorest.Response{Response: resp}
1454		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listConnectionsNextResults", resp, "Failure sending next results request")
1455	}
1456	result, err = client.ListConnectionsResponder(resp)
1457	if err != nil {
1458		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listConnectionsNextResults", resp, "Failure responding to next results request")
1459	}
1460	return
1461}
1462
1463// ListConnectionsComplete enumerates all values, automatically crossing page boundaries as required.
1464func (client VirtualNetworkGatewaysClient) ListConnectionsComplete(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewayListConnectionsResultIterator, err error) {
1465	if tracing.IsEnabled() {
1466		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.ListConnections")
1467		defer func() {
1468			sc := -1
1469			if result.Response().Response.Response != nil {
1470				sc = result.page.Response().Response.Response.StatusCode
1471			}
1472			tracing.EndSpan(ctx, sc, err)
1473		}()
1474	}
1475	result.page, err = client.ListConnections(ctx, resourceGroupName, virtualNetworkGatewayName)
1476	return
1477}
1478
1479// Reset resets the primary of the virtual network gateway in the specified resource group.
1480// Parameters:
1481// resourceGroupName - the name of the resource group.
1482// virtualNetworkGatewayName - the name of the virtual network gateway.
1483// gatewayVip - virtual network gateway vip address supplied to the begin reset of the active-active feature
1484// enabled gateway.
1485func (client VirtualNetworkGatewaysClient) Reset(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, gatewayVip string) (result VirtualNetworkGatewaysResetFuture, err error) {
1486	if tracing.IsEnabled() {
1487		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Reset")
1488		defer func() {
1489			sc := -1
1490			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1491				sc = result.FutureAPI.Response().StatusCode
1492			}
1493			tracing.EndSpan(ctx, sc, err)
1494		}()
1495	}
1496	req, err := client.ResetPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, gatewayVip)
1497	if err != nil {
1498		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Reset", nil, "Failure preparing request")
1499		return
1500	}
1501
1502	result, err = client.ResetSender(req)
1503	if err != nil {
1504		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Reset", nil, "Failure sending request")
1505		return
1506	}
1507
1508	return
1509}
1510
1511// ResetPreparer prepares the Reset request.
1512func (client VirtualNetworkGatewaysClient) ResetPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, gatewayVip string) (*http.Request, error) {
1513	pathParameters := map[string]interface{}{
1514		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1515		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1516		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1517	}
1518
1519	const APIVersion = "2020-03-01"
1520	queryParameters := map[string]interface{}{
1521		"api-version": APIVersion,
1522	}
1523	if len(gatewayVip) > 0 {
1524		queryParameters["gatewayVip"] = autorest.Encode("query", gatewayVip)
1525	}
1526
1527	preparer := autorest.CreatePreparer(
1528		autorest.AsPost(),
1529		autorest.WithBaseURL(client.BaseURI),
1530		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/reset", pathParameters),
1531		autorest.WithQueryParameters(queryParameters))
1532	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1533}
1534
1535// ResetSender sends the Reset request. The method will close the
1536// http.Response Body if it receives an error.
1537func (client VirtualNetworkGatewaysClient) ResetSender(req *http.Request) (future VirtualNetworkGatewaysResetFuture, err error) {
1538	var resp *http.Response
1539	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1540	if err != nil {
1541		return
1542	}
1543	var azf azure.Future
1544	azf, err = azure.NewFutureFromResponse(resp)
1545	future.FutureAPI = &azf
1546	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
1547		var done bool
1548		done, err = future.DoneWithContext(context.Background(), client)
1549		if err != nil {
1550			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
1551			return
1552		}
1553		if !done {
1554			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
1555			return
1556		}
1557		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1558		vng.Response.Response, err = future.GetResult(sender)
1559		if vng.Response.Response == nil && err == nil {
1560			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", nil, "received nil response and error")
1561		}
1562		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
1563			vng, err = client.ResetResponder(vng.Response.Response)
1564			if err != nil {
1565				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
1566			}
1567		}
1568		return
1569	}
1570	return
1571}
1572
1573// ResetResponder handles the response to the Reset request. The method always
1574// closes the http.Response Body.
1575func (client VirtualNetworkGatewaysClient) ResetResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
1576	err = autorest.Respond(
1577		resp,
1578		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1579		autorest.ByUnmarshallingJSON(&result),
1580		autorest.ByClosing())
1581	result.Response = autorest.Response{Response: resp}
1582	return
1583}
1584
1585// ResetVpnClientSharedKey resets the VPN client shared key of the virtual network gateway in the specified resource
1586// group.
1587// Parameters:
1588// resourceGroupName - the name of the resource group.
1589// virtualNetworkGatewayName - the name of the virtual network gateway.
1590func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKey(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysResetVpnClientSharedKeyFuture, err error) {
1591	if tracing.IsEnabled() {
1592		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.ResetVpnClientSharedKey")
1593		defer func() {
1594			sc := -1
1595			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1596				sc = result.FutureAPI.Response().StatusCode
1597			}
1598			tracing.EndSpan(ctx, sc, err)
1599		}()
1600	}
1601	req, err := client.ResetVpnClientSharedKeyPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1602	if err != nil {
1603		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ResetVpnClientSharedKey", nil, "Failure preparing request")
1604		return
1605	}
1606
1607	result, err = client.ResetVpnClientSharedKeySender(req)
1608	if err != nil {
1609		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ResetVpnClientSharedKey", nil, "Failure sending request")
1610		return
1611	}
1612
1613	return
1614}
1615
1616// ResetVpnClientSharedKeyPreparer prepares the ResetVpnClientSharedKey request.
1617func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeyPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1618	pathParameters := map[string]interface{}{
1619		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1620		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1621		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1622	}
1623
1624	const APIVersion = "2020-03-01"
1625	queryParameters := map[string]interface{}{
1626		"api-version": APIVersion,
1627	}
1628
1629	preparer := autorest.CreatePreparer(
1630		autorest.AsPost(),
1631		autorest.WithBaseURL(client.BaseURI),
1632		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/resetvpnclientsharedkey", pathParameters),
1633		autorest.WithQueryParameters(queryParameters))
1634	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1635}
1636
1637// ResetVpnClientSharedKeySender sends the ResetVpnClientSharedKey request. The method will close the
1638// http.Response Body if it receives an error.
1639func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeySender(req *http.Request) (future VirtualNetworkGatewaysResetVpnClientSharedKeyFuture, err error) {
1640	var resp *http.Response
1641	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1642	if err != nil {
1643		return
1644	}
1645	var azf azure.Future
1646	azf, err = azure.NewFutureFromResponse(resp)
1647	future.FutureAPI = &azf
1648	future.Result = func(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
1649		var done bool
1650		done, err = future.DoneWithContext(context.Background(), client)
1651		if err != nil {
1652			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
1653			return
1654		}
1655		if !done {
1656			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
1657			return
1658		}
1659		ar.Response = future.Response()
1660		return
1661	}
1662	return
1663}
1664
1665// ResetVpnClientSharedKeyResponder handles the response to the ResetVpnClientSharedKey request. The method always
1666// closes the http.Response Body.
1667func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeyResponder(resp *http.Response) (result autorest.Response, err error) {
1668	err = autorest.Respond(
1669		resp,
1670		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1671		autorest.ByClosing())
1672	result.Response = resp
1673	return
1674}
1675
1676// SetVpnclientIpsecParameters the Set VpnclientIpsecParameters operation sets the vpnclient ipsec policy for P2S
1677// client of virtual network gateway in the specified resource group through Network resource provider.
1678// Parameters:
1679// resourceGroupName - the name of the resource group.
1680// virtualNetworkGatewayName - the name of the virtual network gateway.
1681// vpnclientIpsecParams - parameters supplied to the Begin Set vpnclient ipsec parameters of Virtual Network
1682// Gateway P2S client operation through Network resource provider.
1683func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParameters(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, vpnclientIpsecParams VpnClientIPsecParameters) (result VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture, err error) {
1684	if tracing.IsEnabled() {
1685		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.SetVpnclientIpsecParameters")
1686		defer func() {
1687			sc := -1
1688			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1689				sc = result.FutureAPI.Response().StatusCode
1690			}
1691			tracing.EndSpan(ctx, sc, err)
1692		}()
1693	}
1694	if err := validation.Validate([]validation.Validation{
1695		{TargetValue: vpnclientIpsecParams,
1696			Constraints: []validation.Constraint{{Target: "vpnclientIpsecParams.SaLifeTimeSeconds", Name: validation.Null, Rule: true, Chain: nil},
1697				{Target: "vpnclientIpsecParams.SaDataSizeKilobytes", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
1698		return result, validation.NewError("network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", err.Error())
1699	}
1700
1701	req, err := client.SetVpnclientIpsecParametersPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, vpnclientIpsecParams)
1702	if err != nil {
1703		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", nil, "Failure preparing request")
1704		return
1705	}
1706
1707	result, err = client.SetVpnclientIpsecParametersSender(req)
1708	if err != nil {
1709		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", nil, "Failure sending request")
1710		return
1711	}
1712
1713	return
1714}
1715
1716// SetVpnclientIpsecParametersPreparer prepares the SetVpnclientIpsecParameters request.
1717func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, vpnclientIpsecParams VpnClientIPsecParameters) (*http.Request, error) {
1718	pathParameters := map[string]interface{}{
1719		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1720		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1721		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1722	}
1723
1724	const APIVersion = "2020-03-01"
1725	queryParameters := map[string]interface{}{
1726		"api-version": APIVersion,
1727	}
1728
1729	preparer := autorest.CreatePreparer(
1730		autorest.AsContentType("application/json; charset=utf-8"),
1731		autorest.AsPost(),
1732		autorest.WithBaseURL(client.BaseURI),
1733		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/setvpnclientipsecparameters", pathParameters),
1734		autorest.WithJSON(vpnclientIpsecParams),
1735		autorest.WithQueryParameters(queryParameters))
1736	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1737}
1738
1739// SetVpnclientIpsecParametersSender sends the SetVpnclientIpsecParameters request. The method will close the
1740// http.Response Body if it receives an error.
1741func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersSender(req *http.Request) (future VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture, err error) {
1742	var resp *http.Response
1743	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1744	if err != nil {
1745		return
1746	}
1747	var azf azure.Future
1748	azf, err = azure.NewFutureFromResponse(resp)
1749	future.FutureAPI = &azf
1750	future.Result = func(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
1751		var done bool
1752		done, err = future.DoneWithContext(context.Background(), client)
1753		if err != nil {
1754			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
1755			return
1756		}
1757		if !done {
1758			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
1759			return
1760		}
1761		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1762		vcipp.Response.Response, err = future.GetResult(sender)
1763		if vcipp.Response.Response == nil && err == nil {
1764			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", nil, "received nil response and error")
1765		}
1766		if err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
1767			vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
1768			if err != nil {
1769				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
1770			}
1771		}
1772		return
1773	}
1774	return
1775}
1776
1777// SetVpnclientIpsecParametersResponder handles the response to the SetVpnclientIpsecParameters request. The method always
1778// closes the http.Response Body.
1779func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersResponder(resp *http.Response) (result VpnClientIPsecParameters, err error) {
1780	err = autorest.Respond(
1781		resp,
1782		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1783		autorest.ByUnmarshallingJSON(&result),
1784		autorest.ByClosing())
1785	result.Response = autorest.Response{Response: resp}
1786	return
1787}
1788
1789// StartPacketCapture starts packet capture on virtual network gateway in the specified resource group.
1790// Parameters:
1791// resourceGroupName - the name of the resource group.
1792// virtualNetworkGatewayName - the name of the virtual network gateway.
1793// parameters - virtual network gateway packet capture parameters supplied to start packet capture on gateway.
1794func (client VirtualNetworkGatewaysClient) StartPacketCapture(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters *VpnPacketCaptureStartParameters) (result VirtualNetworkGatewaysStartPacketCaptureFuture, err error) {
1795	if tracing.IsEnabled() {
1796		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.StartPacketCapture")
1797		defer func() {
1798			sc := -1
1799			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1800				sc = result.FutureAPI.Response().StatusCode
1801			}
1802			tracing.EndSpan(ctx, sc, err)
1803		}()
1804	}
1805	req, err := client.StartPacketCapturePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
1806	if err != nil {
1807		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "StartPacketCapture", nil, "Failure preparing request")
1808		return
1809	}
1810
1811	result, err = client.StartPacketCaptureSender(req)
1812	if err != nil {
1813		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "StartPacketCapture", nil, "Failure sending request")
1814		return
1815	}
1816
1817	return
1818}
1819
1820// StartPacketCapturePreparer prepares the StartPacketCapture request.
1821func (client VirtualNetworkGatewaysClient) StartPacketCapturePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters *VpnPacketCaptureStartParameters) (*http.Request, error) {
1822	pathParameters := map[string]interface{}{
1823		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1824		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1825		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1826	}
1827
1828	const APIVersion = "2020-03-01"
1829	queryParameters := map[string]interface{}{
1830		"api-version": APIVersion,
1831	}
1832
1833	preparer := autorest.CreatePreparer(
1834		autorest.AsContentType("application/json; charset=utf-8"),
1835		autorest.AsPost(),
1836		autorest.WithBaseURL(client.BaseURI),
1837		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/startPacketCapture", pathParameters),
1838		autorest.WithQueryParameters(queryParameters))
1839	if parameters != nil {
1840		preparer = autorest.DecoratePreparer(preparer,
1841			autorest.WithJSON(parameters))
1842	}
1843	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1844}
1845
1846// StartPacketCaptureSender sends the StartPacketCapture request. The method will close the
1847// http.Response Body if it receives an error.
1848func (client VirtualNetworkGatewaysClient) StartPacketCaptureSender(req *http.Request) (future VirtualNetworkGatewaysStartPacketCaptureFuture, err error) {
1849	var resp *http.Response
1850	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1851	if err != nil {
1852		return
1853	}
1854	var azf azure.Future
1855	azf, err = azure.NewFutureFromResponse(resp)
1856	future.FutureAPI = &azf
1857	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
1858		var done bool
1859		done, err = future.DoneWithContext(context.Background(), client)
1860		if err != nil {
1861			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
1862			return
1863		}
1864		if !done {
1865			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStartPacketCaptureFuture")
1866			return
1867		}
1868		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1869		s.Response.Response, err = future.GetResult(sender)
1870		if s.Response.Response == nil && err == nil {
1871			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", nil, "received nil response and error")
1872		}
1873		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
1874			s, err = client.StartPacketCaptureResponder(s.Response.Response)
1875			if err != nil {
1876				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
1877			}
1878		}
1879		return
1880	}
1881	return
1882}
1883
1884// StartPacketCaptureResponder handles the response to the StartPacketCapture request. The method always
1885// closes the http.Response Body.
1886func (client VirtualNetworkGatewaysClient) StartPacketCaptureResponder(resp *http.Response) (result String, err error) {
1887	err = autorest.Respond(
1888		resp,
1889		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1890		autorest.ByUnmarshallingJSON(&result),
1891		autorest.ByClosing())
1892	result.Response = autorest.Response{Response: resp}
1893	return
1894}
1895
1896// StopPacketCapture stops packet capture on virtual network gateway in the specified resource group.
1897// Parameters:
1898// resourceGroupName - the name of the resource group.
1899// virtualNetworkGatewayName - the name of the virtual network gateway.
1900// parameters - virtual network gateway packet capture parameters supplied to stop packet capture on gateway.
1901func (client VirtualNetworkGatewaysClient) StopPacketCapture(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnPacketCaptureStopParameters) (result VirtualNetworkGatewaysStopPacketCaptureFuture, err error) {
1902	if tracing.IsEnabled() {
1903		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.StopPacketCapture")
1904		defer func() {
1905			sc := -1
1906			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1907				sc = result.FutureAPI.Response().StatusCode
1908			}
1909			tracing.EndSpan(ctx, sc, err)
1910		}()
1911	}
1912	req, err := client.StopPacketCapturePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
1913	if err != nil {
1914		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "StopPacketCapture", nil, "Failure preparing request")
1915		return
1916	}
1917
1918	result, err = client.StopPacketCaptureSender(req)
1919	if err != nil {
1920		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "StopPacketCapture", nil, "Failure sending request")
1921		return
1922	}
1923
1924	return
1925}
1926
1927// StopPacketCapturePreparer prepares the StopPacketCapture request.
1928func (client VirtualNetworkGatewaysClient) StopPacketCapturePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnPacketCaptureStopParameters) (*http.Request, error) {
1929	pathParameters := map[string]interface{}{
1930		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1931		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1932		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1933	}
1934
1935	const APIVersion = "2020-03-01"
1936	queryParameters := map[string]interface{}{
1937		"api-version": APIVersion,
1938	}
1939
1940	preparer := autorest.CreatePreparer(
1941		autorest.AsContentType("application/json; charset=utf-8"),
1942		autorest.AsPost(),
1943		autorest.WithBaseURL(client.BaseURI),
1944		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/stopPacketCapture", pathParameters),
1945		autorest.WithJSON(parameters),
1946		autorest.WithQueryParameters(queryParameters))
1947	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1948}
1949
1950// StopPacketCaptureSender sends the StopPacketCapture request. The method will close the
1951// http.Response Body if it receives an error.
1952func (client VirtualNetworkGatewaysClient) StopPacketCaptureSender(req *http.Request) (future VirtualNetworkGatewaysStopPacketCaptureFuture, err error) {
1953	var resp *http.Response
1954	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1955	if err != nil {
1956		return
1957	}
1958	var azf azure.Future
1959	azf, err = azure.NewFutureFromResponse(resp)
1960	future.FutureAPI = &azf
1961	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
1962		var done bool
1963		done, err = future.DoneWithContext(context.Background(), client)
1964		if err != nil {
1965			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
1966			return
1967		}
1968		if !done {
1969			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStopPacketCaptureFuture")
1970			return
1971		}
1972		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1973		s.Response.Response, err = future.GetResult(sender)
1974		if s.Response.Response == nil && err == nil {
1975			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", nil, "received nil response and error")
1976		}
1977		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
1978			s, err = client.StopPacketCaptureResponder(s.Response.Response)
1979			if err != nil {
1980				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
1981			}
1982		}
1983		return
1984	}
1985	return
1986}
1987
1988// StopPacketCaptureResponder handles the response to the StopPacketCapture request. The method always
1989// closes the http.Response Body.
1990func (client VirtualNetworkGatewaysClient) StopPacketCaptureResponder(resp *http.Response) (result String, err error) {
1991	err = autorest.Respond(
1992		resp,
1993		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1994		autorest.ByUnmarshallingJSON(&result),
1995		autorest.ByClosing())
1996	result.Response = autorest.Response{Response: resp}
1997	return
1998}
1999
2000// SupportedVpnDevices gets a xml format representation for supported vpn devices.
2001// Parameters:
2002// resourceGroupName - the name of the resource group.
2003// virtualNetworkGatewayName - the name of the virtual network gateway.
2004func (client VirtualNetworkGatewaysClient) SupportedVpnDevices(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result String, err error) {
2005	if tracing.IsEnabled() {
2006		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.SupportedVpnDevices")
2007		defer func() {
2008			sc := -1
2009			if result.Response.Response != nil {
2010				sc = result.Response.Response.StatusCode
2011			}
2012			tracing.EndSpan(ctx, sc, err)
2013		}()
2014	}
2015	req, err := client.SupportedVpnDevicesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
2016	if err != nil {
2017		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", nil, "Failure preparing request")
2018		return
2019	}
2020
2021	resp, err := client.SupportedVpnDevicesSender(req)
2022	if err != nil {
2023		result.Response = autorest.Response{Response: resp}
2024		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", resp, "Failure sending request")
2025		return
2026	}
2027
2028	result, err = client.SupportedVpnDevicesResponder(resp)
2029	if err != nil {
2030		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", resp, "Failure responding to request")
2031		return
2032	}
2033
2034	return
2035}
2036
2037// SupportedVpnDevicesPreparer prepares the SupportedVpnDevices request.
2038func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
2039	pathParameters := map[string]interface{}{
2040		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
2041		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
2042		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
2043	}
2044
2045	const APIVersion = "2020-03-01"
2046	queryParameters := map[string]interface{}{
2047		"api-version": APIVersion,
2048	}
2049
2050	preparer := autorest.CreatePreparer(
2051		autorest.AsPost(),
2052		autorest.WithBaseURL(client.BaseURI),
2053		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/supportedvpndevices", pathParameters),
2054		autorest.WithQueryParameters(queryParameters))
2055	return preparer.Prepare((&http.Request{}).WithContext(ctx))
2056}
2057
2058// SupportedVpnDevicesSender sends the SupportedVpnDevices request. The method will close the
2059// http.Response Body if it receives an error.
2060func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesSender(req *http.Request) (*http.Response, error) {
2061	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
2062}
2063
2064// SupportedVpnDevicesResponder handles the response to the SupportedVpnDevices request. The method always
2065// closes the http.Response Body.
2066func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesResponder(resp *http.Response) (result String, err error) {
2067	err = autorest.Respond(
2068		resp,
2069		azure.WithErrorUnlessStatusCode(http.StatusOK),
2070		autorest.ByUnmarshallingJSON(&result.Value),
2071		autorest.ByClosing())
2072	result.Response = autorest.Response{Response: resp}
2073	return
2074}
2075
2076// UpdateTags updates a virtual network gateway tags.
2077// Parameters:
2078// resourceGroupName - the name of the resource group.
2079// virtualNetworkGatewayName - the name of the virtual network gateway.
2080// parameters - parameters supplied to update virtual network gateway tags.
2081func (client VirtualNetworkGatewaysClient) UpdateTags(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters TagsObject) (result VirtualNetworkGatewaysUpdateTagsFuture, err error) {
2082	if tracing.IsEnabled() {
2083		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.UpdateTags")
2084		defer func() {
2085			sc := -1
2086			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
2087				sc = result.FutureAPI.Response().StatusCode
2088			}
2089			tracing.EndSpan(ctx, sc, err)
2090		}()
2091	}
2092	req, err := client.UpdateTagsPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
2093	if err != nil {
2094		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "UpdateTags", nil, "Failure preparing request")
2095		return
2096	}
2097
2098	result, err = client.UpdateTagsSender(req)
2099	if err != nil {
2100		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "UpdateTags", nil, "Failure sending request")
2101		return
2102	}
2103
2104	return
2105}
2106
2107// UpdateTagsPreparer prepares the UpdateTags request.
2108func (client VirtualNetworkGatewaysClient) UpdateTagsPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters TagsObject) (*http.Request, error) {
2109	pathParameters := map[string]interface{}{
2110		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
2111		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
2112		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
2113	}
2114
2115	const APIVersion = "2020-03-01"
2116	queryParameters := map[string]interface{}{
2117		"api-version": APIVersion,
2118	}
2119
2120	preparer := autorest.CreatePreparer(
2121		autorest.AsContentType("application/json; charset=utf-8"),
2122		autorest.AsPatch(),
2123		autorest.WithBaseURL(client.BaseURI),
2124		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
2125		autorest.WithJSON(parameters),
2126		autorest.WithQueryParameters(queryParameters))
2127	return preparer.Prepare((&http.Request{}).WithContext(ctx))
2128}
2129
2130// UpdateTagsSender sends the UpdateTags request. The method will close the
2131// http.Response Body if it receives an error.
2132func (client VirtualNetworkGatewaysClient) UpdateTagsSender(req *http.Request) (future VirtualNetworkGatewaysUpdateTagsFuture, err error) {
2133	var resp *http.Response
2134	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
2135	if err != nil {
2136		return
2137	}
2138	var azf azure.Future
2139	azf, err = azure.NewFutureFromResponse(resp)
2140	future.FutureAPI = &azf
2141	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
2142		var done bool
2143		done, err = future.DoneWithContext(context.Background(), client)
2144		if err != nil {
2145			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
2146			return
2147		}
2148		if !done {
2149			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
2150			return
2151		}
2152		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
2153		vng.Response.Response, err = future.GetResult(sender)
2154		if vng.Response.Response == nil && err == nil {
2155			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", nil, "received nil response and error")
2156		}
2157		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
2158			vng, err = client.UpdateTagsResponder(vng.Response.Response)
2159			if err != nil {
2160				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
2161			}
2162		}
2163		return
2164	}
2165	return
2166}
2167
2168// UpdateTagsResponder handles the response to the UpdateTags request. The method always
2169// closes the http.Response Body.
2170func (client VirtualNetworkGatewaysClient) UpdateTagsResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
2171	err = autorest.Respond(
2172		resp,
2173		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
2174		autorest.ByUnmarshallingJSON(&result),
2175		autorest.ByClosing())
2176	result.Response = autorest.Response{Response: resp}
2177	return
2178}
2179
2180// VpnDeviceConfigurationScript gets a xml format representation for vpn device configuration script.
2181// Parameters:
2182// resourceGroupName - the name of the resource group.
2183// virtualNetworkGatewayConnectionName - the name of the virtual network gateway connection for which the
2184// configuration script is generated.
2185// parameters - parameters supplied to the generate vpn device script operation.
2186func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScript(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VpnDeviceScriptParameters) (result String, err error) {
2187	if tracing.IsEnabled() {
2188		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.VpnDeviceConfigurationScript")
2189		defer func() {
2190			sc := -1
2191			if result.Response.Response != nil {
2192				sc = result.Response.Response.StatusCode
2193			}
2194			tracing.EndSpan(ctx, sc, err)
2195		}()
2196	}
2197	req, err := client.VpnDeviceConfigurationScriptPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName, parameters)
2198	if err != nil {
2199		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", nil, "Failure preparing request")
2200		return
2201	}
2202
2203	resp, err := client.VpnDeviceConfigurationScriptSender(req)
2204	if err != nil {
2205		result.Response = autorest.Response{Response: resp}
2206		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", resp, "Failure sending request")
2207		return
2208	}
2209
2210	result, err = client.VpnDeviceConfigurationScriptResponder(resp)
2211	if err != nil {
2212		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", resp, "Failure responding to request")
2213		return
2214	}
2215
2216	return
2217}
2218
2219// VpnDeviceConfigurationScriptPreparer prepares the VpnDeviceConfigurationScript request.
2220func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VpnDeviceScriptParameters) (*http.Request, error) {
2221	pathParameters := map[string]interface{}{
2222		"resourceGroupName":                   autorest.Encode("path", resourceGroupName),
2223		"subscriptionId":                      autorest.Encode("path", client.SubscriptionID),
2224		"virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName),
2225	}
2226
2227	const APIVersion = "2020-03-01"
2228	queryParameters := map[string]interface{}{
2229		"api-version": APIVersion,
2230	}
2231
2232	preparer := autorest.CreatePreparer(
2233		autorest.AsContentType("application/json; charset=utf-8"),
2234		autorest.AsPost(),
2235		autorest.WithBaseURL(client.BaseURI),
2236		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/connections/{virtualNetworkGatewayConnectionName}/vpndeviceconfigurationscript", pathParameters),
2237		autorest.WithJSON(parameters),
2238		autorest.WithQueryParameters(queryParameters))
2239	return preparer.Prepare((&http.Request{}).WithContext(ctx))
2240}
2241
2242// VpnDeviceConfigurationScriptSender sends the VpnDeviceConfigurationScript request. The method will close the
2243// http.Response Body if it receives an error.
2244func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptSender(req *http.Request) (*http.Response, error) {
2245	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
2246}
2247
2248// VpnDeviceConfigurationScriptResponder handles the response to the VpnDeviceConfigurationScript request. The method always
2249// closes the http.Response Body.
2250func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptResponder(resp *http.Response) (result String, err error) {
2251	err = autorest.Respond(
2252		resp,
2253		azure.WithErrorUnlessStatusCode(http.StatusOK),
2254		autorest.ByUnmarshallingJSON(&result.Value),
2255		autorest.ByClosing())
2256	result.Response = autorest.Response{Response: resp}
2257	return
2258}
2259