Example #1
0
        public StatementsResultLRSResponse QueryStatements(StatementsQuery query)
        {
            var r = new StatementsResultLRSResponse();

            var req = new MyHTTPRequest();

            req.method      = "GET";
            req.resource    = "statements";
            req.queryParams = query.ToParameterMap(version);

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;
            r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content)));

            return(r);
        }
Example #2
0
        public StatementsResultLRSResponse MoreStatements(StatementsResult result)
        {
            var r = new StatementsResultLRSResponse();

            var req = new MyHTTPRequest();

            req.method   = "GET";
            req.resource = endpoint.GetLeftPart(UriPartial.Authority);
            if (!req.resource.EndsWith("/"))
            {
                req.resource += "/";
            }
            req.resource += result.more;

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;
            r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content)));

            return(r);
        }
Example #3
0
        private StatementLRSResponse GetStatement(Dictionary <string, string> queryParams)
        {
            var r = new StatementLRSResponse();

            var req = new MyHTTPRequest();

            req.method      = "GET";
            req.resource    = "statements";
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;
            r.content = new Statement(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content)));

            return(r);
        }
Example #4
0
        private LRSResponse SaveDocument(string resource, Dictionary <string, string> queryParams, Document document)
        {
            var r = new LRSResponse();

            var req = new MyHTTPRequest();

            req.method      = "PUT";
            req.resource    = resource;
            req.queryParams = queryParams;
            req.contentType = document.contentType;
            req.content     = document.content;

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.NoContent)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;

            return(r);
        }
Example #5
0
        private ProfileKeysLRSResponse GetProfileKeys(string resource, Dictionary <string, string> queryParams)
        {
            var r = new ProfileKeysLRSResponse();

            var req = new MyHTTPRequest();

            req.method      = "GET";
            req.resource    = resource;
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;

            var keys = JArray.Parse(Encoding.UTF8.GetString(res.content));

            if (keys.Count > 0)
            {
                r.content = new List <string>();
                foreach (var key in keys)
                {
                    r.content.Add((string)key);
                }
            }

            return(r);
        }
Example #6
0
        public async Task <StatementLRSResponse> SaveStatement(Statement statement)
        {
            var r   = new StatementLRSResponse();
            var req = new MyHTTPRequest();

            req.queryParams = new Dictionary <string, string>();
            req.resource    = "statements";

            if (statement.id == null)
            {
                req.method = HttpMethod.Post;
            }
            else
            {
                req.method = HttpMethod.Put;
                req.queryParams.Add("statementId", statement.id.ToString());
            }

            req.contentType = "application/json";
            req.content     = Encoding.UTF8.GetBytes(statement.ToJSON(version));

            var res = await MakeRequest(req);

            if (statement.id == null)
            {
                if (res.status != HttpStatusCode.OK)
                {
                    r.success       = false;
                    r.httpException = res.ex;
                    r.SetErrMsgFromBytes(res.content, (int)res.status);
                    return(r);
                }

                var ids = JArray.Parse(Encoding.UTF8.GetString(res.content, 0, res.content.Length));
                statement.id = new Guid((string)ids[0]);
            }
            else
            {
                if (res.status != HttpStatusCode.NoContent)
                {
                    r.success       = false;
                    r.httpException = res.ex;
                    r.SetErrMsgFromBytes(res.content);
                    return(r);
                }
            }

            r.success = true;
            r.content = statement;

            return(r);
        }
Example #7
0
        public StatementLRSResponse SaveStatement(Statement statement)
        {
            var r   = new StatementLRSResponse();
            var req = new MyHTTPRequest();

            req.queryParams = new Dictionary <String, String>();
            req.resource    = "statements";

            if (statement.id == null)
            {
                req.method = "POST";
            }
            else
            {
                req.method = "PUT";
                req.queryParams.Add("statementId", statement.id.ToString());
            }

            req.contentType = "application/json";
            req.content     = Encoding.UTF8.GetBytes(statement.ToJSON(version));

            var res = MakeSyncRequest(req); // TODO: Blocking

            if (statement.id == null)
            {
                if (res.status != HttpStatusCode.OK)
                {
                    r.success       = false;
                    r.httpException = res.ex;
                    r.SetErrMsgFromBytes(res.content);
                    return(r);
                }

                var ids = JArray.Parse(Encoding.UTF8.GetString(res.content));
                statement.id = new Guid((String)ids[0]);
            }
            else
            {
                if (res.status != HttpStatusCode.NoContent)
                {
                    r.success       = false;
                    r.httpException = res.ex;
                    r.SetErrMsgFromBytes(res.content);
                    return(r);
                }
            }

            r.success = true;
            r.content = statement;

            return(r);
        }
