public static IServiceProvider Configure(IServiceCollection services)
        {
            var assemblyPath = Directory.GetCurrentDirectory();
            var config       = new KeyValueConfiguration(Path.Combine(assemblyPath, "sir.ini"));

            services.Add(new ServiceDescriptor(typeof(IConfigurationProvider), config));

            var loggerFactory  = services.BuildServiceProvider().GetService <ILoggerFactory>();
            var logger         = loggerFactory.CreateLogger("Sir");
            var model          = new BagOfCharsModel();
            var sessionFactory = new SessionFactory(@"c:\data\resin", logger);
            var qp             = new QueryParser <string>(sessionFactory, model, logger);
            var httpParser     = new HttpQueryParser(qp);

            services.AddSingleton(typeof(IModel <string>), model);
            services.AddSingleton(typeof(ISessionFactory), sessionFactory);
            services.AddSingleton(typeof(SessionFactory), sessionFactory);
            services.AddSingleton(typeof(QueryParser <string>), qp);
            services.AddSingleton(typeof(HttpQueryParser), httpParser);
            services.AddSingleton(typeof(IHttpWriter), new HttpWriter(sessionFactory));
            services.AddSingleton(typeof(IHttpReader), new HttpReader(
                                      sessionFactory,
                                      httpParser,
                                      loggerFactory.CreateLogger <HttpReader>()));

            return(services.BuildServiceProvider());
        }
Exemple #2
0
        public override async Task <SortedList <float, IList <IDictionary> > > Evaluate(string formattedQuery)
        {
            var documents = await base.Evaluate(formattedQuery);

            const string modelName = "www";

            var q = new HttpQueryParser(new TermQueryParser(), new UnicodeTokenizer())
                    .FromFormattedString(modelName.ToHash(), formattedQuery);

            q.Take = 10;

            using (var session = SessionFactory.CreateReadSession(modelName, modelName.ToHash()))
            {
                var result = await session.Read(q);

                foreach (var document in result.Docs)
                {
                    IList <IDictionary> list;

                    if (!documents.TryGetValue((float)document["___score"], out list))
                    {
                        list = new List <IDictionary>();
                        documents.Add((float)document["___score"], list);
                    }

                    list.Add(document);
                }
            }

            return(documents);
        }
Exemple #3
0
 public HttpReader(
     SessionFactory sessionFactory,
     HttpQueryParser httpQueryParser,
     ILogger <HttpReader> logger)
 {
     _logger          = logger;
     _sessionFactory  = sessionFactory;
     _httpQueryParser = httpQueryParser;
 }
Exemple #4
0
        /// <summary>
        /// Parst den übergeben String und gibt das Ergebnis als HttpQuery Objekt mit den Ergebnissen wieder zurück.
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public static HttpQuery Query(string query)
        {
            AntlrInputStream input = new AntlrInputStream(query);
            var lexer = new HttpQueryLexer(input);
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            var parser = new HttpQueryParser(tokens);
            var context = parser.init();

            if (context.exception == null && parser.NumberOfSyntaxErrors == 0)
            {
                var visitor = new QueryVisitor<object>();

                visitor.Visit(context);
                return visitor.GetQuery();
            }
            else
            {
                return new HttpQuery() { Exception = new Exception("Syntax Error") };
            }
        }
Exemple #5
0
        private void Listener_OnNewConnectionReceived(object sender, RequestReceivedEventArgs e)
        {
            string        hostname          = HttpQueryParser.GetHostName(e.Request);
            NetworkStream proxyClientStream = e.User.GetStream();

            try
            {
                if (firewall.CheckIfBlocked(hostname))
                {
                    //send error page
                    proxyClientStream.Write(Encoding.ASCII.GetBytes("<html><body style=\"padding:0; margin:0;\"><img style=\"padding:0; margin:0; width:100%; height:100%;\" src=\"https://www.hostinger.co.id/tutorial/wp-content/uploads/sites/11/2017/08/what-is-403-forbidden-error-and-how-to-fix-it.jpg\"</body></html>"));
                    return;
                }

                var targetServer = new TcpClient(hostname, 80);

                NetworkStream targetServerStream = targetServer.GetStream();

                targetServerStream.Write(e.Request);

                var responseBuffer = new byte[32];

                //this is to capture status of http request and log it.

                targetServerStream.Read(responseBuffer, 0, responseBuffer.Length);

                proxyClientStream.Write(responseBuffer, 0, responseBuffer.Length);

                var headers = Encoding.UTF8.GetString(responseBuffer).Split("\r\n");

                logger.Log(new HttpRequestEntry()
                {
                    ResponseCode = headers[0].Substring(headers[0].IndexOf(" ") + 1),
                    Hostname     = hostname
                });

                targetServerStream.CopyTo(proxyClientStream);
            }
            catch { return; }
            finally { proxyClientStream.Dispose(); }
        }