in msihttpclient/msihttpclient.go [110:165]
func (client *msiHttpClient) issueRequest(operation string, url string, headers map[string]string, payload *bytes.Buffer) (int, []byte, error) {
// add query parameter for vmId
modifiedUrl, err := client.addVmIdQueryParameterToUrl(url)
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
request, err := http.NewRequest(operation, modifiedUrl, nil)
if payload != nil && payload.Len() != 0 {
request, err = http.NewRequest(operation, modifiedUrl, payload)
}
// Initialize and refresh msi as required
err = client.refreshMsiAuthentication()
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
// Add authorization if required
client.setMsiAuthenticationHeader(request)
// add headers
for key, value := range headers {
request.Header.Set(key, value)
}
res, err := client.httpClient.Do(request)
if err == nil && httputil.IsSuccessStatusCode(res.StatusCode) {
// no need to retry
} else if err == nil && res != nil {
for i := 1; client.retryBehavior(res.StatusCode, i); i++ {
// Initialize as refresh msi as required
err = client.refreshMsiAuthentication()
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
// Add authorization if required
client.setMsiAuthenticationHeader(request)
res, err = client.httpClient.Do(request)
if err != nil {
break
}
}
}
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
body, err := ioutil.ReadAll(res.Body)
res.Body.Close()
code := res.StatusCode
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
return code, body, nil
}