namespace Janrain.OpenId.Consumer { using System; using System.Net; using System.IO; [Serializable] public abstract class Fetcher { public static uint MAX_BYTES = (1024 * 1024); // 1MB protected static int ReadData(HttpWebResponse resp, uint max_bytes, ref byte[] buffer) { MemoryStream ms = null; Stream stream = resp.GetResponseStream(); buffer = Util.ReadAndClose(stream); return buffer.Length; //int length = (int)resp.ContentLength; //bool nolength = (length == (-1)); //int size = (nolength ? 8192 : length); //if (nolength) // ms = new MemoryStream(); //size = Math.Min(size, (int)max_bytes); //int nread = 0; //int offset = 0; //buffer = new byte[size]; //while ((nread = stream.Read(buffer, offset, size)) != 0) //{ // if (nolength) // ms.Write(buffer, 0, nread); // else // { // size -= nread; // offset += nread; // } //} //if (nolength) //{ // buffer = ms.ToArray(); // offset = buffer.Length; //} //return offset; } protected static FetchResponse GetResponse(HttpWebResponse resp, uint maxRead) { byte[] data = null; int length = ReadData(resp, maxRead, ref data); return new FetchResponse(resp.StatusCode, resp.ResponseUri, resp.CharacterSet, data, length); } public abstract FetchResponse Get(Uri uri, uint maxRead); public virtual FetchResponse Get(Uri uri) { return Get(uri, MAX_BYTES); } public abstract FetchResponse Post(Uri uri, byte[] body, uint maxRead); public virtual FetchResponse Post(Uri uri, byte[] body) { return Post(uri, body, MAX_BYTES); } } }