/// <summary>
        /// Uploads the APK and its details as entered on the form to the web service.
        /// A progress bar is shown duting this progress.
        /// </summary>
        private void UploadPackage()
        {
            try
            {
                if (!webService.TestWebService())
                {
                    MessageBox.Show("Cannot reach web service at " + webService.Endpoint + ".");
                    return;
                }

                fragmentSize = Convert.ToInt32(comboSize.SelectedItem);
                fragments    = SplitPackageIntoFragments(package, fragmentSize);

                if (webService.CheckForActiveUploads(packageDetails))
                {
                    var dialogResult = MessageBox.Show("Package is already being uploaded. Do you want to cancel that upload and proceed with this one?", "Duplicate Upload", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (dialogResult == DialogResult.Yes)
                    {
                        var t = webService.CancelUpload(packageDetails);
                    }
                    else
                    {
                        return;
                    }
                }

                var result = webService.StartUpload(packageDetails, package.Length, Convert.ToInt32(comboSize.SelectedItem));
                Uploading = true;

                if (!result)
                {
                    MessageBox.Show("Error while initiating upload. ");
                }
                else
                {
                    MaximumSize             = new System.Drawing.Size(Width, 270);
                    MinimumSize             = new System.Drawing.Size(Width, 270);
                    Size                    = new System.Drawing.Size(Width, 270);
                    barUploadProgress.Value = 0;
                    barUploadProgress.Refresh();
                    lblUploadMsg.Refresh();

                    int retryMax     = 3;
                    int retrycounter = 0;
                    int currentIndex = 0;

                    while (currentIndex < fragments.Count)
                    {
                        barUploadProgress.Value = (int)(((currentIndex + 1) / (float)fragments.Count) * 100);
                        barUploadProgress.Refresh();
                        lblUploadMsg.Refresh();

                        var packageFragment = new Fragment();
                        packageFragment.PackageDetails = packageDetails;
                        packageFragment.Data           = fragments[currentIndex];

                        var fragmentResult = webService.UploadNextFragment(packageFragment);

                        while (!fragmentResult && retrycounter < retryMax)
                        {
                            retrycounter++;
                            fragmentResult = webService.UploadNextFragment(packageFragment);
                        }

                        if (retrycounter == retryMax && !fragmentResult)
                        {
                            break;
                        }
                        else
                        {
                            currentIndex++;
                        }
                    }

                    if (currentIndex == fragments.Count)
                    {
                        result = webService.FinishUpload(packageDetails);

                        if (result)
                        {
                            Uploading = false;
                            MessageBox.Show("Succesfully uploaded " + this.packageDetails.Name + " " + this.packageDetails.Version + " to server");
                            Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Error occured while uploading fragment " + (currentIndex + 1) + " of " + fragments.Count + ". ");
                        webService.CancelUpload(packageDetails);
                    }
                }
            }
            catch (Exception e)
            {
                LoggingControl.Log("Error occured while uploading package.", e);
                MessageBox.Show("Error occured while uploading package.");
                webService.CancelUpload(packageDetails);
                Close();
            }
        }