Example #8
0
        async Task <MyHTTPResponse> GetDocument(string resource, Dictionary <string, string> queryParams, Document document)
        {
            var req = new MyHTTPRequest();

            req.method      = HttpMethod.Get;
            req.resource    = resource;
            req.queryParams = queryParams;
            var res = await MakeRequest(req);

            if (res.status == HttpStatusCode.OK)
            {
                document.content     = res.content;
                document.contentType = res.contentType;
                document.timestamp   = res.lastModified;
                document.etag        = res.etag;
            }

            return(res);
        }
Example #9
0
        private MyHTTPResponse GetDocument(String resource, Dictionary <String, String> queryParams, Document document)
        {
            var req = new MyHTTPRequest();

            req.method      = "GET";
            req.resource    = resource;
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);

            if (res.status == HttpStatusCode.OK)
            {
                document.content     = res.content;
                document.contentType = res.contentType;
                document.timestamp   = res.lastModified;
                document.etag        = res.etag;
            }

            return(res);
        }
Example #10
0
        public async Task <StatementsResultLRSResponse> SaveStatements(List <Statement> statements)
        {
            var r = new StatementsResultLRSResponse();

            var req = new MyHTTPRequest();

            req.resource    = "statements";
            req.method      = HttpMethod.Post;
            req.contentType = "application/json";

            var jarray = new JArray();

            foreach (Statement st in statements)
            {
                jarray.Add(st.ToJObject(version));
            }
            req.content = Encoding.UTF8.GetBytes(jarray.ToString());

            var res = await MakeRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content, (int)res.status);
                return(r);
            }

            var ids = JArray.Parse(Encoding.UTF8.GetString(res.content, 0, res.content.Length));

            for (int i = 0; i < ids.Count; i++)
            {
                statements[i].id = new Guid((string)ids[i]);
            }

            r.success = true;
            r.content = new StatementsResult(statements);

            return(r);
        }
Example #11
0
        async Task <LRSResponse> SaveDocument(string resource, Dictionary <string, string> queryParams, Document document, RequestType requestType = RequestType.put)
        {
            var r = new LRSResponse();

            var req = new MyHTTPRequest();

            if (requestType == RequestType.post)
            {
                req.method = HttpMethod.Post;
            }
            else
            {
                req.method = HttpMethod.Put;
            }
            req.resource    = resource;
            req.queryParams = queryParams;
            req.contentType = document.contentType;
            req.content     = document.content;
            if (document.etag != null)
            {
                req.headers = new Dictionary <string, string>();
                req.headers.Add("If-Match", document.etag);
            }
            var res = await MakeRequest(req);

            if (res.status != HttpStatusCode.NoContent)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content, (int)res.status);
                return(r);
            }

            r.success = true;

            return(r);
        }
Example #12
0
        public AboutLRSResponse About()
        {
            var r = new AboutLRSResponse();

            var req = new MyHTTPRequest();

            req.method   = "GET";
            req.resource = "about";

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;
            r.content = new About(Encoding.UTF8.GetString(res.content));

            return(r);
        }
Example #13
0
        private LRSResponse DeleteDocument(String resource, Dictionary <String, String> queryParams)
        {
            var r = new LRSResponse();

            var req = new MyHTTPRequest();

            req.method      = "DELETE";
            req.resource    = resource;
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);

            if (res.status != HttpStatusCode.NoContent)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return(r);
            }

            r.success = true;

            return(r);
        }
