/// <summary>
/// Pushes a package to the server that is represented by the stream.
/// </summary>
/// <param name="apiKey">API key to be used to push the package.</param>
/// <param name="packageStreamFactory">A delegate which can be used to open a stream for the package file.</param>
/// <param name="timeout">Time in milliseconds to timeout the server request.</param>
public void PushPackage(string apiKey, Func <Stream> packageStreamFactory, int timeout)
{
HttpClient client = GetClient("", "PUT", "application/octet-stream");
client.SendingRequest += (sender, e) =>
{
var request = (HttpWebRequest)e.Request;
// Set the timeout
if (timeout <= 0)
{
timeout = request.ReadWriteTimeout; // Default to 5 minutes if the value is invalid.
}
request.Timeout = timeout;
request.ReadWriteTimeout = timeout;
if (!String.IsNullOrEmpty(apiKey))
{
request.Headers.Add(ApiKeyHeader, apiKey);
}
var multiPartRequest = new MultipartWebRequest();
multiPartRequest.AddFile(packageStreamFactory, "package");
multiPartRequest.CreateMultipartRequest(request);
};
EnsureSuccessfulResponse(client, HttpStatusCode.Created);
}