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.