Beispiel #1
0
 protected void IndexResource(Net.NetContext context, String root, String key)
 {
     context.ContentType = "text/html";
     using (System.IO.Stream stream = typeof(WebServlet).Assembly
                                      .GetManifestResourceStream(String.Format("UMC.Data.Resources.header.html")))
     {
         context.Output.WriteLine(new System.IO.StreamReader(stream).ReadToEnd().Trim());
     }
     if (String.IsNullOrEmpty(root))
     {
         context.Output.WriteLine("    <script src=\"/js/UMC.js\"></script>");
     }
     else if (root.EndsWith(".js"))
     {
         context.Output.WriteLine("    <script src=\"/js/{0}\"></script>", root);
     }
     else
     {
         context.Output.Write("    <script>WDK.POS.Config({posurl: ['");
         context.Output.Write(root);
         context.Output.WriteLine("/', WDK.cookie('device') || WDK.cookie('device', WDK.uuid())].join('')});");
         context.Output.WriteLine("</script>");
     }
     using (System.IO.Stream stream = typeof(WebServlet).Assembly
                                      .GetManifestResourceStream(String.Format("UMC.Data.Resources.{0}.html", key)))
     {
         context.Output.WriteLine(new System.IO.StreamReader(stream).ReadToEnd());
     }
 }
Beispiel #2
0
        void IndexResource(Net.NetContext context, String key)
        {
            var ls   = context.RawUrl.Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
            var root = ls.Length == 0 ? "UMC" : ls[0];

            this.IndexResource(context, "/" + root, key);
        }
Beispiel #3
0
 /// <summary>
 /// On net context receive handler.
 /// </summary>
 /// <param name="sender">The application sender.</param>
 /// <param name="context">The current net context.</param>
 private void ManagerClient_OnNetContext(object sender, Net.NetContext context)
 {
     try
     {
         // Call the handler.
         object callback = null;
         object state    = null;
         if (_callback.TryGetValue("Transfer", out callback))
         {
             _state.TryGetValue("Transfer", out state);
             if (callback != null)
             {
                 Action <Nequeo.Net.NetContext, object> callbackAction = (Action <Nequeo.Net.NetContext, object>)callback;
                 callbackAction(context, state);
             }
         }
     }
     catch (Exception ex)
     {
         try
         {
             // An internal client error.
             AnyError("Error", "500", ex.Message);
         }
         catch { }
     }
 }
Beispiel #4
0
        void ResourceKey(Net.NetContext context, String path)
        {
            foreach (var key in ResourceKeys)
            {
                var initer = Reflection.CreateInstance(key.Type) as Data.Sql.Initializer;

                var node = Reflection.GetDataProvider("database", initer.ProviderName);
                if (node == null)
                {
                    IndexResource(context, "index");
                    return;
                }
                if (initer.Resource(context, path))
                {
                    return;
                }
            }
            context.Redirect(Data.WebResource.Instance().WebDomain());
        }
