예제 #1
0
        /// <summary>
        /// Handles the <see cref="NotifyReceived"/> event
        /// </summary>
        /// <param name="notification">The <see cref="Notification"/> that was received</param>
        /// <param name="callbackInfo">The <see cref="CallbackInfo"/> for the notification</param>
        /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with the request</param>
        /// <returns><see cref="Response"/></returns>
        protected virtual Response OnNotifyReceived(Notification notification, CallbackInfo callbackInfo, RequestInfo requestInfo)
        {
            LogInfo("NOTIFICATION RECEIVED: {0}", notification.Name);

            Response response = new Response(ErrorCode.INTERNAL_SERVER_ERROR, ErrorDescription.INTERNAL_SERVER_ERROR);

            if (this.NotifyReceived != null)
            {
                response = this.NotifyReceived(notification, callbackInfo, requestInfo);
            }
            return(response);
        }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MessageHandler"/> class.
        /// </summary>
        /// <param name="serverName">Name of the server</param>
        /// <param name="passwordManager">A list of valid passwords</param>
        /// <param name="passwordRequired">Indicates if the request must contain a password</param>
        /// <param name="logFolder">The path to the folder where log files are written</param>
        /// <param name="loggingEnabled">Indicates if logging is enabled or not</param>
        /// <param name="allowNetworkNotifications">Indicates if notifications from remote machines are allowed</param>
        /// <param name="allowBrowserConnections">Indicates if notifications from browsers are allowed</param>
        /// <param name="allowSubscriptions">Indicates if clients are allowed to subscribe to notifications from this server</param>
        public MessageHandler(string serverName, PasswordManager passwordManager, bool passwordRequired, string logFolder, bool loggingEnabled, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions)
        {
            this.serverName                = serverName;
            this.passwordManager           = passwordManager;
            this.passwordRequired          = passwordRequired;
            this.logFolder                 = logFolder;
            this.loggingEnabled            = loggingEnabled;
            this.allowNetworkNotifications = allowNetworkNotifications;
            this.allowBrowserConnections   = allowBrowserConnections;
            this.allowSubscriptions        = allowSubscriptions;

            this.serverName   = serverName;
            this.callbackInfo = new CallbackInfo();
            this.requestInfo  = new RequestInfo();
        }
예제 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GNTPParser"/> class.
        /// </summary>
        /// <param name="passwordManager">The <see cref="PasswordManager"/> containing a list of allowed passwords</param>
        /// <param name="passwordRequired">Indicates if a password is required</param>
        /// <param name="allowNetworkNotifications">Indicates if network requests are allowed</param>
        /// <param name="allowBrowserConnections">Indicates if browser requests are allowed</param>
        /// <param name="allowSubscriptions">Indicates if SUBSCRIPTION requests are allowed</param>
        /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with this request</param>
        public GNTPParser(PasswordManager passwordManager, bool passwordRequired, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions, RequestInfo requestInfo)
        {
            this.passwordManager           = passwordManager;
            this.passwordRequired          = passwordRequired;
            this.allowNetworkNotifications = allowNetworkNotifications;
            this.allowBrowserConnections   = allowBrowserConnections;
            this.allowSubscriptions        = allowSubscriptions;
            this.requestInfo = requestInfo;

            this.alreadyReceived             = new StringBuilder();
            this.headers                     = new HeaderCollection();
            this.notificationsToBeRegistered = new List <HeaderCollection>();
            this.pointers                    = new List <Pointer>();
            this.callbackInfo                = new CallbackInfo();
        }
예제 #4
0
        /// <summary>
        /// Writes back the GNTP response to the requesting application
        /// </summary>
        /// <param name="cbInfo">The <see cref="CallbackInfo"/> associated with the response</param>
        /// <param name="response">The <see cref="Response"/> to be written back</param>
        public void WriteResponse(CallbackInfo cbInfo, Response response)
        {
            if (!cbInfo.AlreadyResponded)
            {
                cbInfo.AlreadyResponded = true;
                MessageHandler mh           = cbInfo.MessageHandler;
                GNTPRequest    request      = mh.Request;
                ResponseType   responseType = ResponseType.ERROR;
                if (response != null)
                {
                    if (response.IsCallback)
                    {
                        responseType = ResponseType.CALLBACK;
                    }
                    else if (response.IsOK)
                    {
                        responseType = ResponseType.OK;
                    }
                }
                else
                {
                    response = new Response(ErrorCode.INTERNAL_SERVER_ERROR, ErrorDescription.INTERNAL_SERVER_ERROR);
                }

                if (cbInfo.AdditionalInfo != null)
                {
                    foreach (KeyValuePair <string, string> item in cbInfo.AdditionalInfo)
                    {
                        response.CustomTextAttributes.Add(item.Key, item.Value);
                    }
                }

                AddServerHeaders(response);
                MessageBuilder   mb = new MessageBuilder(responseType);
                HeaderCollection responseHeaders = response.ToHeaders();
                foreach (Header header in responseHeaders)
                {
                    mb.AddHeader(header);
                }
                // return any application-specific data headers that were received
                RequestData rd = RequestData.FromHeaders(request.Headers);
                AddRequestData(mb, rd);

                mh.WriteResponse(mb, true);
            }
        }
