Пример #1
0
        internal bool Write(HttpWebRequest request, byte [] buffer, int offset, int size, ref string err_msg)
        {
            err_msg = null;
            Stream s = null;

            lock (this) {
                if (Data.request != request)
                {
                    throw new ObjectDisposedException(typeof(NetworkStream).FullName);
                }
                s = nstream;
                if (s == null)
                {
                    return(false);
                }
            }

            try {
                s.Write(buffer, offset, size);
                // here SSL handshake should have been done
                if (ssl && !certsAvailable)
                {
                    GetCertificates(s);
                }
            } catch (Exception e) {
                err_msg = e.Message;
                WebExceptionStatus wes = WebExceptionStatus.SendFailure;
                string             msg = "Write: " + err_msg;
                if (e is WebException)
                {
                    HandleError(wes, e, msg);
                    return(false);
                }

                // if SSL is in use then check for TrustFailure
                if (ssl)
                {
#if SECURITY_DEP && MONOTOUCH
                    HttpsClientStream https = (s as HttpsClientStream);
                    if (https.TrustFailure)
                    {
#else
                    if ((bool)piTrustFailure.GetValue(s, null))
                    {
#endif
                        wes = WebExceptionStatus.TrustFailure;
                        msg = "Trust failure";
                    }
                }

                HandleError(wes, e, msg);
                return(false);
            }
            return(true);
        }
Пример #2
0
        internal void GetCertificates(Stream stream)
        {
            // here the SSL negotiation have been done
#if SECURITY_DEP && MONOTOUCH
            HttpsClientStream s      = (stream as HttpsClientStream);
            X509Certificate   client = s.SelectedClientCertificate;
            X509Certificate   server = s.ServerCertificate;
#else
            X509Certificate client = (X509Certificate)piClient.GetValue(stream, null);
            X509Certificate server = (X509Certificate)piServer.GetValue(stream, null);
#endif
            sPoint.SetCertificates(client, server);
            certsAvailable = (server != null);
        }