Beispiel #5
0
        void Process(NameValueCollection nvs,
                     Uri Url, Net.NetContext context, string model, string cmd, Action <Uri> redirec)
        {
            NameValueCollection QueryString = new NameValueCollection();

            var SessionKey = String.Empty;
            var paths      = new System.Collections.Generic.List <string>(Url.AbsolutePath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries));

            if (paths.Count > 0)
            {
                paths.RemoveAt(0);
            }
            if (paths.Count > 0)
            {
                SessionKey = paths[0];
                paths.RemoveAt(0);
            }

            if (String.IsNullOrEmpty(model))
            {
                if (Url.Segments.Length > 4)
                {
                    if (paths.Count > 0)
                    {
                        if (paths[paths.Count - 1].IndexOf('.') > -1)
                        {
                            paths.RemoveAt(paths.Count - 1);
                        }
                    }

                    if (paths.Count > 1)
                    {
                        model = paths[0];
                        cmd   = paths[1];
                    }
                    if (paths.Count > 2)
                    {
                        QueryString.Add(null, paths[2]);
                    }
                }
            }
            string start = nvs.Get("_start");

            for (var i = 0; i < nvs.Count; i++)
            {
                var key   = System.Web.HttpUtility.UrlDecode(nvs.GetKey(i));
                var value = nvs.Get(i);
                if (String.IsNullOrEmpty(key))
                {
                    if (String.IsNullOrEmpty(value) == false)
                    {
                        QueryString.Add(null, value);
                    }
                }
                else if (!key.StartsWith("_"))
                {
                    QueryString.Add(key, value);
                }
            }
            var jsonp = QueryString.Get("jsonp");

            QueryString.Remove("jsonp");
            WebSession session = null;
            var        writer  = new System.IO.StreamWriter(context.OutputStream);

            context.ContentType = "text/javascript;charset=utf-8";
            if (String.IsNullOrEmpty(cmd) == false && cmd.EndsWith(".html"))
            {
                context.ContentType = "text/html";
            }

            if (String.IsNullOrEmpty(SessionKey) == false)
            {
                context.Cookies[Membership.SessionCookieName] = SessionKey;
            }
            try
            {
                switch (model)
                {
                case "System":
                    switch (cmd)
                    {
                    case "Icon":
                    case "TimeSpan":
                    case "Start":
                    case "Setup":
                    case "Log":
                    case "Mapping":
                        session = new SysSession();
                        break;

                    default:
                        Authorization(context);
                        break;
                    }
                    break;

                default:
                    Authorization(context);
                    break;
                }
            }
            catch (Data.Sql.DbException exp)
            {
                if (exp.DbCommand == null)
                {
                    session = new SysSession();
                    model   = "System";
                    cmd     = "Start";
                }
                else
                {
                    throw exp;
                }
            }
            var client = new WebClient(Url, context.UrlReferrer, context.UserHostAddress, context.UserAgent, session);

            client.InputStream = context.InputStream;
            if (String.IsNullOrEmpty(jsonp) == false && jsonp.StartsWith("app"))
            {
                client.IsApp = true;
            }
            client.XHRTime = Utility.IntParse(context.Headers["umc-request-time"], 0) + 1;
            if (String.IsNullOrEmpty(start) == false)
            {
                client.Start(start);
            }
            else if (String.IsNullOrEmpty(model))
            {
                client.SendDialog(QueryString);
            }
            else if (String.IsNullOrEmpty(cmd))
            {
                if (model.StartsWith("[") == false)
                {
                    throw new Exception("Command is empty");
                }
            }
            else
            {
                client.Command(model, cmd, QueryString);
            }

            if (String.IsNullOrEmpty(model) == false && model.StartsWith("[") && String.IsNullOrEmpty(cmd))
            {
                client.JSONP(model, jsonp, writer);
            }
            else
            {
                if (String.IsNullOrEmpty(jsonp) == false)
                {
                    writer.Write(jsonp);
                    writer.Write('(');
                }
                client.WriteTo(writer, redirec);
                if (String.IsNullOrEmpty(jsonp) == false)
                {
                    writer.Write(")");
                }
            }
            writer.Flush();
        }
Beispiel #6
0
        /// <summary>
        /// On net context receive handler.
        /// </summary>
        /// <param name="sender">The application sender.</param>
        /// <param name="context">The current net context.</param>
        private void Client_OnNetContext(object sender, Net.NetContext context)
        {
            Net.NetRequest  request   = null;
            Net.NetResponse response  = null;
            bool            keepAlive = true;
            bool            isError   = true;

            try
            {
                string resource          = "";
                string executionMember   = "";
                string statusCode        = "";
                string statusDescription = "";

                request  = context.NetRequest;
                response = context.NetResponse;

                // Get the response headers, and set the response headers.
                List <NameValue> headers = base.ParseHeaders(response.Input, out resource, base.HeaderTimeout, base.MaximumReadLength);
                if (headers != null)
                {
                    // Set the response headers.
                    response.ReadNetResponseHeaders(headers, resource);

                    // Should the connection be kept alive.
                    keepAlive         = response.KeepAlive;
                    statusCode        = response.StatusCode.ToString();
                    statusDescription = response.StatusDescription;

                    // Get the execution member.
                    if (!String.IsNullOrEmpty(response.Headers["Member"]))
                    {
                        // Get the execution member.
                        executionMember = response.Headers["Member"].Trim();
                        switch (executionMember.ToUpper())
                        {
                        case "OCSP_CS":
                            // CertificateStatus
                            isError = CertificateStatus(response);
                            break;
                        }
                    }
                    else
                    {
                        // Find the response type sent from the server.
                        if (!String.IsNullOrEmpty(response.ContentType))
                        {
                            // If the response is ocsp.
                            if (response.ContentType.ToLower().Contains("ocsp-response"))
                            {
                                // CertificateStatus
                                isError = CertificateStatus(response);
                            }
                        }
                    }
                }
                else
                {
                    // No headers have been found.
                    keepAlive = false;
                    throw new Exception("No headers have been found.");
                }

                // If error.
                if (isError)
                {
                    // An internal client error.
                    AnyError(executionMember, statusCode, statusDescription);
                }
            }
            catch (Exception ex)
            {
                try
                {
                    // An internal client error.
                    AnyError("Error", "500", ex.Message);
                }
                catch { }
            }

            // If keep alive.
            if (keepAlive)
            {
                // Look for a new response if this one has been completed.
                if (response != null)
                {
                    try
                    {
                        // If the response stream is active.
                        if (response.Input != null)
                        {
                            // If another response is pending
                            // then start the process again.
                            if (response.Input.Length > 0)
                            {
                                Client_OnNetContext(this, context);
                            }
                        }
                    }
                    catch { }
                }
            }
        }