Example #14
0
        async Task <LRSResponse> DeleteDocument(string resource, Dictionary <string, string> queryParams)
        {
            var r = new LRSResponse();

            var req = new MyHTTPRequest();

            req.method      = HttpMethod.Delete;
            req.resource    = resource;
            req.queryParams = queryParams;

            var res = await MakeRequest(req);

            if (res.status != HttpStatusCode.NoContent)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content, (int)res.status);
                return(r);
            }

            r.success = true;

            return(r);
        }
Example #15
0
        public async Task <AboutLRSResponse> About()
        {
            var r = new AboutLRSResponse();

            var req = new MyHTTPRequest();

            req.method   = HttpMethod.Get;
            req.resource = "about";

            var res = await MakeRequest(req);

            if (res.status != HttpStatusCode.OK)
            {
                r.success       = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content, (int)res.status);
                return(r);
            }

            r.success = true;
            r.content = new About(Encoding.UTF8.GetString(res.content, 0, res.content.Length));

            return(r);
        }
Example #16
0
        public StatementsResultLRSResponse QueryStatements(StatementsQuery query)
        {
            var r = new StatementsResultLRSResponse();

            var req = new MyHTTPRequest();
            req.method = "GET";
            req.resource = "statements";
            req.queryParams = query.ToParameterMap(version);

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.OK)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            r.success = true;
            r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content)));

            return r;
        }
Example #17
0
        public StatementsResultLRSResponse SaveStatements(List<Statement> statements)
        {
            var r = new StatementsResultLRSResponse();

            var req = new MyHTTPRequest();
            req.resource = "statements";
            req.method = "POST";
            req.contentType = "application/json";

            var jarray = new JArray();
            foreach (Statement st in statements)
            {
                jarray.Add(st.ToJObject(version));
            }
            req.content = Encoding.UTF8.GetBytes(jarray.ToString());

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.OK)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            var ids = JArray.Parse(Encoding.UTF8.GetString(res.content));
            for (int i = 0; i < ids.Count; i++)
            {
                statements[i].id = new Guid((String)ids[i]);
            }

            r.success = true;
            r.content = new StatementsResult(statements);

            return r;
        }
Example #18
0
        public StatementLRSResponse SaveStatement(Statement statement)
        {
            var r = new StatementLRSResponse();
            var req = new MyHTTPRequest();
            req.queryParams = new Dictionary<String, String>();
            req.resource = "statements";

            if (statement.id == null)
            {
                req.method = "POST";
            }
            else
            {
                req.method = "PUT";
                req.queryParams.Add("statementId", statement.id.ToString());
            }

            req.contentType = "application/json";
            req.content = Encoding.UTF8.GetBytes(statement.ToJSON(version));

            var res = MakeSyncRequest(req);
            if (statement.id == null)
            {
                if (res.status != HttpStatusCode.OK)
                {
                    r.success = false;
                    r.httpException = res.ex;
                    r.SetErrMsgFromBytes(res.content);
                    return r;
                }

                var ids = JArray.Parse(Encoding.UTF8.GetString(res.content));
                statement.id = new Guid((String)ids[0]);
            }
            else {
                if (res.status != HttpStatusCode.NoContent)
                {
                    r.success = false;
                    r.httpException = res.ex;
                    r.SetErrMsgFromBytes(res.content);
                    return r;
                }
            }

            r.success = true;
            r.content = statement;

            return r;
        }
Example #19
0
        public AboutLRSResponse About()
        {
            var r = new AboutLRSResponse();

            var req = new MyHTTPRequest();
            req.method = "GET";
            req.resource = "about";

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.OK)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            r.success = true;
            r.content = new About(Encoding.UTF8.GetString(res.content));

            return r;
        }
Example #20
0
        private StatementLRSResponse GetStatement(Dictionary<String, String> queryParams)
        {
            var r = new StatementLRSResponse();

            var req = new MyHTTPRequest();
            req.method = "GET";
            req.resource = "statements";
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.OK)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            r.success = true;
            r.content = new Statement(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content)));

            return r;
        }
