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()); }
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); }
public HttpReader( SessionFactory sessionFactory, HttpQueryParser httpQueryParser, ILogger <HttpReader> logger) { _logger = logger; _sessionFactory = sessionFactory; _httpQueryParser = httpQueryParser; }
/// <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") }; } }
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(); } }