Beispiel #1
0
        private bool ConnectionManager(TcpClient tcpClient)
        {
            var objStream = tcpClient.GetStream();
            var strRawClientRequestHeader = SocketWorker.ReadClientData(objStream);

            if (!String.IsNullOrEmpty(strRawClientRequestHeader))
            {
                var headerRequest = new HTTP.Parsers.Request(strRawClientRequestHeader);

                headerRequest.Add("ClientIP", tcpClient.Client.RemoteEndPoint.ToString());
                SocketWorker.Do(ref headerRequest, ref objStream);
            }

            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// После состоявшегося запроса от клиента, требуется понять как это дело обработать. Эта функция прогоняет таблицу добавленных воркеров и завершает работу на первом сработавшем триггере.
        /// </summary>
        /// <param name="clientHeader">Обработанный запрос клиента</param>
        /// <param name="objStream">Поток для чтения или записи </param>
        /// <returns></returns>
        public void Do(ref HTTP.Parsers.Request clientHeader, ref NetworkStream objStream)
        {
            Response objResponse = null;
            var      JobType     = Worker.JobType.Other;

            // пробуем отработать воркеры
            if (Items != null && Items.Count > 0)
            {
                foreach (var Item in Items)
                {
                    if (CheckPattern(clientHeader, Item.Value))
                    {
                        objResponse = Item.Value.SocketWorkerFunction(clientHeader, objStream);
                        JobType     = Item.Value.SocketWorkerJobType;
                        break;
                    }
                }
            }

            // если Response == null значит подходящего воркера не нашлось, пробуем тупо отдать файл
            if (objResponse == null)
            {
                var strFileName = MakeLocalFilePath(clientHeader);

                if (!String.IsNullOrEmpty(strFileName) && CheckFile(strFileName))
                {
                    objResponse = new Response(strFileName);
                    JobType     = JobType.SendFile;
                }
            }

            // если Response == null значит подходящих воркера или файлоа не нашлось, отдаём Not Found
            if (objResponse == null)
            {
                objResponse = new Response("404", HttpStatusCode.NotFound);
                JobType     = JobType.SendCode;
            }

            switch (JobType)
            {
            case JobType.Other:
            case JobType.SendText:
            case JobType.SendCode:
            case JobType.SendFile:
                WriteClientData(objStream, objResponse);
                break;
            }
        }
Beispiel #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="clientHeader"></param>
        /// <param name="socketWorkerItem"></param>
        /// <returns></returns>
        private bool CheckPattern(HTTP.Parsers.Request clientHeader, SocketWorkerItem socketWorkerItem)
        {
            switch (socketWorkerItem.SocketWorkerEntryType)
            {
            case EntryType.Url:
                if (!String.IsNullOrEmpty(clientHeader.Get("EntryPoint")))
                {
                    var strEntryPoint = clientHeader.Get("EntryPoint");

                    return(Strings.Contains(strEntryPoint, socketWorkerItem.strEntryPointPattern, socketWorkerItem.SocketWorkerEntryAnalysisType));
                }

                break;

            case EntryType.Command:
                if (clientHeader.Query != null)
                {
                    if (clientHeader.Query.Get(strCommand) != null)
                    {
                        var strTmp = clientHeader.Query.Get(strCommand);

                        return(String.Equals(strTmp, socketWorkerItem.strEntryPointPattern));
                    }
                }
                break;

            case EntryType.Method:
                var strMethod = clientHeader.Get("Method");

                if (!String.IsNullOrEmpty(strMethod))
                {
                    return(Strings.Contains(strMethod, socketWorkerItem.strEntryPointPattern, socketWorkerItem.SocketWorkerEntryAnalysisType));
                }
                break;

            case EntryType.Header:
                if (!String.IsNullOrEmpty(clientHeader.Get(socketWorkerItem.strEntryPointPattern)))
                {
                    return(true);
                }
                break;
            }

            return(false);
        }
Beispiel #4
0
        private string MakeLocalFilePath(HTTP.Parsers.Request ClientHeader)
        {
            if (!String.IsNullOrEmpty(strRootDirectory))
            {
                var strPath = strRootDirectory;

                if (!String.IsNullOrEmpty(ClientHeader.Get("Path")))
                {
                    strPath += ClientHeader.Get("Path");
                }
                if (!String.IsNullOrEmpty(ClientHeader.Get("EntryPoint")) && ClientHeader.Get("EntryPoint") != "/")
                {
                    strPath += ClientHeader.Get("EntryPoint");
                    return(Files.FixPathByOS(strPath));
                }
            }
            return(null);
        }
Beispiel #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="clientHeader"></param>
 /// <param name="objStreem"></param>
 /// <returns></returns>
 private Response EmptyWorker(HTTP.Parsers.Request clientHeader, NetworkStream objStreem) => new Response("", HttpStatusCode.OK);