public MimeProxy(Stream mimeStream) { if (null == mimeStream) throw new ArgumentNullException(); CreateImplementor(); CreateRecipientEnumerators(); MimeSize = mimeStream.Length; if (MimeSize > 5000000) // 5 megablobs -> assign via a file, takes less memory { // save to file string sTempFile = Path.GetTempFileName(); using (FileStream fs = new FileStream(sTempFile, FileMode.Create)) { Workshare.Policy.StreamUtils.CopyStreamToStream(mimeStream, fs); } Chilkat.Mime mime = new Chilkat.Mime(); mime.UnlockComponent(@"WRKSHRSMIME_FGWvbpcy2P6f"); if (mime.LoadMimeFile(sTempFile)) { m_mimeImplementor.SetFromMimeObject(mime); mime.Dispose(); } File.Delete(sTempFile); } else { mimeStream.Position = 0; this.MimeContent = ReadTextFromStream(mimeStream, Encoding.Unicode); if (this.MimeContent == "\r\n\r\n") { this.MimeContent = ReadTextFromStream(mimeStream, Encoding.ASCII); } mimeStream.Position = 0; } }
// Remember, this callback happens in a background thread... void m_clientSock_OnTaskCompleted(object sender, Chilkat.TaskCompletedEventArgs args) { if (args.Task.UserData.Equals("connect")) { if (args.Task.GetResultBool() == false) { fgAppendToTextBox1("Connect failed!\r\n"); fgAppendToTextBox1(args.Task.ResultErrorText); return; } // This was our ConnectAsync call that completed... fgAppendToTextBox1("Connect completed.\r\n"); sendHttpGet(); } else if (args.Task.UserData.Equals("sendHttpGet")) { if (args.Task.GetResultBool() == false) { fgAppendToTextBox1("Send GET failed!\r\n"); fgAppendToTextBox1(args.Task.ResultErrorText); return; } fgAppendToTextBox1("GET request sent.\r\n"); readHttpResponseHeader(); } else if (args.Task.UserData.Equals("readResponseHeader")) { if (args.Task.TaskSuccess == false) { fgAppendToTextBox1("Read response header failed!\r\n"); fgAppendToTextBox1(args.Task.ResultErrorText); return; } fgAppendToTextBox1("Received response header.\r\n"); string receivedString = args.Task.GetResultString(); fgAppendToTextBox1(receivedString); // The receivedString contains the HTTP start line followed by the MIME response header. // (for this example, discard the start line) int endOfFirstLine = receivedString.IndexOf("\r\n"); string responseHeader = receivedString.Substring(endOfFirstLine + 2); // Parse the MIME to find out the size of the HTTP response body. Chilkat.Mime mime = new Chilkat.Mime(); mime.LoadMime(responseHeader); string strContentLength = mime.GetHeaderField("Content-Length"); if (strContentLength == null) { fgAppendToTextBox1("No Content-Length header in the response!\r\n"); return; } int contentLength = Convert.ToInt32(strContentLength); readHttpResponseBody(contentLength); } else if (args.Task.UserData.Equals("readResponseBody")) { if (args.Task.TaskSuccess == false) { fgAppendToTextBox1("Read response body failed!\r\n"); fgAppendToTextBox1(args.Task.ResultErrorText); return; } fgAppendToTextBox1("Received response body.\r\n"); byte[] responseBody = args.Task.GetResultBytes(); // For this example, assume utf-8. string responseBodyStr = System.Text.Encoding.UTF8.GetString(responseBody); fgAppendToTextBox1(responseBodyStr); fgAppendToTextBox1("\r\nHTTP GET Completed Successfully\r\n"); } }