예제 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GNTPParser"/> class.
        /// </summary>
        /// <param name="passwordManager">The <see cref="PasswordManager"/> containing a list of allowed passwords</param>
        /// <param name="passwordRequired">Indicates if a password is required</param>
        /// <param name="allowNetworkNotifications">Indicates if network requests are allowed</param>
        /// <param name="allowBrowserConnections">Indicates if browser requests are allowed</param>
        /// <param name="allowSubscriptions">Indicates if SUBSCRIPTION requests are allowed</param>
        /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with this request</param>
        public GNTPParser2(PasswordManager passwordManager, bool passwordRequired, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions, RequestInfo requestInfo)
        {
            this.passwordManager           = passwordManager;
            this.passwordRequired          = passwordRequired;
            this.allowNetworkNotifications = allowNetworkNotifications;
            this.allowBrowserConnections   = allowBrowserConnections;
            this.allowSubscriptions        = allowSubscriptions;
            this.requestInfo = requestInfo;

            this.alreadyReceived             = new StringBuilder();
            this.headers                     = new HeaderCollection();
            this.notificationsToBeRegistered = new List <HeaderCollection>();
            this.pointers                    = new List <Pointer>();
            this.callbackInfo                = new CallbackInfo();

            ms            = new MemoryStream();
            gntpReader    = new GNTPStreamReader(ms);
            buffer        = new List <byte>();
            nextIndicator = AsyncSocket.CRLFData;
            tag           = GNTP_IDENTIFIER_TAG;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="GNTPParser"/> class.
        /// </summary>
        /// <param name="passwordManager">The <see cref="PasswordManager"/> containing a list of allowed passwords</param>
        /// <param name="passwordRequired">Indicates if a password is required</param>
        /// <param name="allowNetworkNotifications">Indicates if network requests are allowed</param>
        /// <param name="allowBrowserConnections">Indicates if browser requests are allowed</param>
        /// <param name="allowSubscriptions">Indicates if SUBSCRIPTION requests are allowed</param>
        /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with this request</param>
        public GNTPParser2(PasswordManager passwordManager, bool passwordRequired, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions, RequestInfo requestInfo)
        {
            this.passwordManager = passwordManager;
            this.passwordRequired = passwordRequired;
            this.allowNetworkNotifications = allowNetworkNotifications;
            this.allowBrowserConnections = allowBrowserConnections;
            this.allowSubscriptions = allowSubscriptions;
            this.requestInfo = requestInfo;

            this.alreadyReceived = new StringBuilder();
            this.headers = new HeaderCollection();
            this.notificationsToBeRegistered = new List<HeaderCollection>();
            this.pointers = new List<Pointer>();
            this.callbackInfo = new CallbackInfo();

            ms = new MemoryStream();
            gntpReader = new GNTPStreamReader(ms);
            buffer = new List<byte>();
            nextIndicator = AsyncSocket.CRLFData;
            tag = GNTP_IDENTIFIER_TAG;
        }
예제 #7
0
        /// <summary>
        /// Handles the <see cref="NotifyReceived"/> event
        /// </summary>
        /// <param name="notification">The <see cref="Notification"/> that was received</param>
        /// <param name="callbackInfo">The <see cref="CallbackInfo"/> for the notification</param>
        /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with the request</param>
        /// <returns><see cref="Response"/></returns>
        protected virtual Response OnNotifyReceived(Notification notification, CallbackInfo callbackInfo, RequestInfo requestInfo)
        {
            LogInfo("NOTIFICATION RECEIVED: {0}", notification.Name);

            Response response = new Response(ErrorCode.INTERNAL_SERVER_ERROR, ErrorDescription.INTERNAL_SERVER_ERROR);
            if (this.NotifyReceived != null)
            {
                response = this.NotifyReceived(notification, callbackInfo, requestInfo);
            }
            return response;
        }
예제 #8
0
        /// <summary>
        /// Writes back the GNTP response to the requesting application
        /// </summary>
        /// <param name="cbInfo">The <see cref="CallbackInfo"/> associated with the response</param>
        /// <param name="response">The <see cref="Response"/> to be written back</param>
        public void WriteResponse(CallbackInfo cbInfo, Response response)
        {
            if (!cbInfo.AlreadyResponded)
            {
                cbInfo.AlreadyResponded = true;
                MessageHandler mh = cbInfo.MessageHandler;
                GNTPRequest request = mh.Request;
                ResponseType responseType = ResponseType.ERROR;
                if (response != null)
                {
                    if (response.IsCallback) responseType = ResponseType.CALLBACK;
                    else if (response.IsOK) responseType = ResponseType.OK;
                }
                else
                {
                    response = new Response(ErrorCode.INTERNAL_SERVER_ERROR, ErrorDescription.INTERNAL_SERVER_ERROR);
                }

                if (cbInfo.AdditionalInfo != null)
                {
                    foreach (KeyValuePair<string, string> item in cbInfo.AdditionalInfo)
                    {
                        response.CustomTextAttributes.Add(item.Key, item.Value);
                    }
                }

                AddServerHeaders(response);
                MessageBuilder mb = new MessageBuilder(responseType);
                HeaderCollection responseHeaders = response.ToHeaders();
                foreach (Header header in responseHeaders)
                {
                    mb.AddHeader(header);
                }
                // return any application-specific data headers that were received
                RequestData rd = RequestData.FromHeaders(request.Headers);
                AddRequestData(mb, rd);

                mh.WriteResponse(mb, true);
            }
         }
예제 #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MessageHandler"/> class.
        /// </summary>
        /// <param name="serverName">Name of the server</param>
        /// <param name="passwordManager">A list of valid passwords</param>
        /// <param name="passwordRequired">Indicates if the request must contain a password</param>
        /// <param name="logFolder">The path to the folder where log files are written</param>
        /// <param name="loggingEnabled">Indicates if logging is enabled or not</param>
        /// <param name="allowNetworkNotifications">Indicates if notifications from remote machines are allowed</param>
        /// <param name="allowBrowserConnections">Indicates if notifications from browsers are allowed</param>
        /// <param name="allowSubscriptions">Indicates if clients are allowed to subscribe to notifications from this server</param>
        public MessageHandler(string serverName, PasswordManager passwordManager, bool passwordRequired, string logFolder, bool loggingEnabled, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions)
        {
            this.serverName = serverName;
            this.passwordManager = passwordManager;
            this.passwordRequired = passwordRequired;
            this.logFolder = logFolder;
            this.loggingEnabled = loggingEnabled;
            this.allowNetworkNotifications = allowNetworkNotifications;
            this.allowBrowserConnections = allowBrowserConnections;
            this.allowSubscriptions = allowSubscriptions;

            this.serverName = serverName;
            this.callbackInfo = new CallbackInfo();
            this.requestInfo = new RequestInfo();
        }
예제 #10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GNTPParser"/> class.
        /// </summary>
        /// <param name="passwordManager">The <see cref="PasswordManager"/> containing a list of allowed passwords</param>
        /// <param name="passwordRequired">Indicates if a password is required</param>
        /// <param name="allowNetworkNotifications">Indicates if network requests are allowed</param>
        /// <param name="allowBrowserConnections">Indicates if browser requests are allowed</param>
        /// <param name="allowSubscriptions">Indicates if SUBSCRIPTION requests are allowed</param>
        /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with this request</param>
        public GNTPParser(PasswordManager passwordManager, bool passwordRequired, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions, RequestInfo requestInfo)
        {
            this.passwordManager = passwordManager;
            this.passwordRequired = passwordRequired;
            this.allowNetworkNotifications = allowNetworkNotifications;
            this.allowBrowserConnections = allowBrowserConnections;
            this.allowSubscriptions = allowSubscriptions;
            this.requestInfo = requestInfo;

            this.alreadyReceived = new StringBuilder();
            this.headers = new HeaderCollection();
            this.notificationsToBeRegistered = new List<HeaderCollection>();
            this.pointers = new List<Pointer>();
            this.callbackInfo = new CallbackInfo();
        }