1// +build go1.13
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5// Code generated by Microsoft (R) AutoRest Code Generator.
6// Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
8package armnetwork
9
10import (
11	"context"
12	"github.com/Azure/azure-sdk-for-go/sdk/armcore"
13	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
14	"net/http"
15	"net/url"
16	"strings"
17	"time"
18)
19
20// PacketCapturesClient contains the methods for the PacketCaptures group.
21// Don't use this type directly, use NewPacketCapturesClient() instead.
22type PacketCapturesClient struct {
23	con            *armcore.Connection
24	subscriptionID string
25}
26
27// NewPacketCapturesClient creates a new instance of PacketCapturesClient with the specified values.
28func NewPacketCapturesClient(con *armcore.Connection, subscriptionID string) *PacketCapturesClient {
29	return &PacketCapturesClient{con: con, subscriptionID: subscriptionID}
30}
31
32// BeginCreate - Create and start a packet capture on the specified VM.
33func (client *PacketCapturesClient) BeginCreate(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, parameters PacketCapture, options *PacketCapturesBeginCreateOptions) (PacketCaptureResultPollerResponse, error) {
34	resp, err := client.create(ctx, resourceGroupName, networkWatcherName, packetCaptureName, parameters, options)
35	if err != nil {
36		return PacketCaptureResultPollerResponse{}, err
37	}
38	result := PacketCaptureResultPollerResponse{
39		RawResponse: resp.Response,
40	}
41	pt, err := armcore.NewPoller("PacketCapturesClient.Create", "azure-async-operation", resp, client.createHandleError)
42	if err != nil {
43		return PacketCaptureResultPollerResponse{}, err
44	}
45	poller := &packetCaptureResultPoller{
46		pt:       pt,
47		pipeline: client.con.Pipeline(),
48	}
49	result.Poller = poller
50	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (PacketCaptureResultResponse, error) {
51		return poller.pollUntilDone(ctx, frequency)
52	}
53	return result, nil
54}
55
56// ResumeCreate creates a new PacketCaptureResultPoller from the specified resume token.
57// token - The value must come from a previous call to PacketCaptureResultPoller.ResumeToken().
58func (client *PacketCapturesClient) ResumeCreate(token string) (PacketCaptureResultPoller, error) {
59	pt, err := armcore.NewPollerFromResumeToken("PacketCapturesClient.Create", token, client.createHandleError)
60	if err != nil {
61		return nil, err
62	}
63	return &packetCaptureResultPoller{
64		pipeline: client.con.Pipeline(),
65		pt:       pt,
66	}, nil
67}
68
69// Create - Create and start a packet capture on the specified VM.
70func (client *PacketCapturesClient) create(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, parameters PacketCapture, options *PacketCapturesBeginCreateOptions) (*azcore.Response, error) {
71	req, err := client.createCreateRequest(ctx, resourceGroupName, networkWatcherName, packetCaptureName, parameters, options)
72	if err != nil {
73		return nil, err
74	}
75	resp, err := client.con.Pipeline().Do(req)
76	if err != nil {
77		return nil, err
78	}
79	if !resp.HasStatusCode(http.StatusCreated) {
80		return nil, client.createHandleError(resp)
81	}
82	return resp, nil
83}
84
85// createCreateRequest creates the Create request.
86func (client *PacketCapturesClient) createCreateRequest(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, parameters PacketCapture, options *PacketCapturesBeginCreateOptions) (*azcore.Request, error) {
87	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}"
88	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
89	urlPath = strings.ReplaceAll(urlPath, "{networkWatcherName}", url.PathEscape(networkWatcherName))
90	urlPath = strings.ReplaceAll(urlPath, "{packetCaptureName}", url.PathEscape(packetCaptureName))
91	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
92	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
93	if err != nil {
94		return nil, err
95	}
96	req.Telemetry(telemetryInfo)
97	query := req.URL.Query()
98	query.Set("api-version", "2020-07-01")
99	req.URL.RawQuery = query.Encode()
100	req.Header.Set("Accept", "application/json")
101	return req, req.MarshalAsJSON(parameters)
102}
103
104// createHandleResponse handles the Create response.
105func (client *PacketCapturesClient) createHandleResponse(resp *azcore.Response) (PacketCaptureResultResponse, error) {
106	var val *PacketCaptureResult
107	if err := resp.UnmarshalAsJSON(&val); err != nil {
108		return PacketCaptureResultResponse{}, err
109	}
110	return PacketCaptureResultResponse{RawResponse: resp.Response, PacketCaptureResult: val}, nil
111}
112
113// createHandleError handles the Create error response.
114func (client *PacketCapturesClient) createHandleError(resp *azcore.Response) error {
115	var err ErrorResponse
116	if err := resp.UnmarshalAsJSON(&err); err != nil {
117		return err
118	}
119	return azcore.NewResponseError(&err, resp.Response)
120}
121
122// BeginDelete - Deletes the specified packet capture session.
123func (client *PacketCapturesClient) BeginDelete(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginDeleteOptions) (HTTPPollerResponse, error) {
124	resp, err := client.delete(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
125	if err != nil {
126		return HTTPPollerResponse{}, err
127	}
128	result := HTTPPollerResponse{
129		RawResponse: resp.Response,
130	}
131	pt, err := armcore.NewPoller("PacketCapturesClient.Delete", "location", resp, client.deleteHandleError)
132	if err != nil {
133		return HTTPPollerResponse{}, err
134	}
135	poller := &httpPoller{
136		pt:       pt,
137		pipeline: client.con.Pipeline(),
138	}
139	result.Poller = poller
140	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
141		return poller.pollUntilDone(ctx, frequency)
142	}
143	return result, nil
144}
145
146// ResumeDelete creates a new HTTPPoller from the specified resume token.
147// token - The value must come from a previous call to HTTPPoller.ResumeToken().
148func (client *PacketCapturesClient) ResumeDelete(token string) (HTTPPoller, error) {
149	pt, err := armcore.NewPollerFromResumeToken("PacketCapturesClient.Delete", token, client.deleteHandleError)
150	if err != nil {
151		return nil, err
152	}
153	return &httpPoller{
154		pipeline: client.con.Pipeline(),
155		pt:       pt,
156	}, nil
157}
158
159// Delete - Deletes the specified packet capture session.
160func (client *PacketCapturesClient) delete(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginDeleteOptions) (*azcore.Response, error) {
161	req, err := client.deleteCreateRequest(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
162	if err != nil {
163		return nil, err
164	}
165	resp, err := client.con.Pipeline().Do(req)
166	if err != nil {
167		return nil, err
168	}
169	if !resp.HasStatusCode(http.StatusAccepted, http.StatusNoContent) {
170		return nil, client.deleteHandleError(resp)
171	}
172	return resp, nil
173}
174
175// deleteCreateRequest creates the Delete request.
176func (client *PacketCapturesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginDeleteOptions) (*azcore.Request, error) {
177	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}"
178	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
179	urlPath = strings.ReplaceAll(urlPath, "{networkWatcherName}", url.PathEscape(networkWatcherName))
180	urlPath = strings.ReplaceAll(urlPath, "{packetCaptureName}", url.PathEscape(packetCaptureName))
181	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
182	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
183	if err != nil {
184		return nil, err
185	}
186	req.Telemetry(telemetryInfo)
187	query := req.URL.Query()
188	query.Set("api-version", "2020-07-01")
189	req.URL.RawQuery = query.Encode()
190	req.Header.Set("Accept", "application/json")
191	return req, nil
192}
193
194// deleteHandleError handles the Delete error response.
195func (client *PacketCapturesClient) deleteHandleError(resp *azcore.Response) error {
196	var err ErrorResponse
197	if err := resp.UnmarshalAsJSON(&err); err != nil {
198		return err
199	}
200	return azcore.NewResponseError(&err, resp.Response)
201}
202
203// Get - Gets a packet capture session by name.
204func (client *PacketCapturesClient) Get(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesGetOptions) (PacketCaptureResultResponse, error) {
205	req, err := client.getCreateRequest(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
206	if err != nil {
207		return PacketCaptureResultResponse{}, err
208	}
209	resp, err := client.con.Pipeline().Do(req)
210	if err != nil {
211		return PacketCaptureResultResponse{}, err
212	}
213	if !resp.HasStatusCode(http.StatusOK) {
214		return PacketCaptureResultResponse{}, client.getHandleError(resp)
215	}
216	return client.getHandleResponse(resp)
217}
218
219// getCreateRequest creates the Get request.
220func (client *PacketCapturesClient) getCreateRequest(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesGetOptions) (*azcore.Request, error) {
221	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}"
222	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
223	urlPath = strings.ReplaceAll(urlPath, "{networkWatcherName}", url.PathEscape(networkWatcherName))
224	urlPath = strings.ReplaceAll(urlPath, "{packetCaptureName}", url.PathEscape(packetCaptureName))
225	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
226	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
227	if err != nil {
228		return nil, err
229	}
230	req.Telemetry(telemetryInfo)
231	query := req.URL.Query()
232	query.Set("api-version", "2020-07-01")
233	req.URL.RawQuery = query.Encode()
234	req.Header.Set("Accept", "application/json")
235	return req, nil
236}
237
238// getHandleResponse handles the Get response.
239func (client *PacketCapturesClient) getHandleResponse(resp *azcore.Response) (PacketCaptureResultResponse, error) {
240	var val *PacketCaptureResult
241	if err := resp.UnmarshalAsJSON(&val); err != nil {
242		return PacketCaptureResultResponse{}, err
243	}
244	return PacketCaptureResultResponse{RawResponse: resp.Response, PacketCaptureResult: val}, nil
245}
246
247// getHandleError handles the Get error response.
248func (client *PacketCapturesClient) getHandleError(resp *azcore.Response) error {
249	var err ErrorResponse
250	if err := resp.UnmarshalAsJSON(&err); err != nil {
251		return err
252	}
253	return azcore.NewResponseError(&err, resp.Response)
254}
255
256// BeginGetStatus - Query the status of a running packet capture session.
257func (client *PacketCapturesClient) BeginGetStatus(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginGetStatusOptions) (PacketCaptureQueryStatusResultPollerResponse, error) {
258	resp, err := client.getStatus(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
259	if err != nil {
260		return PacketCaptureQueryStatusResultPollerResponse{}, err
261	}
262	result := PacketCaptureQueryStatusResultPollerResponse{
263		RawResponse: resp.Response,
264	}
265	pt, err := armcore.NewPoller("PacketCapturesClient.GetStatus", "location", resp, client.getStatusHandleError)
266	if err != nil {
267		return PacketCaptureQueryStatusResultPollerResponse{}, err
268	}
269	poller := &packetCaptureQueryStatusResultPoller{
270		pt:       pt,
271		pipeline: client.con.Pipeline(),
272	}
273	result.Poller = poller
274	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (PacketCaptureQueryStatusResultResponse, error) {
275		return poller.pollUntilDone(ctx, frequency)
276	}
277	return result, nil
278}
279
280// ResumeGetStatus creates a new PacketCaptureQueryStatusResultPoller from the specified resume token.
281// token - The value must come from a previous call to PacketCaptureQueryStatusResultPoller.ResumeToken().
282func (client *PacketCapturesClient) ResumeGetStatus(token string) (PacketCaptureQueryStatusResultPoller, error) {
283	pt, err := armcore.NewPollerFromResumeToken("PacketCapturesClient.GetStatus", token, client.getStatusHandleError)
284	if err != nil {
285		return nil, err
286	}
287	return &packetCaptureQueryStatusResultPoller{
288		pipeline: client.con.Pipeline(),
289		pt:       pt,
290	}, nil
291}
292
293// GetStatus - Query the status of a running packet capture session.
294func (client *PacketCapturesClient) getStatus(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginGetStatusOptions) (*azcore.Response, error) {
295	req, err := client.getStatusCreateRequest(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
296	if err != nil {
297		return nil, err
298	}
299	resp, err := client.con.Pipeline().Do(req)
300	if err != nil {
301		return nil, err
302	}
303	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) {
304		return nil, client.getStatusHandleError(resp)
305	}
306	return resp, nil
307}
308
309// getStatusCreateRequest creates the GetStatus request.
310func (client *PacketCapturesClient) getStatusCreateRequest(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginGetStatusOptions) (*azcore.Request, error) {
311	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}/queryStatus"
312	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
313	urlPath = strings.ReplaceAll(urlPath, "{networkWatcherName}", url.PathEscape(networkWatcherName))
314	urlPath = strings.ReplaceAll(urlPath, "{packetCaptureName}", url.PathEscape(packetCaptureName))
315	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
316	req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath))
317	if err != nil {
318		return nil, err
319	}
320	req.Telemetry(telemetryInfo)
321	query := req.URL.Query()
322	query.Set("api-version", "2020-07-01")
323	req.URL.RawQuery = query.Encode()
324	req.Header.Set("Accept", "application/json")
325	return req, nil
326}
327
328// getStatusHandleResponse handles the GetStatus response.
329func (client *PacketCapturesClient) getStatusHandleResponse(resp *azcore.Response) (PacketCaptureQueryStatusResultResponse, error) {
330	var val *PacketCaptureQueryStatusResult
331	if err := resp.UnmarshalAsJSON(&val); err != nil {
332		return PacketCaptureQueryStatusResultResponse{}, err
333	}
334	return PacketCaptureQueryStatusResultResponse{RawResponse: resp.Response, PacketCaptureQueryStatusResult: val}, nil
335}
336
337// getStatusHandleError handles the GetStatus error response.
338func (client *PacketCapturesClient) getStatusHandleError(resp *azcore.Response) error {
339	var err ErrorResponse
340	if err := resp.UnmarshalAsJSON(&err); err != nil {
341		return err
342	}
343	return azcore.NewResponseError(&err, resp.Response)
344}
345
346// List - Lists all packet capture sessions within the specified resource group.
347func (client *PacketCapturesClient) List(ctx context.Context, resourceGroupName string, networkWatcherName string, options *PacketCapturesListOptions) (PacketCaptureListResultResponse, error) {
348	req, err := client.listCreateRequest(ctx, resourceGroupName, networkWatcherName, options)
349	if err != nil {
350		return PacketCaptureListResultResponse{}, err
351	}
352	resp, err := client.con.Pipeline().Do(req)
353	if err != nil {
354		return PacketCaptureListResultResponse{}, err
355	}
356	if !resp.HasStatusCode(http.StatusOK) {
357		return PacketCaptureListResultResponse{}, client.listHandleError(resp)
358	}
359	return client.listHandleResponse(resp)
360}
361
362// listCreateRequest creates the List request.
363func (client *PacketCapturesClient) listCreateRequest(ctx context.Context, resourceGroupName string, networkWatcherName string, options *PacketCapturesListOptions) (*azcore.Request, error) {
364	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures"
365	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
366	urlPath = strings.ReplaceAll(urlPath, "{networkWatcherName}", url.PathEscape(networkWatcherName))
367	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
368	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
369	if err != nil {
370		return nil, err
371	}
372	req.Telemetry(telemetryInfo)
373	query := req.URL.Query()
374	query.Set("api-version", "2020-07-01")
375	req.URL.RawQuery = query.Encode()
376	req.Header.Set("Accept", "application/json")
377	return req, nil
378}
379
380// listHandleResponse handles the List response.
381func (client *PacketCapturesClient) listHandleResponse(resp *azcore.Response) (PacketCaptureListResultResponse, error) {
382	var val *PacketCaptureListResult
383	if err := resp.UnmarshalAsJSON(&val); err != nil {
384		return PacketCaptureListResultResponse{}, err
385	}
386	return PacketCaptureListResultResponse{RawResponse: resp.Response, PacketCaptureListResult: val}, nil
387}
388
389// listHandleError handles the List error response.
390func (client *PacketCapturesClient) listHandleError(resp *azcore.Response) error {
391	var err ErrorResponse
392	if err := resp.UnmarshalAsJSON(&err); err != nil {
393		return err
394	}
395	return azcore.NewResponseError(&err, resp.Response)
396}
397
398// BeginStop - Stops a specified packet capture session.
399func (client *PacketCapturesClient) BeginStop(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginStopOptions) (HTTPPollerResponse, error) {
400	resp, err := client.stop(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
401	if err != nil {
402		return HTTPPollerResponse{}, err
403	}
404	result := HTTPPollerResponse{
405		RawResponse: resp.Response,
406	}
407	pt, err := armcore.NewPoller("PacketCapturesClient.Stop", "location", resp, client.stopHandleError)
408	if err != nil {
409		return HTTPPollerResponse{}, err
410	}
411	poller := &httpPoller{
412		pt:       pt,
413		pipeline: client.con.Pipeline(),
414	}
415	result.Poller = poller
416	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
417		return poller.pollUntilDone(ctx, frequency)
418	}
419	return result, nil
420}
421
422// ResumeStop creates a new HTTPPoller from the specified resume token.
423// token - The value must come from a previous call to HTTPPoller.ResumeToken().
424func (client *PacketCapturesClient) ResumeStop(token string) (HTTPPoller, error) {
425	pt, err := armcore.NewPollerFromResumeToken("PacketCapturesClient.Stop", token, client.stopHandleError)
426	if err != nil {
427		return nil, err
428	}
429	return &httpPoller{
430		pipeline: client.con.Pipeline(),
431		pt:       pt,
432	}, nil
433}
434
435// Stop - Stops a specified packet capture session.
436func (client *PacketCapturesClient) stop(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginStopOptions) (*azcore.Response, error) {
437	req, err := client.stopCreateRequest(ctx, resourceGroupName, networkWatcherName, packetCaptureName, options)
438	if err != nil {
439		return nil, err
440	}
441	resp, err := client.con.Pipeline().Do(req)
442	if err != nil {
443		return nil, err
444	}
445	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) {
446		return nil, client.stopHandleError(resp)
447	}
448	return resp, nil
449}
450
451// stopCreateRequest creates the Stop request.
452func (client *PacketCapturesClient) stopCreateRequest(ctx context.Context, resourceGroupName string, networkWatcherName string, packetCaptureName string, options *PacketCapturesBeginStopOptions) (*azcore.Request, error) {
453	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}/stop"
454	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
455	urlPath = strings.ReplaceAll(urlPath, "{networkWatcherName}", url.PathEscape(networkWatcherName))
456	urlPath = strings.ReplaceAll(urlPath, "{packetCaptureName}", url.PathEscape(packetCaptureName))
457	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
458	req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath))
459	if err != nil {
460		return nil, err
461	}
462	req.Telemetry(telemetryInfo)
463	query := req.URL.Query()
464	query.Set("api-version", "2020-07-01")
465	req.URL.RawQuery = query.Encode()
466	req.Header.Set("Accept", "application/json")
467	return req, nil
468}
469
470// stopHandleError handles the Stop error response.
471func (client *PacketCapturesClient) stopHandleError(resp *azcore.Response) error {
472	var err ErrorResponse
473	if err := resp.UnmarshalAsJSON(&err); err != nil {
474		return err
475	}
476	return azcore.NewResponseError(&err, resp.Response)
477}
478