in Scripts/Runtime/WitRequest.cs [310:427]
private void StartRequest(Uri uri)
{
if (!configuration && configurationRequired)
{
statusDescription = "Configuration is not set. Cannot start request.";
Debug.LogError(statusDescription);
statusCode = ERROR_CODE_NO_CONFIGURATION;
SafeInvoke(onResponse);
return;
}
if (!isServerAuthRequired && string.IsNullOrEmpty(configuration.clientAccessToken))
{
statusDescription = "Client access token is not defined. Cannot start request.";
Debug.LogError(statusDescription);
statusCode = ERROR_CODE_NO_CLIENT_TOKEN;
SafeInvoke(onResponse);
return;
}
//allow app to intercept request and potentially modify uri or add custom headers
//NOTE: the callback depends on knowing the original Uri, before it is modified
Dictionary<string, string> customHeaders = null;
if (onPreSendRequest != null)
{
onPreSendRequest(ref uri, out customHeaders);
}
WrapHttpWebRequest wr = new WrapHttpWebRequest((HttpWebRequest)WebRequest.Create(uri.AbsoluteUri));
//request = (IRequest)(HttpWebRequest) WebRequest.Create(uri);
_request = wr;
if (isServerAuthRequired)
{
_request.Headers["Authorization"] =
$"Bearer {serverToken}";
}
else
{
_request.Headers["Authorization"] =
$"Bearer {configuration.clientAccessToken.Trim()}";
}
if (null != postContentType)
{
_request.Method = "POST";
_request.ContentType = postContentType;
_request.ContentLength = postData.Length;
}
// Configure additional headers
if (WitEndpointConfig.GetEndpointConfig(configuration).Speech == command)
{
_request.ContentType = audioEncoding.ToString();
_request.Method = "POST";
_request.SendChunked = true;
}
requestRequiresBody = RequestRequiresBody(command);
var configId = "not-yet-configured";
#if UNITY_EDITOR
if (configuration)
{
if (string.IsNullOrEmpty(configuration.configId))
{
configuration.configId = Guid.NewGuid().ToString();
EditorUtility.SetDirty(configuration);
}
configId = configuration.configId;
}
#endif
_request.UserAgent =
$"wit-unity-{WIT_SDK_VERSION},{operatingSystem},{deviceModel},{configId},{appIdentifier}";
#if UNITY_EDITOR
_request.UserAgent += ",Editor";
#else
_request.UserAgent += ",Runtime";
#endif
requestStartTime = DateTime.UtcNow;
isActive = true;
statusCode = 0;
statusDescription = "Starting request";
_request.Timeout = configuration ? configuration.timeoutMS : 10000;
WatchMainThreadCallbacks();
if (null != onProvideCustomHeaders)
{
foreach (var header in onProvideCustomHeaders())
{
_request.Headers[header.Key] = header.Value;
}
}
//apply any modified headers last, as this allows us to overwrite headers if need be
if (customHeaders != null)
{
foreach (var pair in customHeaders)
{
_request.Headers[pair.Key] = pair.Value;
}
}
if (_request.Method == "POST")
{
var getRequestTask = _request.BeginGetRequestStream(HandleRequestStream, _request);
ThreadPool.RegisterWaitForSingleObject(getRequestTask.AsyncWaitHandle,
HandleTimeoutTimer, _request, Timeout, true);
}
else
{
StartResponse();
}
}