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 = "2018-10-01"
92	queryParameters := map[string]interface{}{
93		"api-version": APIVersion,
94	}
95
96	preparer := autorest.CreatePreparer(
97		autorest.AsContentType("application/json; charset=utf-8"),
98		autorest.AsPut(),
99		autorest.WithBaseURL(client.BaseURI),
100		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
101		autorest.WithJSON(parameters),
102		autorest.WithQueryParameters(queryParameters))
103	return preparer.Prepare((&http.Request{}).WithContext(ctx))
104}
105
106// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
107// http.Response Body if it receives an error.
108func (client VirtualNetworkGatewaysClient) CreateOrUpdateSender(req *http.Request) (future VirtualNetworkGatewaysCreateOrUpdateFuture, err error) {
109	var resp *http.Response
110	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
111	if err != nil {
112		return
113	}
114	var azf azure.Future
115	azf, err = azure.NewFutureFromResponse(resp)
116	future.FutureAPI = &azf
117	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
118		var done bool
119		done, err = future.DoneWithContext(context.Background(), client)
120		if err != nil {
121			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
122			return
123		}
124		if !done {
125			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
126			return
127		}
128		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
129		vng.Response.Response, err = future.GetResult(sender)
130		if vng.Response.Response == nil && err == nil {
131			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", nil, "received nil response and error")
132		}
133		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
134			vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
135			if err != nil {
136				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
137			}
138		}
139		return
140	}
141	return
142}
143
144// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
145// closes the http.Response Body.
146func (client VirtualNetworkGatewaysClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
147	err = autorest.Respond(
148		resp,
149		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
150		autorest.ByUnmarshallingJSON(&result),
151		autorest.ByClosing())
152	result.Response = autorest.Response{Response: resp}
153	return
154}
155
156// Delete deletes the specified virtual network gateway.
157// Parameters:
158// resourceGroupName - the name of the resource group.
159// virtualNetworkGatewayName - the name of the virtual network gateway.
160func (client VirtualNetworkGatewaysClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysDeleteFuture, err error) {
161	if tracing.IsEnabled() {
162		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Delete")
163		defer func() {
164			sc := -1
165			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
166				sc = result.FutureAPI.Response().StatusCode
167			}
168			tracing.EndSpan(ctx, sc, err)
169		}()
170	}
171	req, err := client.DeletePreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
172	if err != nil {
173		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Delete", nil, "Failure preparing request")
174		return
175	}
176
177	result, err = client.DeleteSender(req)
178	if err != nil {
179		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Delete", nil, "Failure sending request")
180		return
181	}
182
183	return
184}
185
186// DeletePreparer prepares the Delete request.
187func (client VirtualNetworkGatewaysClient) DeletePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
188	pathParameters := map[string]interface{}{
189		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
190		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
191		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
192	}
193
194	const APIVersion = "2018-10-01"
195	queryParameters := map[string]interface{}{
196		"api-version": APIVersion,
197	}
198
199	preparer := autorest.CreatePreparer(
200		autorest.AsDelete(),
201		autorest.WithBaseURL(client.BaseURI),
202		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
203		autorest.WithQueryParameters(queryParameters))
204	return preparer.Prepare((&http.Request{}).WithContext(ctx))
205}
206
207// DeleteSender sends the Delete request. The method will close the
208// http.Response Body if it receives an error.
209func (client VirtualNetworkGatewaysClient) DeleteSender(req *http.Request) (future VirtualNetworkGatewaysDeleteFuture, err error) {
210	var resp *http.Response
211	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
212	if err != nil {
213		return
214	}
215	var azf azure.Future
216	azf, err = azure.NewFutureFromResponse(resp)
217	future.FutureAPI = &azf
218	future.Result = func(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
219		var done bool
220		done, err = future.DoneWithContext(context.Background(), client)
221		if err != nil {
222			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
223			return
224		}
225		if !done {
226			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
227			return
228		}
229		ar.Response = future.Response()
230		return
231	}
232	return
233}
234
235// DeleteResponder handles the response to the Delete request. The method always
236// closes the http.Response Body.
237func (client VirtualNetworkGatewaysClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
238	err = autorest.Respond(
239		resp,
240		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
241		autorest.ByClosing())
242	result.Response = resp
243	return
244}
245
246// Generatevpnclientpackage generates VPN client package for P2S client of the virtual network gateway in the specified
247// resource group.
248// Parameters:
249// resourceGroupName - the name of the resource group.
250// virtualNetworkGatewayName - the name of the virtual network gateway.
251// parameters - parameters supplied to the generate virtual network gateway VPN client package operation.
252func (client VirtualNetworkGatewaysClient) Generatevpnclientpackage(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (result VirtualNetworkGatewaysGeneratevpnclientpackageFuture, err error) {
253	if tracing.IsEnabled() {
254		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Generatevpnclientpackage")
255		defer func() {
256			sc := -1
257			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
258				sc = result.FutureAPI.Response().StatusCode
259			}
260			tracing.EndSpan(ctx, sc, err)
261		}()
262	}
263	req, err := client.GeneratevpnclientpackagePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
264	if err != nil {
265		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", nil, "Failure preparing request")
266		return
267	}
268
269	result, err = client.GeneratevpnclientpackageSender(req)
270	if err != nil {
271		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", nil, "Failure sending request")
272		return
273	}
274
275	return
276}
277
278// GeneratevpnclientpackagePreparer prepares the Generatevpnclientpackage request.
279func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackagePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (*http.Request, error) {
280	pathParameters := map[string]interface{}{
281		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
282		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
283		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
284	}
285
286	const APIVersion = "2018-10-01"
287	queryParameters := map[string]interface{}{
288		"api-version": APIVersion,
289	}
290
291	preparer := autorest.CreatePreparer(
292		autorest.AsContentType("application/json; charset=utf-8"),
293		autorest.AsPost(),
294		autorest.WithBaseURL(client.BaseURI),
295		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/generatevpnclientpackage", pathParameters),
296		autorest.WithJSON(parameters),
297		autorest.WithQueryParameters(queryParameters))
298	return preparer.Prepare((&http.Request{}).WithContext(ctx))
299}
300
301// GeneratevpnclientpackageSender sends the Generatevpnclientpackage request. The method will close the
302// http.Response Body if it receives an error.
303func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageSender(req *http.Request) (future VirtualNetworkGatewaysGeneratevpnclientpackageFuture, err error) {
304	var resp *http.Response
305	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
306	if err != nil {
307		return
308	}
309	var azf azure.Future
310	azf, err = azure.NewFutureFromResponse(resp)
311	future.FutureAPI = &azf
312	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
313		var done bool
314		done, err = future.DoneWithContext(context.Background(), client)
315		if err != nil {
316			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
317			return
318		}
319		if !done {
320			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
321			return
322		}
323		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
324		s.Response.Response, err = future.GetResult(sender)
325		if s.Response.Response == nil && err == nil {
326			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", nil, "received nil response and error")
327		}
328		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
329			s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
330			if err != nil {
331				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
332			}
333		}
334		return
335	}
336	return
337}
338
339// GeneratevpnclientpackageResponder handles the response to the Generatevpnclientpackage request. The method always
340// closes the http.Response Body.
341func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageResponder(resp *http.Response) (result String, err error) {
342	err = autorest.Respond(
343		resp,
344		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
345		autorest.ByUnmarshallingJSON(&result),
346		autorest.ByClosing())
347	result.Response = autorest.Response{Response: resp}
348	return
349}
350
351// GenerateVpnProfile generates VPN profile for P2S client of the virtual network gateway in the specified resource
352// group. Used for IKEV2 and radius based authentication.
353// Parameters:
354// resourceGroupName - the name of the resource group.
355// virtualNetworkGatewayName - the name of the virtual network gateway.
356// parameters - parameters supplied to the generate virtual network gateway VPN client package operation.
357func (client VirtualNetworkGatewaysClient) GenerateVpnProfile(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (result VirtualNetworkGatewaysGenerateVpnProfileFuture, err error) {
358	if tracing.IsEnabled() {
359		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GenerateVpnProfile")
360		defer func() {
361			sc := -1
362			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
363				sc = result.FutureAPI.Response().StatusCode
364			}
365			tracing.EndSpan(ctx, sc, err)
366		}()
367	}
368	req, err := client.GenerateVpnProfilePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
369	if err != nil {
370		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GenerateVpnProfile", nil, "Failure preparing request")
371		return
372	}
373
374	result, err = client.GenerateVpnProfileSender(req)
375	if err != nil {
376		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GenerateVpnProfile", nil, "Failure sending request")
377		return
378	}
379
380	return
381}
382
383// GenerateVpnProfilePreparer prepares the GenerateVpnProfile request.
384func (client VirtualNetworkGatewaysClient) GenerateVpnProfilePreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (*http.Request, error) {
385	pathParameters := map[string]interface{}{
386		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
387		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
388		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
389	}
390
391	const APIVersion = "2018-10-01"
392	queryParameters := map[string]interface{}{
393		"api-version": APIVersion,
394	}
395
396	preparer := autorest.CreatePreparer(
397		autorest.AsContentType("application/json; charset=utf-8"),
398		autorest.AsPost(),
399		autorest.WithBaseURL(client.BaseURI),
400		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/generatevpnprofile", pathParameters),
401		autorest.WithJSON(parameters),
402		autorest.WithQueryParameters(queryParameters))
403	return preparer.Prepare((&http.Request{}).WithContext(ctx))
404}
405
406// GenerateVpnProfileSender sends the GenerateVpnProfile request. The method will close the
407// http.Response Body if it receives an error.
408func (client VirtualNetworkGatewaysClient) GenerateVpnProfileSender(req *http.Request) (future VirtualNetworkGatewaysGenerateVpnProfileFuture, err error) {
409	var resp *http.Response
410	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
411	if err != nil {
412		return
413	}
414	var azf azure.Future
415	azf, err = azure.NewFutureFromResponse(resp)
416	future.FutureAPI = &azf
417	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
418		var done bool
419		done, err = future.DoneWithContext(context.Background(), client)
420		if err != nil {
421			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
422			return
423		}
424		if !done {
425			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
426			return
427		}
428		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
429		s.Response.Response, err = future.GetResult(sender)
430		if s.Response.Response == nil && err == nil {
431			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", nil, "received nil response and error")
432		}
433		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
434			s, err = client.GenerateVpnProfileResponder(s.Response.Response)
435			if err != nil {
436				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
437			}
438		}
439		return
440	}
441	return
442}
443
444// GenerateVpnProfileResponder handles the response to the GenerateVpnProfile request. The method always
445// closes the http.Response Body.
446func (client VirtualNetworkGatewaysClient) GenerateVpnProfileResponder(resp *http.Response) (result String, err error) {
447	err = autorest.Respond(
448		resp,
449		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
450		autorest.ByUnmarshallingJSON(&result),
451		autorest.ByClosing())
452	result.Response = autorest.Response{Response: resp}
453	return
454}
455
456// Get gets the specified virtual network gateway by resource group.
457// Parameters:
458// resourceGroupName - the name of the resource group.
459// virtualNetworkGatewayName - the name of the virtual network gateway.
460func (client VirtualNetworkGatewaysClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGateway, err error) {
461	if tracing.IsEnabled() {
462		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Get")
463		defer func() {
464			sc := -1
465			if result.Response.Response != nil {
466				sc = result.Response.Response.StatusCode
467			}
468			tracing.EndSpan(ctx, sc, err)
469		}()
470	}
471	req, err := client.GetPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
472	if err != nil {
473		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", nil, "Failure preparing request")
474		return
475	}
476
477	resp, err := client.GetSender(req)
478	if err != nil {
479		result.Response = autorest.Response{Response: resp}
480		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", resp, "Failure sending request")
481		return
482	}
483
484	result, err = client.GetResponder(resp)
485	if err != nil {
486		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", resp, "Failure responding to request")
487		return
488	}
489
490	return
491}
492
493// GetPreparer prepares the Get request.
494func (client VirtualNetworkGatewaysClient) GetPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
495	pathParameters := map[string]interface{}{
496		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
497		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
498		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
499	}
500
501	const APIVersion = "2018-10-01"
502	queryParameters := map[string]interface{}{
503		"api-version": APIVersion,
504	}
505
506	preparer := autorest.CreatePreparer(
507		autorest.AsGet(),
508		autorest.WithBaseURL(client.BaseURI),
509		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
510		autorest.WithQueryParameters(queryParameters))
511	return preparer.Prepare((&http.Request{}).WithContext(ctx))
512}
513
514// GetSender sends the Get request. The method will close the
515// http.Response Body if it receives an error.
516func (client VirtualNetworkGatewaysClient) GetSender(req *http.Request) (*http.Response, error) {
517	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
518}
519
520// GetResponder handles the response to the Get request. The method always
521// closes the http.Response Body.
522func (client VirtualNetworkGatewaysClient) GetResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
523	err = autorest.Respond(
524		resp,
525		azure.WithErrorUnlessStatusCode(http.StatusOK),
526		autorest.ByUnmarshallingJSON(&result),
527		autorest.ByClosing())
528	result.Response = autorest.Response{Response: resp}
529	return
530}
531
532// GetAdvertisedRoutes this operation retrieves a list of routes the virtual network gateway is advertising to the
533// specified peer.
534// Parameters:
535// resourceGroupName - the name of the resource group.
536// virtualNetworkGatewayName - the name of the virtual network gateway.
537// peer - the IP address of the peer
538func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutes(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (result VirtualNetworkGatewaysGetAdvertisedRoutesFuture, err error) {
539	if tracing.IsEnabled() {
540		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetAdvertisedRoutes")
541		defer func() {
542			sc := -1
543			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
544				sc = result.FutureAPI.Response().StatusCode
545			}
546			tracing.EndSpan(ctx, sc, err)
547		}()
548	}
549	req, err := client.GetAdvertisedRoutesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, peer)
550	if err != nil {
551		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetAdvertisedRoutes", nil, "Failure preparing request")
552		return
553	}
554
555	result, err = client.GetAdvertisedRoutesSender(req)
556	if err != nil {
557		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetAdvertisedRoutes", nil, "Failure sending request")
558		return
559	}
560
561	return
562}
563
564// GetAdvertisedRoutesPreparer prepares the GetAdvertisedRoutes request.
565func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (*http.Request, error) {
566	pathParameters := map[string]interface{}{
567		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
568		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
569		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
570	}
571
572	const APIVersion = "2018-10-01"
573	queryParameters := map[string]interface{}{
574		"api-version": APIVersion,
575		"peer":        autorest.Encode("query", peer),
576	}
577
578	preparer := autorest.CreatePreparer(
579		autorest.AsPost(),
580		autorest.WithBaseURL(client.BaseURI),
581		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getAdvertisedRoutes", pathParameters),
582		autorest.WithQueryParameters(queryParameters))
583	return preparer.Prepare((&http.Request{}).WithContext(ctx))
584}
585
586// GetAdvertisedRoutesSender sends the GetAdvertisedRoutes request. The method will close the
587// http.Response Body if it receives an error.
588func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesSender(req *http.Request) (future VirtualNetworkGatewaysGetAdvertisedRoutesFuture, err error) {
589	var resp *http.Response
590	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
591	if err != nil {
592		return
593	}
594	var azf azure.Future
595	azf, err = azure.NewFutureFromResponse(resp)
596	future.FutureAPI = &azf
597	future.Result = func(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
598		var done bool
599		done, err = future.DoneWithContext(context.Background(), client)
600		if err != nil {
601			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
602			return
603		}
604		if !done {
605			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
606			return
607		}
608		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
609		grlr.Response.Response, err = future.GetResult(sender)
610		if grlr.Response.Response == nil && err == nil {
611			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", nil, "received nil response and error")
612		}
613		if err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
614			grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
615			if err != nil {
616				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
617			}
618		}
619		return
620	}
621	return
622}
623
624// GetAdvertisedRoutesResponder handles the response to the GetAdvertisedRoutes request. The method always
625// closes the http.Response Body.
626func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesResponder(resp *http.Response) (result GatewayRouteListResult, err error) {
627	err = autorest.Respond(
628		resp,
629		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
630		autorest.ByUnmarshallingJSON(&result),
631		autorest.ByClosing())
632	result.Response = autorest.Response{Response: resp}
633	return
634}
635
636// GetBgpPeerStatus the GetBgpPeerStatus operation retrieves the status of all BGP peers.
637// Parameters:
638// resourceGroupName - the name of the resource group.
639// virtualNetworkGatewayName - the name of the virtual network gateway.
640// peer - the IP address of the peer to retrieve the status of.
641func (client VirtualNetworkGatewaysClient) GetBgpPeerStatus(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (result VirtualNetworkGatewaysGetBgpPeerStatusFuture, err error) {
642	if tracing.IsEnabled() {
643		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetBgpPeerStatus")
644		defer func() {
645			sc := -1
646			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
647				sc = result.FutureAPI.Response().StatusCode
648			}
649			tracing.EndSpan(ctx, sc, err)
650		}()
651	}
652	req, err := client.GetBgpPeerStatusPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, peer)
653	if err != nil {
654		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetBgpPeerStatus", nil, "Failure preparing request")
655		return
656	}
657
658	result, err = client.GetBgpPeerStatusSender(req)
659	if err != nil {
660		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetBgpPeerStatus", nil, "Failure sending request")
661		return
662	}
663
664	return
665}
666
667// GetBgpPeerStatusPreparer prepares the GetBgpPeerStatus request.
668func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, peer string) (*http.Request, error) {
669	pathParameters := map[string]interface{}{
670		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
671		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
672		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
673	}
674
675	const APIVersion = "2018-10-01"
676	queryParameters := map[string]interface{}{
677		"api-version": APIVersion,
678	}
679	if len(peer) > 0 {
680		queryParameters["peer"] = autorest.Encode("query", peer)
681	}
682
683	preparer := autorest.CreatePreparer(
684		autorest.AsPost(),
685		autorest.WithBaseURL(client.BaseURI),
686		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getBgpPeerStatus", pathParameters),
687		autorest.WithQueryParameters(queryParameters))
688	return preparer.Prepare((&http.Request{}).WithContext(ctx))
689}
690
691// GetBgpPeerStatusSender sends the GetBgpPeerStatus request. The method will close the
692// http.Response Body if it receives an error.
693func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusSender(req *http.Request) (future VirtualNetworkGatewaysGetBgpPeerStatusFuture, err error) {
694	var resp *http.Response
695	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
696	if err != nil {
697		return
698	}
699	var azf azure.Future
700	azf, err = azure.NewFutureFromResponse(resp)
701	future.FutureAPI = &azf
702	future.Result = func(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
703		var done bool
704		done, err = future.DoneWithContext(context.Background(), client)
705		if err != nil {
706			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
707			return
708		}
709		if !done {
710			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
711			return
712		}
713		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
714		bpslr.Response.Response, err = future.GetResult(sender)
715		if bpslr.Response.Response == nil && err == nil {
716			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", nil, "received nil response and error")
717		}
718		if err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
719			bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
720			if err != nil {
721				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
722			}
723		}
724		return
725	}
726	return
727}
728
729// GetBgpPeerStatusResponder handles the response to the GetBgpPeerStatus request. The method always
730// closes the http.Response Body.
731func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusResponder(resp *http.Response) (result BgpPeerStatusListResult, err error) {
732	err = autorest.Respond(
733		resp,
734		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
735		autorest.ByUnmarshallingJSON(&result),
736		autorest.ByClosing())
737	result.Response = autorest.Response{Response: resp}
738	return
739}
740
741// GetLearnedRoutes this operation retrieves a list of routes the virtual network gateway has learned, including routes
742// learned from BGP peers.
743// Parameters:
744// resourceGroupName - the name of the resource group.
745// virtualNetworkGatewayName - the name of the virtual network gateway.
746func (client VirtualNetworkGatewaysClient) GetLearnedRoutes(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetLearnedRoutesFuture, err error) {
747	if tracing.IsEnabled() {
748		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetLearnedRoutes")
749		defer func() {
750			sc := -1
751			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
752				sc = result.FutureAPI.Response().StatusCode
753			}
754			tracing.EndSpan(ctx, sc, err)
755		}()
756	}
757	req, err := client.GetLearnedRoutesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
758	if err != nil {
759		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetLearnedRoutes", nil, "Failure preparing request")
760		return
761	}
762
763	result, err = client.GetLearnedRoutesSender(req)
764	if err != nil {
765		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetLearnedRoutes", nil, "Failure sending request")
766		return
767	}
768
769	return
770}
771
772// GetLearnedRoutesPreparer prepares the GetLearnedRoutes request.
773func (client VirtualNetworkGatewaysClient) GetLearnedRoutesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
774	pathParameters := map[string]interface{}{
775		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
776		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
777		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
778	}
779
780	const APIVersion = "2018-10-01"
781	queryParameters := map[string]interface{}{
782		"api-version": APIVersion,
783	}
784
785	preparer := autorest.CreatePreparer(
786		autorest.AsPost(),
787		autorest.WithBaseURL(client.BaseURI),
788		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getLearnedRoutes", pathParameters),
789		autorest.WithQueryParameters(queryParameters))
790	return preparer.Prepare((&http.Request{}).WithContext(ctx))
791}
792
793// GetLearnedRoutesSender sends the GetLearnedRoutes request. The method will close the
794// http.Response Body if it receives an error.
795func (client VirtualNetworkGatewaysClient) GetLearnedRoutesSender(req *http.Request) (future VirtualNetworkGatewaysGetLearnedRoutesFuture, err error) {
796	var resp *http.Response
797	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
798	if err != nil {
799		return
800	}
801	var azf azure.Future
802	azf, err = azure.NewFutureFromResponse(resp)
803	future.FutureAPI = &azf
804	future.Result = func(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
805		var done bool
806		done, err = future.DoneWithContext(context.Background(), client)
807		if err != nil {
808			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
809			return
810		}
811		if !done {
812			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
813			return
814		}
815		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
816		grlr.Response.Response, err = future.GetResult(sender)
817		if grlr.Response.Response == nil && err == nil {
818			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", nil, "received nil response and error")
819		}
820		if err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
821			grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
822			if err != nil {
823				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
824			}
825		}
826		return
827	}
828	return
829}
830
831// GetLearnedRoutesResponder handles the response to the GetLearnedRoutes request. The method always
832// closes the http.Response Body.
833func (client VirtualNetworkGatewaysClient) GetLearnedRoutesResponder(resp *http.Response) (result GatewayRouteListResult, err error) {
834	err = autorest.Respond(
835		resp,
836		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
837		autorest.ByUnmarshallingJSON(&result),
838		autorest.ByClosing())
839	result.Response = autorest.Response{Response: resp}
840	return
841}
842
843// GetVpnclientIpsecParameters the Get VpnclientIpsecParameters operation retrieves information about the vpnclient
844// ipsec policy for P2S client of virtual network gateway in the specified resource group through Network resource
845// provider.
846// Parameters:
847// resourceGroupName - the name of the resource group.
848// virtualNetworkGatewayName - the virtual network gateway name.
849func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParameters(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture, err error) {
850	if tracing.IsEnabled() {
851		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetVpnclientIpsecParameters")
852		defer func() {
853			sc := -1
854			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
855				sc = result.FutureAPI.Response().StatusCode
856			}
857			tracing.EndSpan(ctx, sc, err)
858		}()
859	}
860	req, err := client.GetVpnclientIpsecParametersPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
861	if err != nil {
862		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnclientIpsecParameters", nil, "Failure preparing request")
863		return
864	}
865
866	result, err = client.GetVpnclientIpsecParametersSender(req)
867	if err != nil {
868		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnclientIpsecParameters", nil, "Failure sending request")
869		return
870	}
871
872	return
873}
874
875// GetVpnclientIpsecParametersPreparer prepares the GetVpnclientIpsecParameters request.
876func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
877	pathParameters := map[string]interface{}{
878		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
879		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
880		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
881	}
882
883	const APIVersion = "2018-10-01"
884	queryParameters := map[string]interface{}{
885		"api-version": APIVersion,
886	}
887
888	preparer := autorest.CreatePreparer(
889		autorest.AsPost(),
890		autorest.WithBaseURL(client.BaseURI),
891		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getvpnclientipsecparameters", pathParameters),
892		autorest.WithQueryParameters(queryParameters))
893	return preparer.Prepare((&http.Request{}).WithContext(ctx))
894}
895
896// GetVpnclientIpsecParametersSender sends the GetVpnclientIpsecParameters request. The method will close the
897// http.Response Body if it receives an error.
898func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersSender(req *http.Request) (future VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture, err error) {
899	var resp *http.Response
900	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
901	if err != nil {
902		return
903	}
904	var azf azure.Future
905	azf, err = azure.NewFutureFromResponse(resp)
906	future.FutureAPI = &azf
907	future.Result = func(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
908		var done bool
909		done, err = future.DoneWithContext(context.Background(), client)
910		if err != nil {
911			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
912			return
913		}
914		if !done {
915			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
916			return
917		}
918		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
919		vcipp.Response.Response, err = future.GetResult(sender)
920		if vcipp.Response.Response == nil && err == nil {
921			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", nil, "received nil response and error")
922		}
923		if err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
924			vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
925			if err != nil {
926				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
927			}
928		}
929		return
930	}
931	return
932}
933
934// GetVpnclientIpsecParametersResponder handles the response to the GetVpnclientIpsecParameters request. The method always
935// closes the http.Response Body.
936func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersResponder(resp *http.Response) (result VpnClientIPsecParameters, err error) {
937	err = autorest.Respond(
938		resp,
939		azure.WithErrorUnlessStatusCode(http.StatusOK),
940		autorest.ByUnmarshallingJSON(&result),
941		autorest.ByClosing())
942	result.Response = autorest.Response{Response: resp}
943	return
944}
945
946// GetVpnProfilePackageURL gets pre-generated VPN profile for P2S client of the virtual network gateway in the
947// specified resource group. The profile needs to be generated first using generateVpnProfile.
948// Parameters:
949// resourceGroupName - the name of the resource group.
950// virtualNetworkGatewayName - the name of the virtual network gateway.
951func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURL(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysGetVpnProfilePackageURLFuture, err error) {
952	if tracing.IsEnabled() {
953		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.GetVpnProfilePackageURL")
954		defer func() {
955			sc := -1
956			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
957				sc = result.FutureAPI.Response().StatusCode
958			}
959			tracing.EndSpan(ctx, sc, err)
960		}()
961	}
962	req, err := client.GetVpnProfilePackageURLPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
963	if err != nil {
964		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnProfilePackageURL", nil, "Failure preparing request")
965		return
966	}
967
968	result, err = client.GetVpnProfilePackageURLSender(req)
969	if err != nil {
970		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "GetVpnProfilePackageURL", nil, "Failure sending request")
971		return
972	}
973
974	return
975}
976
977// GetVpnProfilePackageURLPreparer prepares the GetVpnProfilePackageURL request.
978func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
979	pathParameters := map[string]interface{}{
980		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
981		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
982		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
983	}
984
985	const APIVersion = "2018-10-01"
986	queryParameters := map[string]interface{}{
987		"api-version": APIVersion,
988	}
989
990	preparer := autorest.CreatePreparer(
991		autorest.AsPost(),
992		autorest.WithBaseURL(client.BaseURI),
993		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/getvpnprofilepackageurl", pathParameters),
994		autorest.WithQueryParameters(queryParameters))
995	return preparer.Prepare((&http.Request{}).WithContext(ctx))
996}
997
998// GetVpnProfilePackageURLSender sends the GetVpnProfilePackageURL request. The method will close the
999// http.Response Body if it receives an error.
1000func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLSender(req *http.Request) (future VirtualNetworkGatewaysGetVpnProfilePackageURLFuture, err error) {
1001	var resp *http.Response
1002	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1003	if err != nil {
1004		return
1005	}
1006	var azf azure.Future
1007	azf, err = azure.NewFutureFromResponse(resp)
1008	future.FutureAPI = &azf
1009	future.Result = func(client VirtualNetworkGatewaysClient) (s String, err error) {
1010		var done bool
1011		done, err = future.DoneWithContext(context.Background(), client)
1012		if err != nil {
1013			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
1014			return
1015		}
1016		if !done {
1017			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
1018			return
1019		}
1020		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1021		s.Response.Response, err = future.GetResult(sender)
1022		if s.Response.Response == nil && err == nil {
1023			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", nil, "received nil response and error")
1024		}
1025		if err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
1026			s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
1027			if err != nil {
1028				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
1029			}
1030		}
1031		return
1032	}
1033	return
1034}
1035
1036// GetVpnProfilePackageURLResponder handles the response to the GetVpnProfilePackageURL request. The method always
1037// closes the http.Response Body.
1038func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLResponder(resp *http.Response) (result String, err error) {
1039	err = autorest.Respond(
1040		resp,
1041		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1042		autorest.ByUnmarshallingJSON(&result),
1043		autorest.ByClosing())
1044	result.Response = autorest.Response{Response: resp}
1045	return
1046}
1047
1048// List gets all virtual network gateways by resource group.
1049// Parameters:
1050// resourceGroupName - the name of the resource group.
1051func (client VirtualNetworkGatewaysClient) List(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayListResultPage, err error) {
1052	if tracing.IsEnabled() {
1053		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.List")
1054		defer func() {
1055			sc := -1
1056			if result.vnglr.Response.Response != nil {
1057				sc = result.vnglr.Response.Response.StatusCode
1058			}
1059			tracing.EndSpan(ctx, sc, err)
1060		}()
1061	}
1062	result.fn = client.listNextResults
1063	req, err := client.ListPreparer(ctx, resourceGroupName)
1064	if err != nil {
1065		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "List", nil, "Failure preparing request")
1066		return
1067	}
1068
1069	resp, err := client.ListSender(req)
1070	if err != nil {
1071		result.vnglr.Response = autorest.Response{Response: resp}
1072		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "List", resp, "Failure sending request")
1073		return
1074	}
1075
1076	result.vnglr, err = client.ListResponder(resp)
1077	if err != nil {
1078		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "List", resp, "Failure responding to request")
1079		return
1080	}
1081	if result.vnglr.hasNextLink() && result.vnglr.IsEmpty() {
1082		err = result.NextWithContext(ctx)
1083		return
1084	}
1085
1086	return
1087}
1088
1089// ListPreparer prepares the List request.
1090func (client VirtualNetworkGatewaysClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
1091	pathParameters := map[string]interface{}{
1092		"resourceGroupName": autorest.Encode("path", resourceGroupName),
1093		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
1094	}
1095
1096	const APIVersion = "2018-10-01"
1097	queryParameters := map[string]interface{}{
1098		"api-version": APIVersion,
1099	}
1100
1101	preparer := autorest.CreatePreparer(
1102		autorest.AsGet(),
1103		autorest.WithBaseURL(client.BaseURI),
1104		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways", pathParameters),
1105		autorest.WithQueryParameters(queryParameters))
1106	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1107}
1108
1109// ListSender sends the List request. The method will close the
1110// http.Response Body if it receives an error.
1111func (client VirtualNetworkGatewaysClient) ListSender(req *http.Request) (*http.Response, error) {
1112	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1113}
1114
1115// ListResponder handles the response to the List request. The method always
1116// closes the http.Response Body.
1117func (client VirtualNetworkGatewaysClient) ListResponder(resp *http.Response) (result VirtualNetworkGatewayListResult, err error) {
1118	err = autorest.Respond(
1119		resp,
1120		azure.WithErrorUnlessStatusCode(http.StatusOK),
1121		autorest.ByUnmarshallingJSON(&result),
1122		autorest.ByClosing())
1123	result.Response = autorest.Response{Response: resp}
1124	return
1125}
1126
1127// listNextResults retrieves the next set of results, if any.
1128func (client VirtualNetworkGatewaysClient) listNextResults(ctx context.Context, lastResults VirtualNetworkGatewayListResult) (result VirtualNetworkGatewayListResult, err error) {
1129	req, err := lastResults.virtualNetworkGatewayListResultPreparer(ctx)
1130	if err != nil {
1131		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", nil, "Failure preparing next results request")
1132	}
1133	if req == nil {
1134		return
1135	}
1136	resp, err := client.ListSender(req)
1137	if err != nil {
1138		result.Response = autorest.Response{Response: resp}
1139		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", resp, "Failure sending next results request")
1140	}
1141	result, err = client.ListResponder(resp)
1142	if err != nil {
1143		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", resp, "Failure responding to next results request")
1144	}
1145	return
1146}
1147
1148// ListComplete enumerates all values, automatically crossing page boundaries as required.
1149func (client VirtualNetworkGatewaysClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayListResultIterator, err error) {
1150	if tracing.IsEnabled() {
1151		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.List")
1152		defer func() {
1153			sc := -1
1154			if result.Response().Response.Response != nil {
1155				sc = result.page.Response().Response.Response.StatusCode
1156			}
1157			tracing.EndSpan(ctx, sc, err)
1158		}()
1159	}
1160	result.page, err = client.List(ctx, resourceGroupName)
1161	return
1162}
1163
1164// ListConnections gets all the connections in a virtual network gateway.
1165// Parameters:
1166// resourceGroupName - the name of the resource group.
1167// virtualNetworkGatewayName - the name of the virtual network gateway.
1168func (client VirtualNetworkGatewaysClient) ListConnections(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewayListConnectionsResultPage, err error) {
1169	if tracing.IsEnabled() {
1170		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.ListConnections")
1171		defer func() {
1172			sc := -1
1173			if result.vnglcr.Response.Response != nil {
1174				sc = result.vnglcr.Response.Response.StatusCode
1175			}
1176			tracing.EndSpan(ctx, sc, err)
1177		}()
1178	}
1179	result.fn = client.listConnectionsNextResults
1180	req, err := client.ListConnectionsPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1181	if err != nil {
1182		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ListConnections", nil, "Failure preparing request")
1183		return
1184	}
1185
1186	resp, err := client.ListConnectionsSender(req)
1187	if err != nil {
1188		result.vnglcr.Response = autorest.Response{Response: resp}
1189		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ListConnections", resp, "Failure sending request")
1190		return
1191	}
1192
1193	result.vnglcr, err = client.ListConnectionsResponder(resp)
1194	if err != nil {
1195		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ListConnections", resp, "Failure responding to request")
1196		return
1197	}
1198	if result.vnglcr.hasNextLink() && result.vnglcr.IsEmpty() {
1199		err = result.NextWithContext(ctx)
1200		return
1201	}
1202
1203	return
1204}
1205
1206// ListConnectionsPreparer prepares the ListConnections request.
1207func (client VirtualNetworkGatewaysClient) ListConnectionsPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1208	pathParameters := map[string]interface{}{
1209		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1210		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1211		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1212	}
1213
1214	const APIVersion = "2018-10-01"
1215	queryParameters := map[string]interface{}{
1216		"api-version": APIVersion,
1217	}
1218
1219	preparer := autorest.CreatePreparer(
1220		autorest.AsGet(),
1221		autorest.WithBaseURL(client.BaseURI),
1222		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/connections", pathParameters),
1223		autorest.WithQueryParameters(queryParameters))
1224	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1225}
1226
1227// ListConnectionsSender sends the ListConnections request. The method will close the
1228// http.Response Body if it receives an error.
1229func (client VirtualNetworkGatewaysClient) ListConnectionsSender(req *http.Request) (*http.Response, error) {
1230	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1231}
1232
1233// ListConnectionsResponder handles the response to the ListConnections request. The method always
1234// closes the http.Response Body.
1235func (client VirtualNetworkGatewaysClient) ListConnectionsResponder(resp *http.Response) (result VirtualNetworkGatewayListConnectionsResult, err error) {
1236	err = autorest.Respond(
1237		resp,
1238		azure.WithErrorUnlessStatusCode(http.StatusOK),
1239		autorest.ByUnmarshallingJSON(&result),
1240		autorest.ByClosing())
1241	result.Response = autorest.Response{Response: resp}
1242	return
1243}
1244
1245// listConnectionsNextResults retrieves the next set of results, if any.
1246func (client VirtualNetworkGatewaysClient) listConnectionsNextResults(ctx context.Context, lastResults VirtualNetworkGatewayListConnectionsResult) (result VirtualNetworkGatewayListConnectionsResult, err error) {
1247	req, err := lastResults.virtualNetworkGatewayListConnectionsResultPreparer(ctx)
1248	if err != nil {
1249		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listConnectionsNextResults", nil, "Failure preparing next results request")
1250	}
1251	if req == nil {
1252		return
1253	}
1254	resp, err := client.ListConnectionsSender(req)
1255	if err != nil {
1256		result.Response = autorest.Response{Response: resp}
1257		return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listConnectionsNextResults", resp, "Failure sending next results request")
1258	}
1259	result, err = client.ListConnectionsResponder(resp)
1260	if err != nil {
1261		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listConnectionsNextResults", resp, "Failure responding to next results request")
1262	}
1263	return
1264}
1265
1266// ListConnectionsComplete enumerates all values, automatically crossing page boundaries as required.
1267func (client VirtualNetworkGatewaysClient) ListConnectionsComplete(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewayListConnectionsResultIterator, err error) {
1268	if tracing.IsEnabled() {
1269		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.ListConnections")
1270		defer func() {
1271			sc := -1
1272			if result.Response().Response.Response != nil {
1273				sc = result.page.Response().Response.Response.StatusCode
1274			}
1275			tracing.EndSpan(ctx, sc, err)
1276		}()
1277	}
1278	result.page, err = client.ListConnections(ctx, resourceGroupName, virtualNetworkGatewayName)
1279	return
1280}
1281
1282// Reset resets the primary of the virtual network gateway in the specified resource group.
1283// Parameters:
1284// resourceGroupName - the name of the resource group.
1285// virtualNetworkGatewayName - the name of the virtual network gateway.
1286// gatewayVip - virtual network gateway vip address supplied to the begin reset of the active-active feature
1287// enabled gateway.
1288func (client VirtualNetworkGatewaysClient) Reset(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, gatewayVip string) (result VirtualNetworkGatewaysResetFuture, err error) {
1289	if tracing.IsEnabled() {
1290		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Reset")
1291		defer func() {
1292			sc := -1
1293			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1294				sc = result.FutureAPI.Response().StatusCode
1295			}
1296			tracing.EndSpan(ctx, sc, err)
1297		}()
1298	}
1299	req, err := client.ResetPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, gatewayVip)
1300	if err != nil {
1301		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Reset", nil, "Failure preparing request")
1302		return
1303	}
1304
1305	result, err = client.ResetSender(req)
1306	if err != nil {
1307		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Reset", nil, "Failure sending request")
1308		return
1309	}
1310
1311	return
1312}
1313
1314// ResetPreparer prepares the Reset request.
1315func (client VirtualNetworkGatewaysClient) ResetPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, gatewayVip string) (*http.Request, error) {
1316	pathParameters := map[string]interface{}{
1317		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1318		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1319		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1320	}
1321
1322	const APIVersion = "2018-10-01"
1323	queryParameters := map[string]interface{}{
1324		"api-version": APIVersion,
1325	}
1326	if len(gatewayVip) > 0 {
1327		queryParameters["gatewayVip"] = autorest.Encode("query", gatewayVip)
1328	}
1329
1330	preparer := autorest.CreatePreparer(
1331		autorest.AsPost(),
1332		autorest.WithBaseURL(client.BaseURI),
1333		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/reset", pathParameters),
1334		autorest.WithQueryParameters(queryParameters))
1335	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1336}
1337
1338// ResetSender sends the Reset request. The method will close the
1339// http.Response Body if it receives an error.
1340func (client VirtualNetworkGatewaysClient) ResetSender(req *http.Request) (future VirtualNetworkGatewaysResetFuture, err error) {
1341	var resp *http.Response
1342	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1343	if err != nil {
1344		return
1345	}
1346	var azf azure.Future
1347	azf, err = azure.NewFutureFromResponse(resp)
1348	future.FutureAPI = &azf
1349	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
1350		var done bool
1351		done, err = future.DoneWithContext(context.Background(), client)
1352		if err != nil {
1353			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
1354			return
1355		}
1356		if !done {
1357			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
1358			return
1359		}
1360		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1361		vng.Response.Response, err = future.GetResult(sender)
1362		if vng.Response.Response == nil && err == nil {
1363			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", nil, "received nil response and error")
1364		}
1365		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
1366			vng, err = client.ResetResponder(vng.Response.Response)
1367			if err != nil {
1368				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
1369			}
1370		}
1371		return
1372	}
1373	return
1374}
1375
1376// ResetResponder handles the response to the Reset request. The method always
1377// closes the http.Response Body.
1378func (client VirtualNetworkGatewaysClient) ResetResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
1379	err = autorest.Respond(
1380		resp,
1381		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1382		autorest.ByUnmarshallingJSON(&result),
1383		autorest.ByClosing())
1384	result.Response = autorest.Response{Response: resp}
1385	return
1386}
1387
1388// ResetVpnClientSharedKey resets the VPN client shared key of the virtual network gateway in the specified resource
1389// group.
1390// Parameters:
1391// resourceGroupName - the name of the resource group.
1392// virtualNetworkGatewayName - the name of the virtual network gateway.
1393func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKey(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysResetVpnClientSharedKeyFuture, err error) {
1394	if tracing.IsEnabled() {
1395		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.ResetVpnClientSharedKey")
1396		defer func() {
1397			sc := -1
1398			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1399				sc = result.FutureAPI.Response().StatusCode
1400			}
1401			tracing.EndSpan(ctx, sc, err)
1402		}()
1403	}
1404	req, err := client.ResetVpnClientSharedKeyPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1405	if err != nil {
1406		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ResetVpnClientSharedKey", nil, "Failure preparing request")
1407		return
1408	}
1409
1410	result, err = client.ResetVpnClientSharedKeySender(req)
1411	if err != nil {
1412		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "ResetVpnClientSharedKey", nil, "Failure sending request")
1413		return
1414	}
1415
1416	return
1417}
1418
1419// ResetVpnClientSharedKeyPreparer prepares the ResetVpnClientSharedKey request.
1420func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeyPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1421	pathParameters := map[string]interface{}{
1422		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1423		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1424		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1425	}
1426
1427	const APIVersion = "2018-10-01"
1428	queryParameters := map[string]interface{}{
1429		"api-version": APIVersion,
1430	}
1431
1432	preparer := autorest.CreatePreparer(
1433		autorest.AsPost(),
1434		autorest.WithBaseURL(client.BaseURI),
1435		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/resetvpnclientsharedkey", pathParameters),
1436		autorest.WithQueryParameters(queryParameters))
1437	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1438}
1439
1440// ResetVpnClientSharedKeySender sends the ResetVpnClientSharedKey request. The method will close the
1441// http.Response Body if it receives an error.
1442func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeySender(req *http.Request) (future VirtualNetworkGatewaysResetVpnClientSharedKeyFuture, err error) {
1443	var resp *http.Response
1444	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1445	if err != nil {
1446		return
1447	}
1448	var azf azure.Future
1449	azf, err = azure.NewFutureFromResponse(resp)
1450	future.FutureAPI = &azf
1451	future.Result = func(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
1452		var done bool
1453		done, err = future.DoneWithContext(context.Background(), client)
1454		if err != nil {
1455			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
1456			return
1457		}
1458		if !done {
1459			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
1460			return
1461		}
1462		ar.Response = future.Response()
1463		return
1464	}
1465	return
1466}
1467
1468// ResetVpnClientSharedKeyResponder handles the response to the ResetVpnClientSharedKey request. The method always
1469// closes the http.Response Body.
1470func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeyResponder(resp *http.Response) (result autorest.Response, err error) {
1471	err = autorest.Respond(
1472		resp,
1473		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1474		autorest.ByClosing())
1475	result.Response = resp
1476	return
1477}
1478
1479// SetVpnclientIpsecParameters the Set VpnclientIpsecParameters operation sets the vpnclient ipsec policy for P2S
1480// client of virtual network gateway in the specified resource group through Network resource provider.
1481// Parameters:
1482// resourceGroupName - the name of the resource group.
1483// virtualNetworkGatewayName - the name of the virtual network gateway.
1484// vpnclientIpsecParams - parameters supplied to the Begin Set vpnclient ipsec parameters of Virtual Network
1485// Gateway P2S client operation through Network resource provider.
1486func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParameters(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, vpnclientIpsecParams VpnClientIPsecParameters) (result VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture, err error) {
1487	if tracing.IsEnabled() {
1488		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.SetVpnclientIpsecParameters")
1489		defer func() {
1490			sc := -1
1491			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1492				sc = result.FutureAPI.Response().StatusCode
1493			}
1494			tracing.EndSpan(ctx, sc, err)
1495		}()
1496	}
1497	if err := validation.Validate([]validation.Validation{
1498		{TargetValue: vpnclientIpsecParams,
1499			Constraints: []validation.Constraint{{Target: "vpnclientIpsecParams.SaLifeTimeSeconds", Name: validation.Null, Rule: true, Chain: nil},
1500				{Target: "vpnclientIpsecParams.SaDataSizeKilobytes", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
1501		return result, validation.NewError("network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", err.Error())
1502	}
1503
1504	req, err := client.SetVpnclientIpsecParametersPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, vpnclientIpsecParams)
1505	if err != nil {
1506		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", nil, "Failure preparing request")
1507		return
1508	}
1509
1510	result, err = client.SetVpnclientIpsecParametersSender(req)
1511	if err != nil {
1512		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", nil, "Failure sending request")
1513		return
1514	}
1515
1516	return
1517}
1518
1519// SetVpnclientIpsecParametersPreparer prepares the SetVpnclientIpsecParameters request.
1520func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, vpnclientIpsecParams VpnClientIPsecParameters) (*http.Request, error) {
1521	pathParameters := map[string]interface{}{
1522		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1523		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1524		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1525	}
1526
1527	const APIVersion = "2018-10-01"
1528	queryParameters := map[string]interface{}{
1529		"api-version": APIVersion,
1530	}
1531
1532	preparer := autorest.CreatePreparer(
1533		autorest.AsContentType("application/json; charset=utf-8"),
1534		autorest.AsPost(),
1535		autorest.WithBaseURL(client.BaseURI),
1536		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/setvpnclientipsecparameters", pathParameters),
1537		autorest.WithJSON(vpnclientIpsecParams),
1538		autorest.WithQueryParameters(queryParameters))
1539	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1540}
1541
1542// SetVpnclientIpsecParametersSender sends the SetVpnclientIpsecParameters request. The method will close the
1543// http.Response Body if it receives an error.
1544func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersSender(req *http.Request) (future VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture, err error) {
1545	var resp *http.Response
1546	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1547	if err != nil {
1548		return
1549	}
1550	var azf azure.Future
1551	azf, err = azure.NewFutureFromResponse(resp)
1552	future.FutureAPI = &azf
1553	future.Result = func(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
1554		var done bool
1555		done, err = future.DoneWithContext(context.Background(), client)
1556		if err != nil {
1557			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
1558			return
1559		}
1560		if !done {
1561			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
1562			return
1563		}
1564		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1565		vcipp.Response.Response, err = future.GetResult(sender)
1566		if vcipp.Response.Response == nil && err == nil {
1567			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", nil, "received nil response and error")
1568		}
1569		if err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
1570			vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
1571			if err != nil {
1572				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
1573			}
1574		}
1575		return
1576	}
1577	return
1578}
1579
1580// SetVpnclientIpsecParametersResponder handles the response to the SetVpnclientIpsecParameters request. The method always
1581// closes the http.Response Body.
1582func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersResponder(resp *http.Response) (result VpnClientIPsecParameters, err error) {
1583	err = autorest.Respond(
1584		resp,
1585		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1586		autorest.ByUnmarshallingJSON(&result),
1587		autorest.ByClosing())
1588	result.Response = autorest.Response{Response: resp}
1589	return
1590}
1591
1592// SupportedVpnDevices gets a xml format representation for supported vpn devices.
1593// Parameters:
1594// resourceGroupName - the name of the resource group.
1595// virtualNetworkGatewayName - the name of the virtual network gateway.
1596func (client VirtualNetworkGatewaysClient) SupportedVpnDevices(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result String, err error) {
1597	if tracing.IsEnabled() {
1598		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.SupportedVpnDevices")
1599		defer func() {
1600			sc := -1
1601			if result.Response.Response != nil {
1602				sc = result.Response.Response.StatusCode
1603			}
1604			tracing.EndSpan(ctx, sc, err)
1605		}()
1606	}
1607	req, err := client.SupportedVpnDevicesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1608	if err != nil {
1609		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", nil, "Failure preparing request")
1610		return
1611	}
1612
1613	resp, err := client.SupportedVpnDevicesSender(req)
1614	if err != nil {
1615		result.Response = autorest.Response{Response: resp}
1616		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", resp, "Failure sending request")
1617		return
1618	}
1619
1620	result, err = client.SupportedVpnDevicesResponder(resp)
1621	if err != nil {
1622		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", resp, "Failure responding to request")
1623		return
1624	}
1625
1626	return
1627}
1628
1629// SupportedVpnDevicesPreparer prepares the SupportedVpnDevices request.
1630func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1631	pathParameters := map[string]interface{}{
1632		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1633		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1634		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1635	}
1636
1637	const APIVersion = "2018-10-01"
1638	queryParameters := map[string]interface{}{
1639		"api-version": APIVersion,
1640	}
1641
1642	preparer := autorest.CreatePreparer(
1643		autorest.AsPost(),
1644		autorest.WithBaseURL(client.BaseURI),
1645		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/supportedvpndevices", pathParameters),
1646		autorest.WithQueryParameters(queryParameters))
1647	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1648}
1649
1650// SupportedVpnDevicesSender sends the SupportedVpnDevices request. The method will close the
1651// http.Response Body if it receives an error.
1652func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesSender(req *http.Request) (*http.Response, error) {
1653	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1654}
1655
1656// SupportedVpnDevicesResponder handles the response to the SupportedVpnDevices request. The method always
1657// closes the http.Response Body.
1658func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesResponder(resp *http.Response) (result String, err error) {
1659	err = autorest.Respond(
1660		resp,
1661		azure.WithErrorUnlessStatusCode(http.StatusOK),
1662		autorest.ByUnmarshallingJSON(&result.Value),
1663		autorest.ByClosing())
1664	result.Response = autorest.Response{Response: resp}
1665	return
1666}
1667
1668// UpdateTags updates a virtual network gateway tags.
1669// Parameters:
1670// resourceGroupName - the name of the resource group.
1671// virtualNetworkGatewayName - the name of the virtual network gateway.
1672// parameters - parameters supplied to update virtual network gateway tags.
1673func (client VirtualNetworkGatewaysClient) UpdateTags(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters TagsObject) (result VirtualNetworkGatewaysUpdateTagsFuture, err error) {
1674	if tracing.IsEnabled() {
1675		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.UpdateTags")
1676		defer func() {
1677			sc := -1
1678			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1679				sc = result.FutureAPI.Response().StatusCode
1680			}
1681			tracing.EndSpan(ctx, sc, err)
1682		}()
1683	}
1684	req, err := client.UpdateTagsPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
1685	if err != nil {
1686		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "UpdateTags", nil, "Failure preparing request")
1687		return
1688	}
1689
1690	result, err = client.UpdateTagsSender(req)
1691	if err != nil {
1692		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "UpdateTags", nil, "Failure sending request")
1693		return
1694	}
1695
1696	return
1697}
1698
1699// UpdateTagsPreparer prepares the UpdateTags request.
1700func (client VirtualNetworkGatewaysClient) UpdateTagsPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters TagsObject) (*http.Request, error) {
1701	pathParameters := map[string]interface{}{
1702		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1703		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1704		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1705	}
1706
1707	const APIVersion = "2018-10-01"
1708	queryParameters := map[string]interface{}{
1709		"api-version": APIVersion,
1710	}
1711
1712	preparer := autorest.CreatePreparer(
1713		autorest.AsContentType("application/json; charset=utf-8"),
1714		autorest.AsPatch(),
1715		autorest.WithBaseURL(client.BaseURI),
1716		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
1717		autorest.WithJSON(parameters),
1718		autorest.WithQueryParameters(queryParameters))
1719	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1720}
1721
1722// UpdateTagsSender sends the UpdateTags request. The method will close the
1723// http.Response Body if it receives an error.
1724func (client VirtualNetworkGatewaysClient) UpdateTagsSender(req *http.Request) (future VirtualNetworkGatewaysUpdateTagsFuture, err error) {
1725	var resp *http.Response
1726	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1727	if err != nil {
1728		return
1729	}
1730	var azf azure.Future
1731	azf, err = azure.NewFutureFromResponse(resp)
1732	future.FutureAPI = &azf
1733	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
1734		var done bool
1735		done, err = future.DoneWithContext(context.Background(), client)
1736		if err != nil {
1737			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
1738			return
1739		}
1740		if !done {
1741			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
1742			return
1743		}
1744		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1745		vng.Response.Response, err = future.GetResult(sender)
1746		if vng.Response.Response == nil && err == nil {
1747			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", nil, "received nil response and error")
1748		}
1749		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
1750			vng, err = client.UpdateTagsResponder(vng.Response.Response)
1751			if err != nil {
1752				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
1753			}
1754		}
1755		return
1756	}
1757	return
1758}
1759
1760// UpdateTagsResponder handles the response to the UpdateTags request. The method always
1761// closes the http.Response Body.
1762func (client VirtualNetworkGatewaysClient) UpdateTagsResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
1763	err = autorest.Respond(
1764		resp,
1765		azure.WithErrorUnlessStatusCode(http.StatusOK),
1766		autorest.ByUnmarshallingJSON(&result),
1767		autorest.ByClosing())
1768	result.Response = autorest.Response{Response: resp}
1769	return
1770}
1771
1772// VpnDeviceConfigurationScript gets a xml format representation for vpn device configuration script.
1773// Parameters:
1774// resourceGroupName - the name of the resource group.
1775// virtualNetworkGatewayConnectionName - the name of the virtual network gateway connection for which the
1776// configuration script is generated.
1777// parameters - parameters supplied to the generate vpn device script operation.
1778func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScript(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VpnDeviceScriptParameters) (result String, err error) {
1779	if tracing.IsEnabled() {
1780		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.VpnDeviceConfigurationScript")
1781		defer func() {
1782			sc := -1
1783			if result.Response.Response != nil {
1784				sc = result.Response.Response.StatusCode
1785			}
1786			tracing.EndSpan(ctx, sc, err)
1787		}()
1788	}
1789	req, err := client.VpnDeviceConfigurationScriptPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName, parameters)
1790	if err != nil {
1791		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", nil, "Failure preparing request")
1792		return
1793	}
1794
1795	resp, err := client.VpnDeviceConfigurationScriptSender(req)
1796	if err != nil {
1797		result.Response = autorest.Response{Response: resp}
1798		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", resp, "Failure sending request")
1799		return
1800	}
1801
1802	result, err = client.VpnDeviceConfigurationScriptResponder(resp)
1803	if err != nil {
1804		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", resp, "Failure responding to request")
1805		return
1806	}
1807
1808	return
1809}
1810
1811// VpnDeviceConfigurationScriptPreparer prepares the VpnDeviceConfigurationScript request.
1812func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VpnDeviceScriptParameters) (*http.Request, error) {
1813	pathParameters := map[string]interface{}{
1814		"resourceGroupName":                   autorest.Encode("path", resourceGroupName),
1815		"subscriptionId":                      autorest.Encode("path", client.SubscriptionID),
1816		"virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName),
1817	}
1818
1819	const APIVersion = "2018-10-01"
1820	queryParameters := map[string]interface{}{
1821		"api-version": APIVersion,
1822	}
1823
1824	preparer := autorest.CreatePreparer(
1825		autorest.AsContentType("application/json; charset=utf-8"),
1826		autorest.AsPost(),
1827		autorest.WithBaseURL(client.BaseURI),
1828		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/connections/{virtualNetworkGatewayConnectionName}/vpndeviceconfigurationscript", pathParameters),
1829		autorest.WithJSON(parameters),
1830		autorest.WithQueryParameters(queryParameters))
1831	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1832}
1833
1834// VpnDeviceConfigurationScriptSender sends the VpnDeviceConfigurationScript request. The method will close the
1835// http.Response Body if it receives an error.
1836func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptSender(req *http.Request) (*http.Response, error) {
1837	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1838}
1839
1840// VpnDeviceConfigurationScriptResponder handles the response to the VpnDeviceConfigurationScript request. The method always
1841// closes the http.Response Body.
1842func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptResponder(resp *http.Response) (result String, err error) {
1843	err = autorest.Respond(
1844		resp,
1845		azure.WithErrorUnlessStatusCode(http.StatusOK),
1846		autorest.ByUnmarshallingJSON(&result.Value),
1847		autorest.ByClosing())
1848	result.Response = autorest.Response{Response: resp}
1849	return
1850}
1851