Giter Site home page Giter Site logo

psi-prod / mehari Goto Github PK

View Code? Open in Web Editor NEW
37.0 1.0 3.0 336 KB

A cross-platform library for building Gemini servers

Home Page: https://docs.heyplzlookat.me/mehari/

License: GNU Lesser General Public License v3.0

Makefile 0.27% OCaml 99.73%
gemini gemini-server mirageos

mehari's Introduction

Mehari

Mehari is a cross-platform library for building Gemini servers. It fully implements the Gemini protocol specification.

It takes heavy inspiration from Dream, a tidy, feature-complete Web framework.

banner

Mehari provides several packages. See here. Many examples are also provided.

Installation

opam install mehari

Features

  • Mirage OS friendly
  • Static files serving
  • MIME type inference from file content (using experimental Conan support)
  • Rate limit
  • Virtual hosting using SNI
  • CGI
  • Long-running TCP connection

Feedback

Since Mehari is in its early stages, any feedback and contributions regarding the API or security are appreciated.

Important links

License

Distributed under the LGPL-3.0 License. See license for more information.

mehari's People

Contributors

artichowo avatar hannesm avatar tim-ats-d avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

mehari's Issues

Fastest Gemtext parsing

Performance of Mehari.Gemtext.of_string can be improved. Currently, the parser uses regex which is not very efficient.

  • Use a buffer
  • Speed up parser by removing regex ?

Perform more check on client request

According to specification:

In particular, the authority component is allowed and required, but its userinfo subcomponent is NOT allowed. The host subcomponent is required. The port subcomponent is optional, with a default value of 1965. The path, query and fragment components are allowed and have no special meanings beyond those defined by the generic syntax. An empty path is equivalent to a path consisting only of "/". Spaces in paths should be encoded as %20, not as +.

is a UTF-8 encoded absolute URL, including a scheme, of maximum length 1024 bytes. The request MUST NOT begin with a U+FEFF byte order mark.

Allow proxy

Currently, server only respond to request containing one of its own hostnames. So proxying is not allowed.

Make `Mehari_mirage` work again.

[...]
TLSv1	Client Hello
TCP	196553946 [ACK] Seq=1 Ack=518 Win=407744 Len=0 TSval=777244924 TSecr=3541461376
// no server hello!!!!
TCP	196553946 [FIN, ACK] Seq=1 Ack=518 Win=407744 Len=0 TSval=777244925 TSecr=3541461376
TCP	539461965 [ACK] Seq=518 Ack=2 Win=408256 Len=0 TSval=3541461377 TSecr=777244925
TCP	539461965 [FIN, ACK] Seq=518 Ack=2 Win=408256 Len=0 TSval=3541461377 TSecr=777244925
TCP	196553946 [ACK] Seq=2 Ack=519 Win=407744 Len=0 TSval=777244925 TSecr=3541461377

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.