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-07-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-07-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-07-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-07-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-07-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-07-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-07-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-07-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-07-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-07-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-07-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-07-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-07-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// SetVpnclientIpsecParameters the Set VpnclientIpsecParameters operation sets the vpnclient ipsec policy for P2S
1389// client of virtual network gateway in the specified resource group through Network resource provider.
1390// Parameters:
1391// resourceGroupName - the name of the resource group.
1392// virtualNetworkGatewayName - the name of the virtual network gateway.
1393// vpnclientIpsecParams - parameters supplied to the Begin Set vpnclient ipsec parameters of Virtual Network
1394// Gateway P2S client operation through Network resource provider.
1395func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParameters(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, vpnclientIpsecParams VpnClientIPsecParameters) (result VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture, err error) {
1396	if tracing.IsEnabled() {
1397		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.SetVpnclientIpsecParameters")
1398		defer func() {
1399			sc := -1
1400			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1401				sc = result.FutureAPI.Response().StatusCode
1402			}
1403			tracing.EndSpan(ctx, sc, err)
1404		}()
1405	}
1406	if err := validation.Validate([]validation.Validation{
1407		{TargetValue: vpnclientIpsecParams,
1408			Constraints: []validation.Constraint{{Target: "vpnclientIpsecParams.SaLifeTimeSeconds", Name: validation.Null, Rule: true, Chain: nil},
1409				{Target: "vpnclientIpsecParams.SaDataSizeKilobytes", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
1410		return result, validation.NewError("network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", err.Error())
1411	}
1412
1413	req, err := client.SetVpnclientIpsecParametersPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, vpnclientIpsecParams)
1414	if err != nil {
1415		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", nil, "Failure preparing request")
1416		return
1417	}
1418
1419	result, err = client.SetVpnclientIpsecParametersSender(req)
1420	if err != nil {
1421		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SetVpnclientIpsecParameters", nil, "Failure sending request")
1422		return
1423	}
1424
1425	return
1426}
1427
1428// SetVpnclientIpsecParametersPreparer prepares the SetVpnclientIpsecParameters request.
1429func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, vpnclientIpsecParams VpnClientIPsecParameters) (*http.Request, error) {
1430	pathParameters := map[string]interface{}{
1431		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1432		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1433		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1434	}
1435
1436	const APIVersion = "2018-07-01"
1437	queryParameters := map[string]interface{}{
1438		"api-version": APIVersion,
1439	}
1440
1441	preparer := autorest.CreatePreparer(
1442		autorest.AsContentType("application/json; charset=utf-8"),
1443		autorest.AsPost(),
1444		autorest.WithBaseURL(client.BaseURI),
1445		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/setvpnclientipsecparameters", pathParameters),
1446		autorest.WithJSON(vpnclientIpsecParams),
1447		autorest.WithQueryParameters(queryParameters))
1448	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1449}
1450
1451// SetVpnclientIpsecParametersSender sends the SetVpnclientIpsecParameters request. The method will close the
1452// http.Response Body if it receives an error.
1453func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersSender(req *http.Request) (future VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture, err error) {
1454	var resp *http.Response
1455	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1456	if err != nil {
1457		return
1458	}
1459	var azf azure.Future
1460	azf, err = azure.NewFutureFromResponse(resp)
1461	future.FutureAPI = &azf
1462	future.Result = func(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
1463		var done bool
1464		done, err = future.DoneWithContext(context.Background(), client)
1465		if err != nil {
1466			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
1467			return
1468		}
1469		if !done {
1470			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
1471			return
1472		}
1473		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1474		vcipp.Response.Response, err = future.GetResult(sender)
1475		if vcipp.Response.Response == nil && err == nil {
1476			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", nil, "received nil response and error")
1477		}
1478		if err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
1479			vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
1480			if err != nil {
1481				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
1482			}
1483		}
1484		return
1485	}
1486	return
1487}
1488
1489// SetVpnclientIpsecParametersResponder handles the response to the SetVpnclientIpsecParameters request. The method always
1490// closes the http.Response Body.
1491func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersResponder(resp *http.Response) (result VpnClientIPsecParameters, err error) {
1492	err = autorest.Respond(
1493		resp,
1494		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1495		autorest.ByUnmarshallingJSON(&result),
1496		autorest.ByClosing())
1497	result.Response = autorest.Response{Response: resp}
1498	return
1499}
1500
1501// SupportedVpnDevices gets a xml format representation for supported vpn devices.
1502// Parameters:
1503// resourceGroupName - the name of the resource group.
1504// virtualNetworkGatewayName - the name of the virtual network gateway.
1505func (client VirtualNetworkGatewaysClient) SupportedVpnDevices(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result String, err error) {
1506	if tracing.IsEnabled() {
1507		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.SupportedVpnDevices")
1508		defer func() {
1509			sc := -1
1510			if result.Response.Response != nil {
1511				sc = result.Response.Response.StatusCode
1512			}
1513			tracing.EndSpan(ctx, sc, err)
1514		}()
1515	}
1516	req, err := client.SupportedVpnDevicesPreparer(ctx, resourceGroupName, virtualNetworkGatewayName)
1517	if err != nil {
1518		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", nil, "Failure preparing request")
1519		return
1520	}
1521
1522	resp, err := client.SupportedVpnDevicesSender(req)
1523	if err != nil {
1524		result.Response = autorest.Response{Response: resp}
1525		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", resp, "Failure sending request")
1526		return
1527	}
1528
1529	result, err = client.SupportedVpnDevicesResponder(resp)
1530	if err != nil {
1531		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "SupportedVpnDevices", resp, "Failure responding to request")
1532		return
1533	}
1534
1535	return
1536}
1537
1538// SupportedVpnDevicesPreparer prepares the SupportedVpnDevices request.
1539func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (*http.Request, error) {
1540	pathParameters := map[string]interface{}{
1541		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1542		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1543		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1544	}
1545
1546	const APIVersion = "2018-07-01"
1547	queryParameters := map[string]interface{}{
1548		"api-version": APIVersion,
1549	}
1550
1551	preparer := autorest.CreatePreparer(
1552		autorest.AsPost(),
1553		autorest.WithBaseURL(client.BaseURI),
1554		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}/supportedvpndevices", pathParameters),
1555		autorest.WithQueryParameters(queryParameters))
1556	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1557}
1558
1559// SupportedVpnDevicesSender sends the SupportedVpnDevices request. The method will close the
1560// http.Response Body if it receives an error.
1561func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesSender(req *http.Request) (*http.Response, error) {
1562	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1563}
1564
1565// SupportedVpnDevicesResponder handles the response to the SupportedVpnDevices request. The method always
1566// closes the http.Response Body.
1567func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesResponder(resp *http.Response) (result String, err error) {
1568	err = autorest.Respond(
1569		resp,
1570		azure.WithErrorUnlessStatusCode(http.StatusOK),
1571		autorest.ByUnmarshallingJSON(&result.Value),
1572		autorest.ByClosing())
1573	result.Response = autorest.Response{Response: resp}
1574	return
1575}
1576
1577// UpdateTags updates a virtual network gateway tags.
1578// Parameters:
1579// resourceGroupName - the name of the resource group.
1580// virtualNetworkGatewayName - the name of the virtual network gateway.
1581// parameters - parameters supplied to update virtual network gateway tags.
1582func (client VirtualNetworkGatewaysClient) UpdateTags(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters TagsObject) (result VirtualNetworkGatewaysUpdateTagsFuture, err error) {
1583	if tracing.IsEnabled() {
1584		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.UpdateTags")
1585		defer func() {
1586			sc := -1
1587			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
1588				sc = result.FutureAPI.Response().StatusCode
1589			}
1590			tracing.EndSpan(ctx, sc, err)
1591		}()
1592	}
1593	req, err := client.UpdateTagsPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters)
1594	if err != nil {
1595		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "UpdateTags", nil, "Failure preparing request")
1596		return
1597	}
1598
1599	result, err = client.UpdateTagsSender(req)
1600	if err != nil {
1601		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "UpdateTags", nil, "Failure sending request")
1602		return
1603	}
1604
1605	return
1606}
1607
1608// UpdateTagsPreparer prepares the UpdateTags request.
1609func (client VirtualNetworkGatewaysClient) UpdateTagsPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters TagsObject) (*http.Request, error) {
1610	pathParameters := map[string]interface{}{
1611		"resourceGroupName":         autorest.Encode("path", resourceGroupName),
1612		"subscriptionId":            autorest.Encode("path", client.SubscriptionID),
1613		"virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName),
1614	}
1615
1616	const APIVersion = "2018-07-01"
1617	queryParameters := map[string]interface{}{
1618		"api-version": APIVersion,
1619	}
1620
1621	preparer := autorest.CreatePreparer(
1622		autorest.AsContentType("application/json; charset=utf-8"),
1623		autorest.AsPatch(),
1624		autorest.WithBaseURL(client.BaseURI),
1625		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkGateways/{virtualNetworkGatewayName}", pathParameters),
1626		autorest.WithJSON(parameters),
1627		autorest.WithQueryParameters(queryParameters))
1628	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1629}
1630
1631// UpdateTagsSender sends the UpdateTags request. The method will close the
1632// http.Response Body if it receives an error.
1633func (client VirtualNetworkGatewaysClient) UpdateTagsSender(req *http.Request) (future VirtualNetworkGatewaysUpdateTagsFuture, err error) {
1634	var resp *http.Response
1635	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
1636	if err != nil {
1637		return
1638	}
1639	var azf azure.Future
1640	azf, err = azure.NewFutureFromResponse(resp)
1641	future.FutureAPI = &azf
1642	future.Result = func(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
1643		var done bool
1644		done, err = future.DoneWithContext(context.Background(), client)
1645		if err != nil {
1646			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
1647			return
1648		}
1649		if !done {
1650			err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
1651			return
1652		}
1653		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1654		vng.Response.Response, err = future.GetResult(sender)
1655		if vng.Response.Response == nil && err == nil {
1656			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", nil, "received nil response and error")
1657		}
1658		if err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
1659			vng, err = client.UpdateTagsResponder(vng.Response.Response)
1660			if err != nil {
1661				err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
1662			}
1663		}
1664		return
1665	}
1666	return
1667}
1668
1669// UpdateTagsResponder handles the response to the UpdateTags request. The method always
1670// closes the http.Response Body.
1671func (client VirtualNetworkGatewaysClient) UpdateTagsResponder(resp *http.Response) (result VirtualNetworkGateway, err error) {
1672	err = autorest.Respond(
1673		resp,
1674		azure.WithErrorUnlessStatusCode(http.StatusOK),
1675		autorest.ByUnmarshallingJSON(&result),
1676		autorest.ByClosing())
1677	result.Response = autorest.Response{Response: resp}
1678	return
1679}
1680
1681// VpnDeviceConfigurationScript gets a xml format representation for vpn device configuration script.
1682// Parameters:
1683// resourceGroupName - the name of the resource group.
1684// virtualNetworkGatewayConnectionName - the name of the virtual network gateway connection for which the
1685// configuration script is generated.
1686// parameters - parameters supplied to the generate vpn device script operation.
1687func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScript(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VpnDeviceScriptParameters) (result String, err error) {
1688	if tracing.IsEnabled() {
1689		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.VpnDeviceConfigurationScript")
1690		defer func() {
1691			sc := -1
1692			if result.Response.Response != nil {
1693				sc = result.Response.Response.StatusCode
1694			}
1695			tracing.EndSpan(ctx, sc, err)
1696		}()
1697	}
1698	req, err := client.VpnDeviceConfigurationScriptPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName, parameters)
1699	if err != nil {
1700		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", nil, "Failure preparing request")
1701		return
1702	}
1703
1704	resp, err := client.VpnDeviceConfigurationScriptSender(req)
1705	if err != nil {
1706		result.Response = autorest.Response{Response: resp}
1707		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", resp, "Failure sending request")
1708		return
1709	}
1710
1711	result, err = client.VpnDeviceConfigurationScriptResponder(resp)
1712	if err != nil {
1713		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "VpnDeviceConfigurationScript", resp, "Failure responding to request")
1714		return
1715	}
1716
1717	return
1718}
1719
1720// VpnDeviceConfigurationScriptPreparer prepares the VpnDeviceConfigurationScript request.
1721func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VpnDeviceScriptParameters) (*http.Request, error) {
1722	pathParameters := map[string]interface{}{
1723		"resourceGroupName":                   autorest.Encode("path", resourceGroupName),
1724		"subscriptionId":                      autorest.Encode("path", client.SubscriptionID),
1725		"virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName),
1726	}
1727
1728	const APIVersion = "2018-07-01"
1729	queryParameters := map[string]interface{}{
1730		"api-version": APIVersion,
1731	}
1732
1733	preparer := autorest.CreatePreparer(
1734		autorest.AsContentType("application/json; charset=utf-8"),
1735		autorest.AsPost(),
1736		autorest.WithBaseURL(client.BaseURI),
1737		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/connections/{virtualNetworkGatewayConnectionName}/vpndeviceconfigurationscript", pathParameters),
1738		autorest.WithJSON(parameters),
1739		autorest.WithQueryParameters(queryParameters))
1740	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1741}
1742
1743// VpnDeviceConfigurationScriptSender sends the VpnDeviceConfigurationScript request. The method will close the
1744// http.Response Body if it receives an error.
1745func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptSender(req *http.Request) (*http.Response, error) {
1746	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1747}
1748
1749// VpnDeviceConfigurationScriptResponder handles the response to the VpnDeviceConfigurationScript request. The method always
1750// closes the http.Response Body.
1751func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptResponder(resp *http.Response) (result String, err error) {
1752	err = autorest.Respond(
1753		resp,
1754		azure.WithErrorUnlessStatusCode(http.StatusOK),
1755		autorest.ByUnmarshallingJSON(&result.Value),
1756		autorest.ByClosing())
1757	result.Response = autorest.Response{Response: resp}
1758	return
1759}
1760