Example #21
0
        private LRSResponse DeleteDocument(String resource, Dictionary<String, String> queryParams)
        {
            var r = new LRSResponse();

            var req = new MyHTTPRequest();
            req.method = "DELETE";
            req.resource = resource;
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.NoContent)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            r.success = true;

            return r;
        }
Example #22
0
        private ProfileKeysLRSResponse GetProfileKeys(String resource, Dictionary<String, String> queryParams)
        {
            var r = new ProfileKeysLRSResponse();

            var req = new MyHTTPRequest();
            req.method = "GET";
            req.resource = resource;
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.OK)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            r.success = true;

            var keys = JArray.Parse(Encoding.UTF8.GetString(res.content));
            if (keys.Count > 0) {
                r.content = new List<String>();
                foreach (JToken key in keys) {
                    r.content.Add((String)key);
                }
            }

            return r;
        }
Example #23
0
        private MyHTTPResponse GetDocument(String resource, Dictionary<String, String> queryParams, Document document)
        {
            var req = new MyHTTPRequest();
            req.method = "GET";
            req.resource = resource;
            req.queryParams = queryParams;

            var res = MakeSyncRequest(req);
            if (res.status == HttpStatusCode.OK)
            {
                document.content = res.content;
                document.contentType = res.contentType;
                document.timestamp = res.lastModified;
                document.etag = res.etag;
            }

            return res;
        }
Example #24
0
        private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req)
        {
            String url;

            if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase))
            {
                url = req.resource;
            }
            else
            {
                url = endpoint.ToString();
                if (!url.EndsWith("/") && !req.resource.StartsWith("/"))
                {
                    url += "/";
                }
                url += req.resource;
            }

            if (req.queryParams != null)
            {
                String qs = "";
                foreach (KeyValuePair <String, String> entry in req.queryParams)
                {
                    if (qs != "")
                    {
                        qs += "&";
                    }
                    qs += HttpUtility.UrlEncode(entry.Key) + "=" + HttpUtility.UrlEncode(entry.Value);
                }
                if (qs != "")
                {
                    url += "?" + qs;
                }
            }

            // TODO: handle special properties we recognize, such as content type, modified since, etc.
            var webReq = (HttpWebRequest)WebRequest.Create(url);

            webReq.Method = req.method;

            webReq.Headers.Add("X-Experience-API-Version", version.ToString());
            if (auth != null)
            {
                webReq.Headers.Add("Authorization", auth);
            }
            if (req.headers != null)
            {
                foreach (KeyValuePair <String, String> entry in req.headers)
                {
                    webReq.Headers.Add(entry.Key, entry.Value);
                }
            }

            if (req.contentType != null)
            {
                webReq.ContentType = req.contentType;
            }
            else
            {
                webReq.ContentType = "application/octet-stream";
            }

            if (req.content != null)
            {
                webReq.ContentLength = req.content.Length;
                using (var stream = webReq.GetRequestStream())
                {
                    stream.Write(req.content, 0, req.content.Length);
                }
            }

            MyHTTPResponse resp;

            try
            {
                using (var webResp = (HttpWebResponse)webReq.GetResponse())
                {
                    resp = new MyHTTPResponse(webResp);
                }
            }
            catch (WebException ex)
            {
                if (ex.Response != null)
                {
                    using (var webResp = (HttpWebResponse)ex.Response)
                    {
                        resp = new MyHTTPResponse(webResp);
                    }
                }
                else
                {
                    resp         = new MyHTTPResponse();
                    resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'");
                }
                resp.ex = ex;
            }

            return(resp);
        }
