public InternationalResponse ValidateRequest(InternationalRequest request)
        {
            InternationalResponse result = new InternationalResponse();

            if (request == null)
            {
                result.Errors.Add(new USPSError()
                {
                    Description = "Request was null"
                });
                return(result);
            }

            if (request.Packages.Count < 1)
            {
                result.Errors.Add(new USPSError()
                {
                    Description = "Request requires at least one package."
                });
            }

            if (request.UserId.Trim().Length < 1)
            {
                result.Errors.Add(new USPSError()
                {
                    Description = "UserId is Required for Requests"
                });
            }

            return(result);
        }
        public InternationalResponse ProcessRequest(InternationalRequest request)
        {
            this.LastResponse = string.Empty;
            this.LastRequest  = string.Empty;

            // Validate Request First
            InternationalResponse result = ValidateRequest(request);

            if (result.Errors.Count > 0)
            {
                return(result);
            }

            try
            {
                string sURL = request.ApiUrl;
                sURL += "?API=IntlRateV2&XML=";

                // Build XML
                string requestXml = string.Empty;

                StringWriter  sw = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
                XmlTextWriter xw = new XmlTextWriter(sw);

                xw.Formatting = Formatting.None;

                // Start Request
                xw.WriteStartElement("IntlRateV2Request");
                xw.WriteAttributeString("USERID", request.UserId);
                xw.WriteElementString("Revision", request.Revision);

                foreach (InternationalPackage pak in request.Packages)
                {
                    pak.WriteToXml(ref xw);
                }

                //End Rate Request
                xw.WriteEndElement();
                xw.Flush();
                xw.Close();
                requestXml = sw.GetStringBuilder().ToString();
                if (!requestXml.StartsWith("<"))
                {
                    requestXml = requestXml.Substring(1, requestXml.Length - 1);
                }

                // Diagnostics
                this.LastRequest = requestXml;

                string sResponse  = string.Empty;
                string dataToSend = sURL + System.Web.HttpUtility.UrlEncode(requestXml);

                sResponse = readHtmlPage(dataToSend);

                // Diagnostics
                this.LastResponse = sResponse;

                result = new InternationalResponse(sResponse);
            }
            catch (Exception ex)
            {
                result.Errors.Add(new USPSError()
                {
                    Description = ex.Message + " " + ex.StackTrace, Source = "BV Exception"
                });
            }
            return(result);
        }
        public InternationalResponse ProcessRequest(InternationalRequest request)
        {
            this.LastResponse = string.Empty;
            this.LastRequest = string.Empty;

            // Validate Request First
            InternationalResponse result = ValidateRequest(request);
            if (result.Errors.Count > 0) return result;

            try
            {

                string sURL = request.ApiUrl;
                sURL += "?API=IntlRateV2&XML=";

                // Build XML
                string requestXml = string.Empty;

                StringWriter sw = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
                XmlTextWriter xw = new XmlTextWriter(sw);

                xw.Formatting = Formatting.None;

                // Start Request
                xw.WriteStartElement("IntlRateV2Request");
                xw.WriteAttributeString("USERID", request.UserId);
                xw.WriteElementString("Revision", request.Revision);

                foreach (InternationalPackage pak in request.Packages)
                {
                    pak.WriteToXml(ref xw);
                }

                //End Rate Request
                xw.WriteEndElement();
                xw.Flush();
                xw.Close();
                requestXml = sw.GetStringBuilder().ToString();
                if (!requestXml.StartsWith("<"))
                {
                    requestXml = requestXml.Substring(1, requestXml.Length - 1);
                }

                // Diagnostics
                this.LastRequest = requestXml;
                
                string sResponse = string.Empty;
                string dataToSend = sURL + System.Web.HttpUtility.UrlEncode(requestXml);

                sResponse = readHtmlPage(dataToSend);

                // Diagnostics
                this.LastResponse = sResponse;                

                result = new InternationalResponse(sResponse);
            }
            catch (Exception ex)
            {
                result.Errors.Add(new USPSError() { Description = ex.Message + " " + ex.StackTrace, Source = "BV Exception" });
            }
            return result;
        }
        public InternationalResponse ValidateRequest(InternationalRequest request)
        {
            InternationalResponse result = new InternationalResponse();

            if (request == null)
            {
                result.Errors.Add(new USPSError() { Description = "Request was null" });
                return result;
            }

            if (request.Packages.Count < 1)
            {
                result.Errors.Add(new USPSError() { Description = "Request requires at least one package." });            
            }

            if (request.UserId.Trim().Length < 1)
            {
                result.Errors.Add(new USPSError() { Description = "UserId is Required for Requests" });
            }            

            return result;
        }