Skip to content

JacobJohansen/euclid

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

 E(u)clid

 Version: Apr 2014
 Author:  Eldar Gaynetdinov
 License: ISC

 DESCRIPTION:
 ------------

 E(u)clid (further in text called Euclid) is the minimalist style framework 
 which provides the following features:

 * event-driven engine based on epoll (SSL connections also supported)
 * client and limited server behaviour
 * buffering network IO
 * global and connection based timers
 * modularity
 * logging
 * limited support of HTTP 1.1 (permanent connections also supported)
 * fixed point arithmetic
 * YAML based config parser
 * linked lists, hash tables etc

 PHILOSOPHY:
 -----------

 Keep it thin. Don't use a lot of libraries except glibc.
 At the moment there are only three exeptions (OpenSSL, zlib, crc32).
 Provide enough functionality and scalability but stay in the minimalist style.

 WHY IT EXISTS?
 -------------

 This is the public part of my personal project which I will use 
 for algorithmic trading at NYSE, NASDAQ, CME etc.
 I don't like huge libraries and frameworks.
 That's why I decided to write this lightweight framework.
 I share it because somebody may find this framework interesting and useful.
 The name Euclid is inspired by Darren Aronofsky's film Pi.
 After I wrote event-driven engine I noticed similarity between 
 (Eu)clid and (Ev)ent. That's why I call it E(u)clid.

 BUILD:
 ------

 You need a Linux environment with installed OpenSSL and zlib dev packages.

 1) To build debug version:

 $ make

 2) To build release version:

 $ make release

 3) To build debug version which is intended for proxy module:

 $ make test_many_conns

 NOTE: http proxy module is intended for testing this framework.
 But I still didn't implement support for many connections.
 That means it's needed O(n) to traverse all the connections.
 That's why in normal mode, I don't support many connections.

 4) To cleanup:

 $ make clean

 GETTING STARTED
 ---------------

 1) $ make test_many_conns

 2) point out your browser to: localhost:1111

 NOTE: http proxy supports SSL connections and HTTP method CONNECT.
 So it's possible to use this proxy for another protocols 
 (try to use Pidgin IM through this proxy).

 3) $ ./euclid module:proxy no_debug_log

 4) Enjoy!

 To move logging to file. Invoke this before running ./euclid

 $ ./core/make_tmpfs_logging_dir.sh

 It creates a temporary directory in tmpfs. It's useful with debug logging.

 SECURITY WARNING:
 -----------------

 Please, generate and add your own private key and cert to 
 core/core.cfg by adding:

 #######
 net_cert_file: [path to cert file].crt

 net_key_file: [path to key file].key
 #######

 Otherwise, a throwaway key is used for tests. See core/core.cfg :

 #######
 net_cert_test_file: core/server_test.crt

 net_key_test_file: core/server_test.key
 #######

 Also, you will get a warning message when Euclid started.

About

An event-driven framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 99.7%
  • Other 0.3%