Example #25
0
        async Task <MyHTTPResponse> MakeRequest(MyHTTPRequest req)
        {
            string url;

            if (req.resource.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                url = req.resource;
            }
            else
            {
                url = endpoint.ToString();
                if (!url.EndsWith("/", StringComparison.Ordinal) && !req.resource.StartsWith("/", StringComparison.Ordinal))
                {
                    url += "/";
                }
                url += req.resource;
            }

            if (req.queryParams != null)
            {
                string qs = "";
                foreach (KeyValuePair <string, string> entry in req.queryParams)
                {
                    if (qs != "")
                    {
                        qs += "&";
                    }
                    qs += WebUtility.UrlEncode(entry.Key) + "=" + WebUtility.UrlEncode(entry.Value);
                }
                if (qs != "")
                {
                    url += "?" + qs;
                }
            }

            var webReq = new HttpRequestMessage(req.method, new Uri(url));

            // We only have one client. We cannot modify it while its in use.
            await makeRequestSemaphore.WaitAsync();

            webReq.Headers.Add("X-Experience-API-Version", version.ToString());
            webReq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(req.contentType ?? "application/content-stream"));

            if (auth != null)
            {
                webReq.Headers.Add("Authorization", auth);
            }
            if (req.headers != null)
            {
                foreach (var entry in req.headers)
                {
                    if (webReq.Headers.Contains(entry.Key))
                    {
                        makeRequestSemaphore.Release();
                        throw new InvalidOperationException($"Tried to add duplicate entry {entry.Key} to request headers with value {entry.Value}; previous value {client.DefaultRequestHeaders.GetValues(entry.Key)}");
                    }

                    webReq.Headers.Add(entry.Key, entry.Value);
                }
            }

            if (req.content != null)
            {
                webReq.Content = new ByteArrayContent(req.content);
                webReq.Content.Headers.Add("Content-Length", req.content.Length.ToString());
                webReq.Content.Headers.Add("Content-Type", req.contentType ?? "text/plain");
            }

            MyHTTPResponse resp;

            try
            {
                var response = await client.SendAsync(webReq).ConfigureAwait(false);

                resp = new MyHTTPResponse(response);
            }
            catch (WebException ex)
            {
                if (ex.Response != null)
                {
                    resp = new MyHTTPResponse();

                    using (var stream = ex.Response.GetResponseStream())
                    {
                        resp.content = ReadFully(stream, (int)ex.Response.ContentLength);
                    }

                    resp.contentType = ex.Response.ContentType;
                    resp.ex          = ex;
                }
                else
                {
                    resp         = new MyHTTPResponse();
                    resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'");
                }
                resp.ex = ex;
            }
            finally
            {
                makeRequestSemaphore.Release();
            }

            return(resp);
        }
Example #26
0
        public StatementsResultLRSResponse MoreStatements(StatementsResult result)
        {
            var r = new StatementsResultLRSResponse();

            var req = new MyHTTPRequest();
            req.method = "GET";
            req.resource = endpoint.GetLeftPart(UriPartial.Authority);
            if (! req.resource.EndsWith("/")) {
                req.resource += "/";
            }
            req.resource += result.more;

            var res = MakeSyncRequest(req);
            if (res.status != HttpStatusCode.OK)
            {
                r.success = false;
                r.httpException = res.ex;
                r.SetErrMsgFromBytes(res.content);
                return r;
            }

            r.success = true;
            r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content)));

            return r;
        }
Example #27
0
        private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req)
        {
            String url;
            if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase))
            {
                url = req.resource;
            }
            else
            {
                url = endpoint.ToString();
                if (! url.EndsWith("/") && ! req.resource.StartsWith("/")) {
                    url += "/";
                }
                url += req.resource;
            }

            if (req.queryParams != null)
            {
                String qs = "";
                foreach (KeyValuePair<String, String> entry in req.queryParams)
                {
                    if (qs != "")
                    {
                        qs += "&";
                    }
                    qs += HttpUtility.UrlEncode(entry.Key) + "=" + HttpUtility.UrlEncode(entry.Value);
                }
                if (qs != "")
                {
                    url += "?" + qs;
                }
            }

            // TODO: handle special properties we recognize, such as content type, modified since, etc.
            var webReq = (HttpWebRequest)WebRequest.Create(url);
            webReq.Method = req.method;

            webReq.Headers.Add("X-Experience-API-Version", version.ToString());
            if (auth != null)
            {
                webReq.Headers.Add("Authorization", auth);
            }
            if (req.headers != null)
            {
                foreach (KeyValuePair<String, String> entry in req.headers)
                {
                    webReq.Headers.Add(entry.Key, entry.Value);
                }
            }

            if (req.contentType != null)
            {
                webReq.ContentType = req.contentType;
            }
            else
            {
                webReq.ContentType = "application/octet-stream";
            }

            if (req.content != null)
            {
                webReq.ContentLength = req.content.Length;
                using (var stream = webReq.GetRequestStream())
                {
                    stream.Write(req.content, 0, req.content.Length);
                }
            }

            MyHTTPResponse resp;

            try
            {
                using (var webResp = (HttpWebResponse)webReq.GetResponse())
                {
                    resp = new MyHTTPResponse(webResp);
                }
            }
            catch (WebException ex)
            {
                if (ex.Response != null)
                {
                    using (var webResp = (HttpWebResponse)ex.Response)
                    {
                        resp = new MyHTTPResponse(webResp);
                    }
                }
                else
                {
                    resp = new MyHTTPResponse();
                    resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'");
                }
                resp.ex = ex;
            }

            return resp;
        }
