예제 #1
0
        public void ProcessRequest(HttpApplication context)
        {
            if (_host == null)
            {
                return;
            }
            if (context.Request.ContentType == ContentType.XForm)
            {
                string command = context.Request.Params[Messaging.Endpoints.StreamingAmfEndpoint.CommandParameterName];
                if (!Messaging.Endpoints.StreamingAmfEndpoint.OpenCommand.Equals(command) && !Messaging.Endpoints.StreamingAmfEndpoint.CloseCommand.Equals(command))
                {
                    return;
                }
                if (context.Request.UrlReferrer != null && !context.Request.UrlReferrer.ToString().EndsWith(".swf"))
                {
                    return;
                }

                context.Response.Clear();
                //ThreadContext.Properties["ClientIP"] = HttpContext.Current.Request.UserHostAddress;
                // NOTE TODO Common.Logging push ip into ClientIP variable
                if (Log.IsDebugEnabled)
                {
                    Log.Debug(__Res.GetString(__Res.Amf_Begin));
                }

                try
                {
                    FluorineWebContext.Initialize();

                    if (_host.MessageServer != null)
                    {
                        _host.MessageServer.Service();
                    }
                    else
                    {
                        if (Log.IsFatalEnabled)
                        {
                            Log.Fatal(__Res.GetString(__Res.MessageServer_AccessFail));
                        }
                    }
                    if (Log.IsDebugEnabled)
                    {
                        Log.Debug(__Res.GetString(__Res.Amf_End));
                    }

                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
                catch (Exception ex)
                {
                    Log.Fatal(__Res.GetString(__Res.Amf_Fatal), ex);
                    context.Response.Clear();
                    context.Response.ClearHeaders();//FluorineHttpApplicationContext modifies headers
                    context.Response.Status = __Res.GetString(__Res.Amf_Fatal404) + " " + ex.Message;
                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Occurs as the first event in the HTTP pipeline chain of execution when ASP.NET responds to a request.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        private void ApplicationBeginRequest(object sender, EventArgs e)
        {
            HttpApplication httpApplication = (HttpApplication)sender;
            HttpRequest     httpRequest     = httpApplication.Request;

            for (int i = 0; i < _handlers.Count; i++)
            {
                _handlers[i].BeginRequest(httpApplication);
            }

            if (_serviceBrowserRenderer != null)
            {
                if (_serviceBrowserRenderer.CanRender(httpRequest))
                {
                    CompressContent(httpApplication);

                    FluorineWebContext.Initialize();
                    httpApplication.Response.Clear();
                    //httpApplication.Response.ClearHeaders();
                    _serviceBrowserRenderer.Render(httpApplication);
                    httpApplication.CompleteRequest();
                    return;
                }
            }
        }
예제 #3
0
        public void BeginRequest(HttpApplication context)
        {
            if (_host == null)
            {
                return;
            }
            if (context.Request.ContentType == ContentType.RTMPT)
            {
                context.Response.Clear();
                context.Response.ContentType = ContentType.RTMPT;
                //ThreadContext.Properties["ClientIP"] = HttpContext.Current.Request.UserHostAddress;
                // NOTE TODO Common.Logging push ip into ClientIP variable
                if (Log.IsDebugEnabled)
                {
                    Log.Debug(__Res.GetString(__Res.Rtmpt_Begin));
                }

                try
                {
                    FluorineWebContext.Initialize();
                    if (context.Request.Headers["RTMPT-command"] != null)
                    {
                        Log.Debug(string.Format("ISAPI rewrite, original URL {0}", context.Request.Headers["RTMPT-command"]));
                    }

                    if (_host.MessageServer != null)
                    {
                        _host.MessageServer.ServiceRtmpt();
                    }
                    else
                    {
                        if (Log.IsFatalEnabled)
                        {
                            Log.Fatal(__Res.GetString(__Res.MessageServer_AccessFail));
                        }
                    }
                    if (Log.IsDebugEnabled)
                    {
                        Log.Debug(__Res.GetString(__Res.Rtmpt_End));
                    }
                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
                catch (Exception ex)
                {
                    Log.Fatal(__Res.GetString(__Res.Rtmpt_Fatal), ex);
                    context.Response.Clear();
                    context.Response.ClearHeaders();
                    context.Response.Status = __Res.GetString(__Res.Rtmpt_Fatal404) + " " + ex.Message;
                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
            }
        }
예제 #4
0
 internal void HandleRtmpt(HttpApplication httpApplication)
 {
     if (httpApplication.Request.ContentType == "application/x-fcs")
     {
         httpApplication.Response.Clear();
         httpApplication.Response.ContentType = "application/x-fcs";
         ILog logger = null;
         try
         {
             logger = LogManager.GetLogger(typeof(FluorineGateway));
             GlobalContext.get_Properties().set_Item("ClientIP", HttpContext.Current.Request.UserHostAddress);
         }
         catch
         {
         }
         if ((logger != null) && logger.get_IsDebugEnabled())
         {
             logger.Debug(__Res.GetString("Rtmpt_Begin"));
         }
         try
         {
             FluorineWebContext.Initialize();
             if (httpApplication.Request.Headers["RTMPT-command"] != null)
             {
                 logger.Debug(string.Format("ISAPI rewrite, original URL {0}", httpApplication.Request.Headers["RTMPT-command"]));
             }
             if (messageServer != null)
             {
                 messageServer.ServiceRtmpt();
             }
             else if (logger != null)
             {
                 logger.Fatal(__Res.GetString("MessageServer_AccessFail"));
             }
             if ((logger != null) && logger.get_IsDebugEnabled())
             {
                 logger.Debug(__Res.GetString("Rtmpt_End"));
             }
             httpApplication.CompleteRequest();
         }
         catch (Exception exception)
         {
             if (logger != null)
             {
                 logger.Fatal(__Res.GetString("Rtmpt_Fatal"), exception);
             }
             httpApplication.Response.Clear();
             httpApplication.Response.ClearHeaders();
             httpApplication.Response.Status = __Res.GetString("Rtmpt_Fatal404") + " " + exception.Message;
             httpApplication.CompleteRequest();
         }
     }
 }
예제 #5
0
        public void ProcessRequest(HttpApplication context)
        {
            if (_host == null)
            {
                return;
            }
            if (context.Request.ContentType == ContentType.AMF)
            {
                _host.CompressContent(context);
                context.Response.Clear();
                context.Response.ContentType = ContentType.AMF;
                //ThreadContext.Properties["ClientIP"] = HttpContext.Current.Request.UserHostAddress;
                // NOTE TODO Common.Logging push ip into ClientIP variable
                if (Log.IsDebugEnabled)
                {
                    Log.Debug(__Res.GetString(__Res.Amf_Begin));
                }
                try
                {
                    FluorineWebContext.Initialize();

                    if (_host.MessageServer != null)
                    {
                        _host.MessageServer.Service();
                    }
                    else
                    {
                        if (Log.IsFatalEnabled)
                        {
                            Log.Fatal(__Res.GetString(__Res.MessageServer_AccessFail));
                        }
                    }

                    if (Log.IsDebugEnabled)
                    {
                        Log.Debug(__Res.GetString(__Res.Amf_End));
                    }

                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
                catch (Exception ex)
                {
                    Log.Fatal(__Res.GetString(__Res.Amf_Fatal), ex);
                    context.Response.Clear();
                    context.Response.ClearHeaders();//FluorineHttpApplicationContext modifies headers
                    context.Response.Status = __Res.GetString(__Res.Amf_Fatal404) + " " + ex.Message;
                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
            }
        }
예제 #6
0
 internal void HandleXAmfEx(HttpApplication httpApplication)
 {
     if (httpApplication.Request.ContentType == "application/x-amf")
     {
         this.CompressContent(httpApplication);
         httpApplication.Response.Clear();
         httpApplication.Response.ContentType = "application/x-amf";
         ILog logger = null;
         try
         {
             logger = LogManager.GetLogger(typeof(FluorineGateway));
             GlobalContext.get_Properties().set_Item("ClientIP", HttpContext.Current.Request.UserHostAddress);
         }
         catch
         {
         }
         if ((logger != null) && logger.get_IsDebugEnabled())
         {
             logger.Debug(__Res.GetString("Amf_Begin"));
         }
         try
         {
             FluorineWebContext.Initialize();
             if (messageServer != null)
             {
                 messageServer.Service();
             }
             else if (logger != null)
             {
                 logger.Fatal(__Res.GetString("MessageServer_AccessFail"));
             }
             if ((logger != null) && logger.get_IsDebugEnabled())
             {
                 logger.Debug(__Res.GetString("Amf_End"));
             }
             httpApplication.CompleteRequest();
         }
         catch (Exception exception)
         {
             if (logger != null)
             {
                 logger.Fatal(__Res.GetString("Amf_Fatal"), exception);
             }
             httpApplication.Response.Clear();
             httpApplication.Response.ClearHeaders();
             httpApplication.Response.Status = __Res.GetString("Amf_Fatal404") + " " + exception.Message;
             httpApplication.CompleteRequest();
         }
     }
 }
예제 #7
0
        private void application_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication httpApplication = (HttpApplication)sender;
            HttpRequest     httpRequest     = httpApplication.Request;

            if ((serviceBrowserRenderer != null) && serviceBrowserRenderer.CanRender(httpRequest))
            {
                this.CompressContent(httpApplication);
                FluorineWebContext.Initialize();
                httpApplication.Response.Clear();
                serviceBrowserRenderer.Render(httpApplication);
                httpApplication.CompleteRequest();
            }
            else if (httpApplication.Request.ContentType == "application/x-amf")
            {
                httpApplication.Context.SkipAuthorization = true;
            }
        }
예제 #8
0
        public void ProcessRequest(HttpApplication context)
        {
            if (_host == null)
            {
                return;
            }
            string page = GetPageName(context.Request.RawUrl);

            if (page.ToLower() == "jsongateway.aspx")
            {
                context.Response.Clear();
                //ThreadContext.Properties["ClientIP"] = HttpContext.Current.Request.UserHostAddress;
                // NOTE TODO Common.Logging push ip into ClientIP variable
                if (Log.IsDebugEnabled)
                {
                    Log.Debug(__Res.GetString(__Res.Json_Begin));
                }

                try
                {
                    FluorineWebContext.Initialize();

                    Json.Rpc.JsonRpcHandler handler = new Json.Rpc.JsonRpcHandler(context.Context);
                    handler.ProcessRequest();

                    if (Log.IsDebugEnabled)
                    {
                        Log.Debug(__Res.GetString(__Res.Json_End));
                    }

                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
                catch (Exception ex)
                {
                    Log.Fatal(__Res.GetString(__Res.Json_Fatal), ex);
                    context.Response.Clear();
                    context.Response.ClearHeaders();
                    context.Response.Status = __Res.GetString(__Res.Json_Fatal404) + " " + ex.Message;
                    // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event
                    context.CompleteRequest();
                }
            }
        }
예제 #9
0
        public void ProcessRequest(HttpContext context)
        {
            HttpApplication applicationInstance = context.ApplicationInstance;

            if (applicationInstance.Request.ContentType == "application/x-fcs")
            {
                applicationInstance.Response.Clear();
                applicationInstance.Response.ContentType = "application/x-fcs";
                GlobalContext.get_Properties().set_Item("ClientIP", HttpContext.Current.Request.UserHostAddress);
                if (log.get_IsDebugEnabled())
                {
                    log.Debug(__Res.GetString("Amf_Begin"));
                }
                try
                {
                    FluorineWebContext.Initialize();
                    MessageServer messageServer = this.GetMessageServer(context);
                    if (messageServer != null)
                    {
                        messageServer.ServiceRtmpt();
                    }
                    else
                    {
                        log.Fatal(__Res.GetString("MessageServer_AccessFail"));
                    }
                    if (log.get_IsDebugEnabled())
                    {
                        log.Debug(__Res.GetString("Amf_End"));
                    }
                    applicationInstance.CompleteRequest();
                }
                catch (Exception exception)
                {
                    log.Fatal(__Res.GetString("Amf_Fatal"), exception);
                    applicationInstance.Response.Clear();
                    applicationInstance.Response.ClearHeaders();
                    applicationInstance.Response.Status = __Res.GetString("Amf_Fatal404") + " " + exception.Message;
                    applicationInstance.CompleteRequest();
                }
            }
        }
예제 #10
0
 internal void HandleSWX(HttpApplication httpApplication)
 {
     if (GetPageName(httpApplication.Request.RawUrl).ToLower() == "swxgateway.aspx")
     {
         httpApplication.Response.Clear();
         ILog logger = null;
         try
         {
             logger = LogManager.GetLogger(typeof(FluorineGateway));
             GlobalContext.get_Properties().set_Item("ClientIP", HttpContext.Current.Request.UserHostAddress);
         }
         catch
         {
         }
         if ((logger != null) && logger.get_IsDebugEnabled())
         {
             logger.Debug(__Res.GetString("Swx_Begin"));
         }
         try
         {
             FluorineWebContext.Initialize();
             new SwxHandler().Handle(httpApplication);
             if ((logger != null) && logger.get_IsDebugEnabled())
             {
                 logger.Debug(__Res.GetString("Swx_End"));
             }
             httpApplication.CompleteRequest();
         }
         catch (Exception exception)
         {
             if (logger != null)
             {
                 logger.Fatal(__Res.GetString("Swx_Fatal"), exception);
             }
             httpApplication.Response.Clear();
             httpApplication.Response.ClearHeaders();
             httpApplication.Response.Status = __Res.GetString("Swx_Fatal404") + " " + exception.Message;
             httpApplication.CompleteRequest();
         }
     }
 }
예제 #11
0
        /// <summary>
        /// Initializes the module and prepares it to handle requests.
        /// </summary>
        /// <param name="application">An HttpApplication that provides access to the methods, properties, and events common to all application objects within an ASP.NET application.</param>
        public void Init(HttpApplication application)
        {
            //http://support.microsoft.com/kb/911816
            // Do this one time for each AppDomain.
            if (!_initialized)
            {
                lock (_objLock)
                {
                    if (!_initialized)
                    {
                        if (Log.IsInfoEnabled)
                        {
                            Log.Info("************************************");
                            Log.Info(__Res.GetString(__Res.Fluorine_Start));
                            Log.Info(__Res.GetString(__Res.Fluorine_Version, Assembly.GetExecutingAssembly().GetName().Version));
                            Log.Info(string.Format("Common language runtime version {0}", Environment.Version));
                            Log.Info("************************************");
                            Log.Info(__Res.GetString(__Res.MessageServer_Create));
                        }
                        try
                        {
                            // See if we're running in full trust
                            new PermissionSet(PermissionState.Unrestricted).Demand();
                            //LinkDemands and InheritenceDemands Occur at JIT Time
                            //http://blogs.msdn.com/shawnfa/archive/2006/01/11/511716.aspx
                            WireAppDomain();
                            RegisterObject();
                        }
                        catch (MethodAccessException) {}
                        catch (SecurityException) {}

                        FluorineWebContext.Initialize();

                        Log.Info(__Res.GetString(__Res.ServiceBrowser_Aquire));
                        try
                        {
                            Type type = ObjectFactory.Locate("FluorineFx.ServiceBrowser.ServiceBrowserRenderer");
                            if (type != null)
                            {
                                _serviceBrowserRenderer = Activator.CreateInstance(type) as IServiceBrowserRenderer;
                                if (_serviceBrowserRenderer != null)
                                {
                                    Log.Info(__Res.GetString(__Res.ServiceBrowser_Aquired));
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.Fatal(__Res.GetString(__Res.ServiceBrowser_AquireFail), ex);
                        }

                        try
                        {
                            _messageServer = new MessageServer();
                            string[] possibleConfigFolderPaths = new string[PossibleConfigFolderNames.Length];
                            for (int i = 0; i < PossibleConfigFolderNames.Length; i++)
                            {
                                string configPath = Path.Combine(HttpRuntime.AppDomainAppPath, PossibleConfigFolderNames[i]);
                                possibleConfigFolderPaths[i] = configPath;
                            }
                            _messageServer.Init(possibleConfigFolderPaths, _serviceBrowserRenderer != null);
                            _messageServer.Start();
                            Log.Info(__Res.GetString(__Res.MessageServer_Started));
                            HttpContext.Current.Application[FluorineMessageServerKey] = _messageServer;
                        }
                        catch (Exception ex)
                        {
                            Log.Fatal(__Res.GetString(__Res.MessageServer_StartError), ex);
                        }

                        _handlers.Add(new AmfRequestHandler(this));
                        _handlers.Add(new StreamingAmfRequestHandler(this));
                        _handlers.Add(new RtmptRequestHandler(this));
                        _handlers.Add(new JsonRpcRequestHandler(this));
                        _initialized = true;
                    }
                }
            }

            //Wire up the HttpApplication events.
            //
            //BeginRequest
            //AuthenticateRequest
            //AuthorizeRequest
            //ResolveRequestCache
            //A handler (a page corresponding to the request URL) is created at this point.
            //AcquireRequestState ** Session State **
            //PreRequestHandlerExecute
            //[The handler is executed.]
            //PostRequestHandlerExecute
            //ReleaseRequestState
            //Response filters, if any, filter the output.
            //UpdateRequestCache
            //EndRequest

            application.BeginRequest += ApplicationBeginRequest;
            if (!FluorineConfiguration.Instance.FluorineSettings.Runtime.AsyncHandler)
            {
                application.PreRequestHandlerExecute += ApplicationPreRequestHandlerExecute;
            }
            else
            {
                application.AddOnPreRequestHandlerExecuteAsync(BeginPreRequestHandlerExecute, EndPreRequestHandlerExecute);
            }

            application.AuthenticateRequest += ApplicationAuthenticateRequest;

            //This implementation hooks the ReleaseRequestState and PreSendRequestHeaders events to
            //figure out as late as possible if we should install the filter.
            //The Post Release Request State is the event most fitted for the task of adding a filter
            //Everything else is too soon or too late. At this point in the execution phase the entire
            //response content is created and the page has fully executed but still has a few modules to go through
            //from an ASP.NET perspective.  We filter the content here and all of the javascript renders correctly.
            //application.PostReleaseRequestState += new EventHandler(this.CompressContent);
            application.ReleaseRequestState   += ApplicationReleaseRequestState;
            application.PreSendRequestHeaders += ApplicationPreSendRequestHeaders;
            application.EndRequest            += ApplicationEndRequest;
        }
예제 #12
0
        public void Init(HttpApplication application)
        {
            Exception exception;
            object    obj2;

            if (!_initialized)
            {
                lock ((obj2 = _objLock))
                {
                    if (!_initialized)
                    {
                        try
                        {
                            new PermissionSet(PermissionState.Unrestricted).Demand();
                            this.WireAppDomain();
                        }
                        catch (SecurityException)
                        {
                        }
                        _initialized = true;
                    }
                }
            }
            application.BeginRequest += new EventHandler(this.application_BeginRequest);
            if (!FluorineConfiguration.Instance.FluorineSettings.Runtime.AsyncHandler)
            {
                application.PreRequestHandlerExecute += new EventHandler(this.application_PreRequestHandlerExecute);
            }
            else
            {
                application.AddOnPreRequestHandlerExecuteAsync(new BeginEventHandler(this.BeginPreRequestHandlerExecute), new EndEventHandler(this.EndPreRequestHandlerExecute));
            }
            application.AuthenticateRequest   += new EventHandler(this.application_AuthenticateRequest);
            application.ReleaseRequestState   += new EventHandler(this.application_ReleaseRequestState);
            application.PreSendRequestHeaders += new EventHandler(this.application_PreSendRequestHeaders);
            application.EndRequest            += new EventHandler(this.application_EndRequest);
            FluorineWebContext.Initialize();
            if (serviceBrowserRenderer == null)
            {
                lock ((obj2 = _objLock))
                {
                    if (serviceBrowserRenderer == null)
                    {
                        try
                        {
                            LogManager.GetLogger(typeof(FluorineGateway)).Info(__Res.GetString("ServiceBrowser_Aquire"));
                        }
                        catch
                        {
                        }
                        try
                        {
                            Type type = ObjectFactory.Locate("FluorineFx.ServiceBrowser.ServiceBrowserRenderer");
                            if (type != null)
                            {
                                serviceBrowserRenderer = Activator.CreateInstance(type) as IServiceBrowserRenderer;
                                if (serviceBrowserRenderer != null)
                                {
                                    try
                                    {
                                        LogManager.GetLogger(typeof(FluorineGateway)).Info(__Res.GetString("ServiceBrowser_Aquired"));
                                    }
                                    catch
                                    {
                                    }
                                }
                            }
                        }
                        catch (Exception exception2)
                        {
                            exception = exception2;
                            try
                            {
                                LogManager.GetLogger(typeof(FluorineGateway)).Fatal(__Res.GetString("ServiceBrowser_AquireFail"), exception);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
            }
            if (messageServer == null)
            {
                lock ((obj2 = _objLock))
                {
                    if (messageServer == null)
                    {
                        try
                        {
                            ILog logger = LogManager.GetLogger(typeof(FluorineGateway));
                            logger.Info("************************************");
                            logger.Info(__Res.GetString("Fluorine_Start"));
                            logger.Info(__Res.GetString("Fluorine_Version", new object[] { Assembly.GetExecutingAssembly().GetName().Version }));
                            logger.Info("************************************");
                            logger.Info(__Res.GetString("MessageServer_Create"));
                        }
                        catch
                        {
                        }
                        messageServer = new MessageServer();
                        try
                        {
                            string configPath = Path.Combine(Path.Combine(HttpRuntime.AppDomainAppPath, "WEB-INF"), "flex");
                            messageServer.Init(configPath, serviceBrowserRenderer != null);
                            messageServer.Start();
                            try
                            {
                                LogManager.GetLogger(typeof(FluorineGateway)).Info(__Res.GetString("MessageServer_Started"));
                            }
                            catch
                            {
                            }
                            HttpContext.Current.Application["__@fluorinemessageserver"] = messageServer;
                        }
                        catch (Exception exception3)
                        {
                            exception = exception3;
                            try
                            {
                                LogManager.GetLogger(typeof(FluorineGateway)).Fatal(__Res.GetString("MessageServer_StartError"), exception);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
            }
        }