Example #28
0
        private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req)
        {
            String url;

            // Replaced: if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) // Unity build error
            // With....
            if (req.resource.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                url = req.resource;
            }
            else
            {
                url = endpoint.ToString();
                if (!url.EndsWith("/") && !req.resource.StartsWith("/"))
                {
                    url += "/";
                }
                url += req.resource;
            }
            ///////////
            ///////////
            ///////////
            if (req.queryParams != null)
            {
                String qs = "";
                foreach (KeyValuePair <String, String> entry in req.queryParams)
                {
                    if (qs != "")
                    {
                        qs += "&";
                    }
                    qs += WebUtility.UrlEncode(entry.Key) + "=" + WebUtility.UrlEncode(entry.Value);
                }
                if (qs != "")
                {
                    url += "?" + qs;
                }
            }

            /////////
            ////////
            ////////
            // TODO: handle special properties we recognize, such as content type, modified since, etc.
            var unityWebReq = new UnityWebRequest();

            unityWebReq.url = url;

            unityWebReq.method = req.method;
            unityWebReq.SetRequestHeader("X-Experience-API-Version", version.ToString());

            if (auth != null)
            {
                unityWebReq.SetRequestHeader("Authorization", auth);
            }
            if (req.headers != null)
            {
                foreach (KeyValuePair <String, String> entry in req.headers)
                {
                    unityWebReq.SetRequestHeader(entry.Key, entry.Value);
                }
            }

            if (req.contentType != null)
            {
                unityWebReq.SetRequestHeader("Content-Type", req.contentType);
            }
            else
            {
                unityWebReq.SetRequestHeader("Content-type", "application/octet-stream");
            }

            if (req.content != null)
            {
                unityWebReq.SetRequestHeader("content-length", req.content.Length.ToString());

                unityWebReq.uploadHandler   = (UploadHandler) new UploadHandlerRaw(req.content);
                unityWebReq.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
                unityWebReq.chunkedTransfer = false; // Is this needed?
                unityWebReq.SendWebRequest();
                unityWebReq.timeout = 10;

                while (!unityWebReq.isDone) /// erghhhh, is this safe? Make sure there is a timeout attached in this class somewhere...
                {
                    // Wait. Makes it sync in Unity. Think this is fineeeee
                }
            }


            // Do we need to use a "while(!request.downloadHandler.isDone)" ????
            MyHTTPResponse resp = new MyHTTPResponse(unityWebReq);

            // LAAR TODO: Ensure that all functionality / safety guards from below are contained.

            /*
             * try
             * {
             *
             * using (var webResp = (HttpWebResponse)webReq.GetResponse())  // Unity build error
             * {
             *  resp = new MyHTTPResponse(webResp);
             * }
             *
             * }
             * catch (WebException ex)
             * {
             *  if (ex.Response != null)
             *  {
             *      using (var webResp = (HttpWebResponse)ex.Response)
             *      {
             *          resp = new MyHTTPResponse(webResp);
             *      }
             *  }
             *  else
             *  {
             *      resp = new MyHTTPResponse();
             *      resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'");
             *  }
             *  resp.ex = ex;
             * }
             * // */

            return(resp);
        }