From b485aab7e71c1625cfc27e0f92c9509f42378458 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 5 May 2024 13:19:16 +0200 Subject: Adding upstream version 1.45.3+dfsg. Signed-off-by: Daniel Baumann --- src/fluent-bit/lib/monkey/.gitignore | 30 + src/fluent-bit/lib/monkey/CMakeLists.txt | 331 + src/fluent-bit/lib/monkey/CONTRIBUTING.md | 60 + src/fluent-bit/lib/monkey/ChangeLog | 24225 +++++++++++++++++++ src/fluent-bit/lib/monkey/ChangeLog.old | 233 + src/fluent-bit/lib/monkey/FUZZ.md | 33 + src/fluent-bit/lib/monkey/INSTALL | 52 + src/fluent-bit/lib/monkey/LICENSE | 177 + src/fluent-bit/lib/monkey/NOTICE | 12 + src/fluent-bit/lib/monkey/README.md | 59 + src/fluent-bit/lib/monkey/api/CMakeLists.txt | 18 + src/fluent-bit/lib/monkey/api/errors.c | 103 + src/fluent-bit/lib/monkey/api/test.c | 186 + .../lib/monkey/cmake/FindLibkqueue.cmake | 18 + src/fluent-bit/lib/monkey/conf/CMakeLists.txt | 17 + src/fluent-bit/lib/monkey/conf/monkey.conf.in | 166 + src/fluent-bit/lib/monkey/conf/monkey.mime.in | 145 + src/fluent-bit/lib/monkey/conf/plugins.load.in | 10 + src/fluent-bit/lib/monkey/conf/sites/default.in | 57 + src/fluent-bit/lib/monkey/configure | 220 + src/fluent-bit/lib/monkey/debian.sh | 6 + src/fluent-bit/lib/monkey/debian/changelog | 89 + src/fluent-bit/lib/monkey/debian/compat | 1 + src/fluent-bit/lib/monkey/debian/control | 38 + src/fluent-bit/lib/monkey/debian/copyright | 34 + src/fluent-bit/lib/monkey/debian/docs | 1 + .../lib/monkey/debian/monkey-dev.install | 37 + src/fluent-bit/lib/monkey/debian/monkey-doc.docs | 1 + .../lib/monkey/debian/monkey-doc.install | 1 + .../lib/monkey/debian/monkey-polarssl.install | 6 + src/fluent-bit/lib/monkey/debian/monkey.init | 101 + src/fluent-bit/lib/monkey/debian/monkey.install | 51 + src/fluent-bit/lib/monkey/debian/monkey.postinst | 14 + src/fluent-bit/lib/monkey/debian/rules | 20 + src/fluent-bit/lib/monkey/debian/source/format | 1 + src/fluent-bit/lib/monkey/debian/watch | 2 + src/fluent-bit/lib/monkey/deps/deps.txt | 3 + .../lib/monkey/deps/flb_libco/CMakeLists.txt | 28 + src/fluent-bit/lib/monkey/deps/flb_libco/README.md | 14 + src/fluent-bit/lib/monkey/deps/flb_libco/aarch64.c | 138 + src/fluent-bit/lib/monkey/deps/flb_libco/amd64.c | 163 + src/fluent-bit/lib/monkey/deps/flb_libco/arm.c | 81 + .../lib/monkey/deps/flb_libco/doc/style.css | 8 + .../lib/monkey/deps/flb_libco/doc/targets.html | 89 + .../lib/monkey/deps/flb_libco/doc/usage.html | 107 + src/fluent-bit/lib/monkey/deps/flb_libco/fiber.c | 54 + src/fluent-bit/lib/monkey/deps/flb_libco/libco.c | 37 + src/fluent-bit/lib/monkey/deps/flb_libco/libco.h | 28 + src/fluent-bit/lib/monkey/deps/flb_libco/ppc.c | 369 + .../lib/monkey/deps/flb_libco/settings.h | 52 + src/fluent-bit/lib/monkey/deps/flb_libco/sjlj.c | 105 + .../lib/monkey/deps/flb_libco/ucontext.c | 72 + src/fluent-bit/lib/monkey/deps/flb_libco/x86.c | 116 + .../lib/monkey/deps/rbtree/CMakeLists.txt | 5 + src/fluent-bit/lib/monkey/deps/rbtree/README.md | 7 + src/fluent-bit/lib/monkey/deps/rbtree/rbtree.c | 811 + src/fluent-bit/lib/monkey/deps/rbtree/rbtree.h | 459 + .../lib/monkey/deps/regex/CMakeLists.txt | 5 + src/fluent-bit/lib/monkey/deps/regex/re.c | 515 + src/fluent-bit/lib/monkey/deps/regex/re.h | 87 + src/fluent-bit/lib/monkey/examples/README | 1 + src/fluent-bit/lib/monkey/examples/hello.c | 68 + src/fluent-bit/lib/monkey/examples/hello.py | 12 + src/fluent-bit/lib/monkey/examples/image.h | 256 + src/fluent-bit/lib/monkey/examples/list.c | 91 + src/fluent-bit/lib/monkey/examples/list.py | 24 + src/fluent-bit/lib/monkey/examples/quiz.c | 124 + src/fluent-bit/lib/monkey/examples/quiz.py | 298 + src/fluent-bit/lib/monkey/fuzz/CMakeLists.txt | 11 + src/fluent-bit/lib/monkey/fuzz/mk_check.c | 113 + src/fluent-bit/lib/monkey/fuzz/mk_fuzz_me.c | 143 + src/fluent-bit/lib/monkey/htdocs/CMakeLists.txt | 1 + .../lib/monkey/htdocs/css/bootstrap.min.css | 7 + .../lib/monkey/htdocs/css/freelancer.css | 459 + src/fluent-bit/lib/monkey/htdocs/css/monkey.css | 59 + src/fluent-bit/lib/monkey/htdocs/favicon.ico | Bin 0 -> 133982 bytes .../htdocs/font-awesome/css/font-awesome.min.css | 4 + .../htdocs/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 85908 bytes .../font-awesome/fonts/fontawesome-webfont.eot | Bin 0 -> 56006 bytes .../font-awesome/fonts/fontawesome-webfont.svg | 520 + .../font-awesome/fonts/fontawesome-webfont.ttf | Bin 0 -> 112160 bytes .../font-awesome/fonts/fontawesome-webfont.woff | Bin 0 -> 65452 bytes .../htdocs/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../htdocs/fonts/glyphicons-halflings-regular.svg | 288 + .../htdocs/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../htdocs/fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes src/fluent-bit/lib/monkey/htdocs/img/mk_banner.png | Bin 0 -> 4281 bytes src/fluent-bit/lib/monkey/htdocs/img/mk_logo.png | Bin 0 -> 28765 bytes .../lib/monkey/htdocs/img/mk_signature.png | Bin 0 -> 14707 bytes src/fluent-bit/lib/monkey/htdocs/index.html | 207 + .../lib/monkey/htdocs/js/bootstrap.min.js | 7 + .../lib/monkey/htdocs/js/cbpAnimatedHeader.js | 44 + .../lib/monkey/htdocs/js/cbpAnimatedHeader.min.js | 11 + src/fluent-bit/lib/monkey/htdocs/js/classie.js | 80 + src/fluent-bit/lib/monkey/htdocs/js/freelancer.js | 37 + .../lib/monkey/htdocs/js/jqBootstrapValidation.js | 912 + src/fluent-bit/lib/monkey/htdocs/js/jquery.js | 4 + src/fluent-bit/lib/monkey/include/CMakeLists.txt | 11 + src/fluent-bit/lib/monkey/include/monkey/mk_api.h | 102 + .../lib/monkey/include/monkey/mk_cache.h | 26 + .../lib/monkey/include/monkey/mk_cache_tls.h | 40 + .../lib/monkey/include/monkey/mk_clock.h | 59 + .../lib/monkey/include/monkey/mk_config.h | 227 + src/fluent-bit/lib/monkey/include/monkey/mk_core.h | 69 + .../include/monkey/mk_core/external/dirent.h | 1027 + .../include/monkey/mk_core/external/wingetopt.h | 282 + .../include/monkey/mk_core/external/winpthreads.h | 340 + .../include/monkey/mk_core/external/winuio.h | 54 + .../include/monkey/mk_core/mk_core_info.h.in | 26 + .../monkey/include/monkey/mk_core/mk_dep_unistd.h | 56 + .../lib/monkey/include/monkey/mk_core/mk_dirent.h | 31 + .../lib/monkey/include/monkey/mk_core/mk_event.h | 156 + .../monkey/include/monkey/mk_core/mk_event_epoll.h | 44 + .../include/monkey/mk_core/mk_event_kqueue.h | 72 + .../include/monkey/mk_core/mk_event_libevent.h | 45 + .../include/monkey/mk_core/mk_event_select.h | 59 + .../lib/monkey/include/monkey/mk_core/mk_file.h | 48 + .../lib/monkey/include/monkey/mk_core/mk_getopt.h | 31 + .../lib/monkey/include/monkey/mk_core/mk_iov.h | 127 + .../lib/monkey/include/monkey/mk_core/mk_limits.h | 32 + .../lib/monkey/include/monkey/mk_core/mk_list.h | 244 + .../lib/monkey/include/monkey/mk_core/mk_macros.h | 184 + .../lib/monkey/include/monkey/mk_core/mk_memory.h | 125 + .../lib/monkey/include/monkey/mk_core/mk_pipe.h | 32 + .../lib/monkey/include/monkey/mk_core/mk_pthread.h | 31 + .../lib/monkey/include/monkey/mk_core/mk_rconf.h | 92 + .../lib/monkey/include/monkey/mk_core/mk_sleep.h | 59 + .../lib/monkey/include/monkey/mk_core/mk_string.h | 97 + .../lib/monkey/include/monkey/mk_core/mk_thread.h | 47 + .../include/monkey/mk_core/mk_thread_channel.h | 127 + .../lib/monkey/include/monkey/mk_core/mk_uio.h | 13 + .../lib/monkey/include/monkey/mk_core/mk_unistd.h | 31 + .../lib/monkey/include/monkey/mk_core/mk_utils.h | 115 + .../lib/monkey/include/monkey/mk_env.h.in | 26 + src/fluent-bit/lib/monkey/include/monkey/mk_fifo.h | 97 + .../lib/monkey/include/monkey/mk_header.h | 113 + src/fluent-bit/lib/monkey/include/monkey/mk_http.h | 225 + .../lib/monkey/include/monkey/mk_http2.h | 182 + .../lib/monkey/include/monkey/mk_http2_settings.h | 71 + .../lib/monkey/include/monkey/mk_http_internal.h | 197 + .../lib/monkey/include/monkey/mk_http_parser.h | 348 + .../lib/monkey/include/monkey/mk_http_status.h | 84 + .../lib/monkey/include/monkey/mk_http_thread.h | 61 + .../lib/monkey/include/monkey/mk_info.h.in | 45 + .../lib/monkey/include/monkey/mk_kernel.h | 35 + src/fluent-bit/lib/monkey/include/monkey/mk_lib.h | 76 + .../lib/monkey/include/monkey/mk_linuxtrace.h | 80 + .../lib/monkey/include/monkey/mk_mimetype.h | 45 + src/fluent-bit/lib/monkey/include/monkey/mk_net.h | 40 + .../lib/monkey/include/monkey/mk_plugin.h | 384 + .../lib/monkey/include/monkey/mk_plugin_net.h | 40 + .../lib/monkey/include/monkey/mk_plugin_stage.h | 99 + .../lib/monkey/include/monkey/mk_scheduler.h | 353 + .../lib/monkey/include/monkey/mk_scheduler_tls.h | 39 + .../lib/monkey/include/monkey/mk_server.h | 75 + .../lib/monkey/include/monkey/mk_server_tls.h | 34 + .../lib/monkey/include/monkey/mk_socket.h | 85 + .../monkey/include/monkey/mk_static_plugins.h.in | 69 + .../lib/monkey/include/monkey/mk_stream.h | 398 + .../lib/monkey/include/monkey/mk_thread.h | 25 + .../lib/monkey/include/monkey/mk_thread_libco.h | 123 + .../lib/monkey/include/monkey/mk_thread_ucontext.h | 129 + src/fluent-bit/lib/monkey/include/monkey/mk_tls.h | 110 + src/fluent-bit/lib/monkey/include/monkey/mk_user.h | 35 + .../lib/monkey/include/monkey/mk_utils.h | 54 + .../lib/monkey/include/monkey/mk_vhost.h | 123 + .../lib/monkey/include/monkey/mk_vhost_tls.h | 38 + src/fluent-bit/lib/monkey/include/monkey/monkey.h | 72 + src/fluent-bit/lib/monkey/man/CMakeLists.txt | 3 + src/fluent-bit/lib/monkey/man/monkey.1 | 127 + src/fluent-bit/lib/monkey/mk_bin/CMakeLists.txt | 21 + src/fluent-bit/lib/monkey/mk_bin/mk_signals.c | 103 + src/fluent-bit/lib/monkey/mk_bin/mk_signals.h | 27 + src/fluent-bit/lib/monkey/mk_bin/monkey.c | 328 + src/fluent-bit/lib/monkey/mk_bin/systemd.in | 13 + src/fluent-bit/lib/monkey/mk_core/CMakeLists.txt | 156 + .../lib/monkey/mk_core/deps/CMakeLists.txt | 13 + .../lib/monkey/mk_core/deps/libevent/.clang-format | 63 + .../lib/monkey/mk_core/deps/libevent/.gitignore | 149 + .../lib/monkey/mk_core/deps/libevent/.travis.yml | 88 + .../lib/monkey/mk_core/deps/libevent/.uncrustify | 55 + .../monkey/mk_core/deps/libevent/CMakeLists.txt | 1458 ++ .../monkey/mk_core/deps/libevent/CONTRIBUTING.md | 35 + .../lib/monkey/mk_core/deps/libevent/ChangeLog | 1811 ++ .../lib/monkey/mk_core/deps/libevent/ChangeLog-1.4 | 231 + .../lib/monkey/mk_core/deps/libevent/ChangeLog-2.0 | 1280 + .../lib/monkey/mk_core/deps/libevent/Doxyfile | 257 + .../lib/monkey/mk_core/deps/libevent/LICENSE | 99 + .../lib/monkey/mk_core/deps/libevent/Makefile.am | 305 + .../monkey/mk_core/deps/libevent/Makefile.nmake | 82 + .../lib/monkey/mk_core/deps/libevent/README.md | 427 + .../lib/monkey/mk_core/deps/libevent/VERSION | 5 + .../lib/monkey/mk_core/deps/libevent/Vagrantfile | 400 + .../mk_core/deps/libevent/WIN32-Code/getopt.c | 149 + .../mk_core/deps/libevent/WIN32-Code/getopt.h | 33 + .../mk_core/deps/libevent/WIN32-Code/getopt_long.c | 233 + .../libevent/WIN32-Code/nmake/evconfig-private.h | 6 + .../WIN32-Code/nmake/event2/event-config.h | 360 + .../monkey/mk_core/deps/libevent/WIN32-Code/tree.h | 677 + .../lib/monkey/mk_core/deps/libevent/appveyor.yml | 59 + .../lib/monkey/mk_core/deps/libevent/arc4random.c | 556 + .../lib/monkey/mk_core/deps/libevent/autogen.sh | 22 + .../lib/monkey/mk_core/deps/libevent/buffer.c | 3447 +++ .../lib/monkey/mk_core/deps/libevent/buffer_iocp.c | 326 + .../mk_core/deps/libevent/bufferevent-internal.h | 482 + .../lib/monkey/mk_core/deps/libevent/bufferevent.c | 1015 + .../mk_core/deps/libevent/bufferevent_async.c | 686 + .../mk_core/deps/libevent/bufferevent_filter.c | 623 + .../mk_core/deps/libevent/bufferevent_openssl.c | 1486 ++ .../mk_core/deps/libevent/bufferevent_pair.c | 365 + .../mk_core/deps/libevent/bufferevent_ratelim.c | 1092 + .../mk_core/deps/libevent/bufferevent_sock.c | 720 + .../mk_core/deps/libevent/changelist-internal.h | 102 + .../lib/monkey/mk_core/deps/libevent/checkpatch.sh | 299 + .../deps/libevent/cmake/AddCompilerFlags.cmake | 13 + .../deps/libevent/cmake/COPYING-CMAKE-SCRIPTS | 22 + .../deps/libevent/cmake/CheckFileOffsetBits.c | 14 + .../deps/libevent/cmake/CheckFileOffsetBits.cmake | 43 + .../deps/libevent/cmake/CheckFunctionExistsEx.c | 30 + .../libevent/cmake/CheckFunctionExistsEx.cmake | 69 + .../libevent/cmake/CheckFunctionKeywords.cmake | 14 + .../libevent/cmake/CheckPrototypeDefinition.c.in | 29 + .../libevent/cmake/CheckPrototypeDefinition.cmake | 82 + .../cmake/CheckWaitpidSupportWNOWAIT.cmake | 18 + .../deps/libevent/cmake/CheckWorkingKqueue.cmake | 52 + .../mk_core/deps/libevent/cmake/CodeCoverage.cmake | 165 + .../mk_core/deps/libevent/cmake/Copyright.txt | 57 + .../mk_core/deps/libevent/cmake/FindGit.cmake | 45 + .../deps/libevent/cmake/LibeventConfig.cmake.in | 17 + .../cmake/LibeventConfigBuildTree.cmake.in | 17 + .../libevent/cmake/LibeventConfigVersion.cmake.in | 11 + .../deps/libevent/cmake/VersionViaGit.cmake | 66 + .../mk_core/deps/libevent/compat/sys/queue.h | 488 + .../lib/monkey/mk_core/deps/libevent/configure.ac | 958 + .../monkey/mk_core/deps/libevent/defer-internal.h | 70 + .../lib/monkey/mk_core/deps/libevent/devpoll.c | 311 + .../lib/monkey/mk_core/deps/libevent/epoll.c | 540 + .../lib/monkey/mk_core/deps/libevent/epoll_sub.c | 66 + .../mk_core/deps/libevent/epolltable-internal.h | 1166 + .../mk_core/deps/libevent/evbuffer-internal.h | 351 + .../mk_core/deps/libevent/evconfig-private.h.cmake | 35 + .../mk_core/deps/libevent/evconfig-private.h.in | 48 + .../lib/monkey/mk_core/deps/libevent/evdns.3 | 322 + .../lib/monkey/mk_core/deps/libevent/evdns.c | 4767 ++++ .../mk_core/deps/libevent/event-config.h.cmake | 532 + .../monkey/mk_core/deps/libevent/event-internal.h | 479 + .../lib/monkey/mk_core/deps/libevent/event.3 | 624 + .../lib/monkey/mk_core/deps/libevent/event.c | 3940 +++ .../lib/monkey/mk_core/deps/libevent/event_iocp.c | 294 + .../monkey/mk_core/deps/libevent/event_rpcgen.py | 1728 ++ .../monkey/mk_core/deps/libevent/event_tagging.c | 605 + .../monkey/mk_core/deps/libevent/evmap-internal.h | 117 + .../lib/monkey/mk_core/deps/libevent/evmap.c | 1055 + .../lib/monkey/mk_core/deps/libevent/evport.c | 451 + .../monkey/mk_core/deps/libevent/evrpc-internal.h | 205 + .../lib/monkey/mk_core/deps/libevent/evrpc.c | 1171 + .../mk_core/deps/libevent/evsignal-internal.h | 65 + .../mk_core/deps/libevent/evthread-internal.h | 392 + .../lib/monkey/mk_core/deps/libevent/evthread.c | 509 + .../mk_core/deps/libevent/evthread_pthread.c | 191 + .../monkey/mk_core/deps/libevent/evthread_win32.c | 341 + .../lib/monkey/mk_core/deps/libevent/evutil.c | 2693 +++ .../lib/monkey/mk_core/deps/libevent/evutil_rand.c | 206 + .../lib/monkey/mk_core/deps/libevent/evutil_time.c | 573 + .../lib/monkey/mk_core/deps/libevent/ht-internal.h | 487 + .../monkey/mk_core/deps/libevent/http-internal.h | 205 + .../lib/monkey/mk_core/deps/libevent/http.c | 5024 ++++ .../monkey/mk_core/deps/libevent/include/evdns.h | 45 + .../monkey/mk_core/deps/libevent/include/event.h | 83 + .../mk_core/deps/libevent/include/event2/buffer.h | 1076 + .../deps/libevent/include/event2/buffer_compat.h | 115 + .../deps/libevent/include/event2/bufferevent.h | 1021 + .../libevent/include/event2/bufferevent_compat.h | 100 + .../deps/libevent/include/event2/bufferevent_ssl.h | 134 + .../libevent/include/event2/bufferevent_struct.h | 116 + .../mk_core/deps/libevent/include/event2/dns.h | 717 + .../deps/libevent/include/event2/dns_compat.h | 336 + .../deps/libevent/include/event2/dns_struct.h | 80 + .../mk_core/deps/libevent/include/event2/event.h | 1675 ++ .../deps/libevent/include/event2/event_compat.h | 230 + .../deps/libevent/include/event2/event_struct.h | 180 + .../mk_core/deps/libevent/include/event2/http.h | 1189 + .../deps/libevent/include/event2/http_compat.h | 90 + .../deps/libevent/include/event2/http_struct.h | 152 + .../deps/libevent/include/event2/keyvalq_struct.h | 80 + .../deps/libevent/include/event2/listener.h | 180 + .../mk_core/deps/libevent/include/event2/rpc.h | 596 + .../deps/libevent/include/event2/rpc_compat.h | 61 + .../deps/libevent/include/event2/rpc_struct.h | 100 + .../mk_core/deps/libevent/include/event2/tag.h | 146 + .../deps/libevent/include/event2/tag_compat.h | 49 + .../mk_core/deps/libevent/include/event2/thread.h | 253 + .../mk_core/deps/libevent/include/event2/util.h | 866 + .../deps/libevent/include/event2/visibility.h | 50 + .../monkey/mk_core/deps/libevent/include/evhttp.h | 45 + .../monkey/mk_core/deps/libevent/include/evrpc.h | 45 + .../monkey/mk_core/deps/libevent/include/evutil.h | 39 + .../mk_core/deps/libevent/include/include.am | 46 + .../monkey/mk_core/deps/libevent/iocp-internal.h | 201 + .../monkey/mk_core/deps/libevent/ipv6-internal.h | 83 + .../monkey/mk_core/deps/libevent/kqueue-internal.h | 39 + .../lib/monkey/mk_core/deps/libevent/kqueue.c | 567 + .../monkey/mk_core/deps/libevent/libevent.pc.in | 16 + .../mk_core/deps/libevent/libevent_core.pc.in | 16 + .../mk_core/deps/libevent/libevent_extra.pc.in | 16 + .../mk_core/deps/libevent/libevent_openssl.pc.in | 16 + .../mk_core/deps/libevent/libevent_pthreads.pc.in | 16 + .../lib/monkey/mk_core/deps/libevent/listener.c | 890 + .../monkey/mk_core/deps/libevent/log-internal.h | 83 + .../lib/monkey/mk_core/deps/libevent/log.c | 253 + .../deps/libevent/m4/ac_backport_259_ssizet.m4 | 3 + .../monkey/mk_core/deps/libevent/m4/acx_pthread.m4 | 279 + .../mk_core/deps/libevent/m4/libevent_openssl.m4 | 52 + .../mk_core/deps/libevent/m4/ntp_pkg_config.m4 | 27 + .../mk_core/deps/libevent/make-event-config.sed | 23 + .../mk_core/deps/libevent/make_epoll_table.py | 63 + .../mk_core/deps/libevent/minheap-internal.h | 188 + .../lib/monkey/mk_core/deps/libevent/mm-internal.h | 87 + .../monkey/mk_core/deps/libevent/openssl-compat.h | 35 + .../lib/monkey/mk_core/deps/libevent/poll.c | 341 + .../mk_core/deps/libevent/ratelim-internal.h | 105 + .../mk_core/deps/libevent/sample/dns-example.c | 257 + .../mk_core/deps/libevent/sample/event-read-fifo.c | 162 + .../mk_core/deps/libevent/sample/hello-world.c | 141 + .../mk_core/deps/libevent/sample/hostcheck.c | 217 + .../mk_core/deps/libevent/sample/hostcheck.h | 30 + .../mk_core/deps/libevent/sample/http-connect.c | 117 + .../mk_core/deps/libevent/sample/http-server.c | 418 + .../mk_core/deps/libevent/sample/https-client.c | 502 + .../monkey/mk_core/deps/libevent/sample/include.am | 53 + .../monkey/mk_core/deps/libevent/sample/le-proxy.c | 291 + .../libevent/sample/openssl_hostname_validation.c | 177 + .../libevent/sample/openssl_hostname_validation.h | 56 + .../mk_core/deps/libevent/sample/signal-test.c | 72 + .../mk_core/deps/libevent/sample/time-test.c | 107 + .../lib/monkey/mk_core/deps/libevent/select.c | 346 + .../lib/monkey/mk_core/deps/libevent/signal.c | 479 + .../mk_core/deps/libevent/strlcpy-internal.h | 22 + .../lib/monkey/mk_core/deps/libevent/strlcpy.c | 75 + .../mk_core/deps/libevent/test/Makefile.nmake | 79 + .../lib/monkey/mk_core/deps/libevent/test/bench.c | 207 + .../mk_core/deps/libevent/test/bench_cascade.c | 188 + .../monkey/mk_core/deps/libevent/test/bench_http.c | 197 + .../mk_core/deps/libevent/test/bench_httpclient.c | 240 + .../mk_core/deps/libevent/test/check-dumpevents.py | 54 + .../monkey/mk_core/deps/libevent/test/include.am | 148 + .../deps/libevent/test/print-winsock-errors.c | 86 + .../monkey/mk_core/deps/libevent/test/regress.c | 3473 +++ .../monkey/mk_core/deps/libevent/test/regress.h | 144 + .../monkey/mk_core/deps/libevent/test/regress.rpc | 25 + .../mk_core/deps/libevent/test/regress_buffer.c | 2563 ++ .../deps/libevent/test/regress_bufferevent.c | 1443 ++ .../mk_core/deps/libevent/test/regress_dns.c | 2172 ++ .../monkey/mk_core/deps/libevent/test/regress_et.c | 204 + .../mk_core/deps/libevent/test/regress_finalize.c | 347 + .../mk_core/deps/libevent/test/regress_http.c | 4640 ++++ .../mk_core/deps/libevent/test/regress_iocp.c | 352 + .../mk_core/deps/libevent/test/regress_listener.c | 258 + .../mk_core/deps/libevent/test/regress_main.c | 464 + .../mk_core/deps/libevent/test/regress_minheap.c | 99 + .../mk_core/deps/libevent/test/regress_rpc.c | 905 + .../mk_core/deps/libevent/test/regress_ssl.c | 802 + .../mk_core/deps/libevent/test/regress_testutils.c | 233 + .../mk_core/deps/libevent/test/regress_testutils.h | 67 + .../mk_core/deps/libevent/test/regress_thread.c | 590 + .../mk_core/deps/libevent/test/regress_thread.h | 48 + .../mk_core/deps/libevent/test/regress_util.c | 1478 ++ .../mk_core/deps/libevent/test/regress_zlib.c | 348 + .../mk_core/deps/libevent/test/rpcgen_wrapper.sh | 52 + .../mk_core/deps/libevent/test/test-changelist.c | 224 + .../mk_core/deps/libevent/test/test-closed.c | 110 + .../mk_core/deps/libevent/test/test-dumpevents.c | 179 + .../monkey/mk_core/deps/libevent/test/test-eof.c | 117 + .../mk_core/deps/libevent/test/test-fdleak.c | 249 + .../monkey/mk_core/deps/libevent/test/test-init.c | 65 + .../mk_core/deps/libevent/test/test-ratelim.c | 603 + .../mk_core/deps/libevent/test/test-ratelim.sh | 88 + .../monkey/mk_core/deps/libevent/test/test-time.c | 116 + .../monkey/mk_core/deps/libevent/test/test-weof.c | 114 + .../lib/monkey/mk_core/deps/libevent/test/test.sh | 160 + .../monkey/mk_core/deps/libevent/test/tinytest.c | 493 + .../monkey/mk_core/deps/libevent/test/tinytest.h | 100 + .../mk_core/deps/libevent/test/tinytest_demo.c | 262 + .../mk_core/deps/libevent/test/tinytest_local.h | 12 + .../mk_core/deps/libevent/test/tinytest_macros.h | 205 + .../monkey/mk_core/deps/libevent/time-internal.h | 98 + .../monkey/mk_core/deps/libevent/util-internal.h | 483 + .../monkey/mk_core/deps/libevent/whatsnew-2.0.txt | 609 + .../monkey/mk_core/deps/libevent/whatsnew-2.1.txt | 690 + .../lib/monkey/mk_core/deps/libevent/win32select.c | 388 + .../lib/monkey/mk_core/external/README.md | 3 + .../lib/monkey/mk_core/external/winpthreads.c | 1261 + .../lib/monkey/mk_core/include/CMakeLists.txt | 16 + src/fluent-bit/lib/monkey/mk_core/mk_event.c | 211 + src/fluent-bit/lib/monkey/mk_core/mk_event_epoll.c | 461 + .../lib/monkey/mk_core/mk_event_kqueue.c | 373 + .../lib/monkey/mk_core/mk_event_libevent.c | 514 + .../lib/monkey/mk_core/mk_event_select.c | 439 + src/fluent-bit/lib/monkey/mk_core/mk_file.c | 153 + src/fluent-bit/lib/monkey/mk_core/mk_iov.c | 209 + src/fluent-bit/lib/monkey/mk_core/mk_memory.c | 80 + src/fluent-bit/lib/monkey/mk_core/mk_rconf.c | 779 + src/fluent-bit/lib/monkey/mk_core/mk_string.c | 615 + src/fluent-bit/lib/monkey/mk_core/mk_thread.c | 347 + .../lib/monkey/mk_core/mk_thread_channel.c | 150 + src/fluent-bit/lib/monkey/mk_core/mk_utils.c | 393 + src/fluent-bit/lib/monkey/mk_server/CMakeLists.txt | 57 + src/fluent-bit/lib/monkey/mk_server/mk_cache.c | 81 + src/fluent-bit/lib/monkey/mk_server/mk_clock.c | 171 + src/fluent-bit/lib/monkey/mk_server/mk_config.c | 636 + src/fluent-bit/lib/monkey/mk_server/mk_fifo.c | 463 + src/fluent-bit/lib/monkey/mk_server/mk_header.c | 451 + src/fluent-bit/lib/monkey/mk_server/mk_http.c | 1638 ++ src/fluent-bit/lib/monkey/mk_server/mk_http2.c | 384 + .../lib/monkey/mk_server/mk_http_parser.c | 744 + .../lib/monkey/mk_server/mk_http_thread.c | 290 + src/fluent-bit/lib/monkey/mk_server/mk_kernel.c | 165 + src/fluent-bit/lib/monkey/mk_server/mk_lib.c | 796 + src/fluent-bit/lib/monkey/mk_server/mk_mimetype.c | 227 + src/fluent-bit/lib/monkey/mk_server/mk_net.c | 284 + src/fluent-bit/lib/monkey/mk_server/mk_plugin.c | 804 + src/fluent-bit/lib/monkey/mk_server/mk_scheduler.c | 866 + src/fluent-bit/lib/monkey/mk_server/mk_server.c | 679 + src/fluent-bit/lib/monkey/mk_server/mk_socket.c | 402 + src/fluent-bit/lib/monkey/mk_server/mk_stream.c | 338 + src/fluent-bit/lib/monkey/mk_server/mk_user.c | 175 + src/fluent-bit/lib/monkey/mk_server/mk_utils.c | 589 + src/fluent-bit/lib/monkey/mk_server/mk_vhost.c | 821 + src/fluent-bit/lib/monkey/mk_server/monkey.c | 241 + src/fluent-bit/lib/monkey/monkey.pc.in | 10 + src/fluent-bit/lib/monkey/monkey.spec | 145 + src/fluent-bit/lib/monkey/plugins/CMakeLists.txt | 111 + src/fluent-bit/lib/monkey/plugins/README | 61 + src/fluent-bit/lib/monkey/plugins/auth/ABOUT | 2 + .../lib/monkey/plugins/auth/CMakeLists.txt | 10 + src/fluent-bit/lib/monkey/plugins/auth/OPTIONAL | 0 src/fluent-bit/lib/monkey/plugins/auth/auth.c | 254 + src/fluent-bit/lib/monkey/plugins/auth/auth.h | 106 + src/fluent-bit/lib/monkey/plugins/auth/base64.c | 172 + src/fluent-bit/lib/monkey/plugins/auth/base64.h | 11 + src/fluent-bit/lib/monkey/plugins/auth/conf.c | 244 + src/fluent-bit/lib/monkey/plugins/auth/conf.h | 25 + src/fluent-bit/lib/monkey/plugins/auth/sha1.c | 288 + src/fluent-bit/lib/monkey/plugins/auth/sha1.h | 22 + .../lib/monkey/plugins/auth/tools/CMakeLists.txt | 15 + .../lib/monkey/plugins/auth/tools/mk_passwd.c | 209 + .../lib/monkey/plugins/cgi/CMakeLists.txt | 7 + src/fluent-bit/lib/monkey/plugins/cgi/cgi.c | 501 + src/fluent-bit/lib/monkey/plugins/cgi/cgi.h | 133 + src/fluent-bit/lib/monkey/plugins/cgi/event.c | 170 + src/fluent-bit/lib/monkey/plugins/cgi/request.c | 72 + src/fluent-bit/lib/monkey/plugins/cheetah/ABOUT | 4 + .../lib/monkey/plugins/cheetah/CMakeLists.txt | 9 + src/fluent-bit/lib/monkey/plugins/cheetah/OPTIONAL | 0 .../lib/monkey/plugins/cheetah/cheetah.c | 162 + .../lib/monkey/plugins/cheetah/cheetah.h | 79 + src/fluent-bit/lib/monkey/plugins/cheetah/cmd.c | 472 + src/fluent-bit/lib/monkey/plugins/cheetah/cmd.h | 41 + .../lib/monkey/plugins/cheetah/conf/CMakeLists.txt | 9 + .../lib/monkey/plugins/cheetah/conf/cheetah.conf | 17 + src/fluent-bit/lib/monkey/plugins/cheetah/cutils.c | 117 + src/fluent-bit/lib/monkey/plugins/cheetah/cutils.h | 32 + src/fluent-bit/lib/monkey/plugins/cheetah/loop.c | 149 + src/fluent-bit/lib/monkey/plugins/cheetah/loop.h | 26 + src/fluent-bit/lib/monkey/plugins/dirlisting/ABOUT | 4 + .../lib/monkey/plugins/dirlisting/CMakeLists.txt | 7 + .../lib/monkey/plugins/dirlisting/OPTIONAL | 0 .../monkey/plugins/dirlisting/conf/CMakeLists.txt | 11 + .../monkey/plugins/dirlisting/conf/dirhtml.conf | 2 + .../dirlisting/conf/themes/bootstrap/entry.theme | 5 + .../dirlisting/conf/themes/bootstrap/footer.theme | 8 + .../dirlisting/conf/themes/bootstrap/header.theme | 27 + .../dirlisting/conf/themes/guineo/entry.theme | 14 + .../dirlisting/conf/themes/guineo/footer.theme | 7 + .../dirlisting/conf/themes/guineo/header.theme | 58 + .../lib/monkey/plugins/dirlisting/dirlisting.c | 949 + .../lib/monkey/plugins/dirlisting/dirlisting.h | 181 + .../lib/monkey/plugins/fastcgi/CMakeLists.txt | 7 + .../lib/monkey/plugins/fastcgi/conf/CMakeLists.txt | 9 + .../lib/monkey/plugins/fastcgi/conf/fastcgi.conf | 16 + .../lib/monkey/plugins/fastcgi/fastcgi.c | 233 + .../lib/monkey/plugins/fastcgi/fastcgi.h | 36 + .../lib/monkey/plugins/fastcgi/fcgi_handler.c | 967 + .../lib/monkey/plugins/fastcgi/fcgi_handler.h | 128 + src/fluent-bit/lib/monkey/plugins/liana/ABOUT | 4 + .../lib/monkey/plugins/liana/CMakeLists.txt | 5 + src/fluent-bit/lib/monkey/plugins/liana/MANDATORY | 0 .../lib/monkey/plugins/liana/Makefile.in | 18 + src/fluent-bit/lib/monkey/plugins/liana/README | 7 + src/fluent-bit/lib/monkey/plugins/liana/STATIC | 0 src/fluent-bit/lib/monkey/plugins/liana/liana.c | 221 + .../lib/monkey/plugins/logger/CMakeLists.txt | 21 + .../lib/monkey/plugins/logger/conf/CMakeLists.txt | 11 + .../lib/monkey/plugins/logger/conf/logger.conf.in | 22 + src/fluent-bit/lib/monkey/plugins/logger/logger.c | 852 + src/fluent-bit/lib/monkey/plugins/logger/logger.h | 58 + .../lib/monkey/plugins/logger/pointers.c | 43 + .../lib/monkey/plugins/logger/pointers.h | 59 + .../lib/monkey/plugins/mandril/CMakeLists.txt | 6 + .../lib/monkey/plugins/mandril/conf/CMakeLists.txt | 9 + .../lib/monkey/plugins/mandril/conf/mandril.conf | 57 + .../lib/monkey/plugins/mandril/mandril.c | 403 + .../lib/monkey/plugins/mandril/mandril.h | 57 + .../lib/monkey/plugins/tls/CMakeLists.txt | 17 + .../lib/monkey/plugins/tls/conf/CMakeLists.txt | 9 + .../lib/monkey/plugins/tls/conf/tls.conf | 25 + src/fluent-bit/lib/monkey/plugins/tls/tls.c | 862 + src/fluent-bit/lib/monkey/qa/README.txt | 20 + src/fluent-bit/lib/monkey/qa/TEMPLATE | 26 + src/fluent-bit/lib/monkey/qa/__CONFIG | 10 + src/fluent-bit/lib/monkey/qa/__MACROS | 51 + src/fluent-bit/lib/monkey/qa/checklog | 239 + .../lib/monkey/qa/connection_http10_01.htt | 26 + .../lib/monkey/qa/connection_http10_02.htt | 28 + .../lib/monkey/qa/connection_http10_03.htt | 27 + .../lib/monkey/qa/connection_http11_01.htt | 27 + .../lib/monkey/qa/connection_http11_02.htt | 28 + .../lib/monkey/qa/connection_http11_03.htt | 30 + .../lib/monkey/qa/directory_redirect_01.htt | 33 + .../lib/monkey/qa/directory_redirect_02.htt | 33 + .../lib/monkey/qa/directory_redirect_03.htt | 33 + src/fluent-bit/lib/monkey/qa/docs_httest.txt | 181 + src/fluent-bit/lib/monkey/qa/error_400_test01.htt | 26 + src/fluent-bit/lib/monkey/qa/error_404.htt | 26 + src/fluent-bit/lib/monkey/qa/error_411.htt | 26 + src/fluent-bit/lib/monkey/qa/error_413_01.htt | 28 + src/fluent-bit/lib/monkey/qa/error_413_02.htt | 297 + src/fluent-bit/lib/monkey/qa/error_501.htt | 26 + src/fluent-bit/lib/monkey/qa/error_505.htt | 27 + src/fluent-bit/lib/monkey/qa/head_01.htt | 23 + src/fluent-bit/lib/monkey/qa/head_02.htt | 29 + .../lib/monkey/qa/headers_case_insensitive.htt | 36 + src/fluent-bit/lib/monkey/qa/hexa.htt | 26 + src/fluent-bit/lib/monkey/qa/host_port_01.htt | 27 + src/fluent-bit/lib/monkey/qa/host_port_02.htt | 25 + src/fluent-bit/lib/monkey/qa/host_port_03.htt | 25 + src/fluent-bit/lib/monkey/qa/http_parse_01.htt | 23 + .../lib/monkey/qa/if_modified_since_test01.htt | 32 + .../lib/monkey/qa/if_modified_since_test02.htt | 38 + .../lib/monkey/qa/if_modified_since_test03.htt | 50 + .../lib/monkey/qa/if_modified_since_test04.htt | 38 + src/fluent-bit/lib/monkey/qa/keepalive_01.htt | 30 + src/fluent-bit/lib/monkey/qa/keepalive_02.htt | 32 + src/fluent-bit/lib/monkey/qa/last_modified_01.htt | 30 + src/fluent-bit/lib/monkey/qa/path_traversal01.htt | 27 + src/fluent-bit/lib/monkey/qa/path_traversal02.htt | 27 + src/fluent-bit/lib/monkey/qa/path_traversal03.htt | 27 + src/fluent-bit/lib/monkey/qa/post_test01.htt | 26 + src/fluent-bit/lib/monkey/qa/post_test02.htt | 33 + src/fluent-bit/lib/monkey/qa/post_test03.htt | 28 + src/fluent-bit/lib/monkey/qa/protocol_01.htt | 26 + src/fluent-bit/lib/monkey/qa/protocol_02.htt | 25 + src/fluent-bit/lib/monkey/qa/protocol_03.htt | 25 + src/fluent-bit/lib/monkey/qa/protocol_04.htt | 25 + src/fluent-bit/lib/monkey/qa/protocol_05.htt | 25 + src/fluent-bit/lib/monkey/qa/query.htt | 25 + src/fluent-bit/lib/monkey/qa/ranges_test01.htt | 37 + src/fluent-bit/lib/monkey/qa/ranges_test02.htt | 37 + src/fluent-bit/lib/monkey/qa/ranges_test03.htt | 45 + src/fluent-bit/lib/monkey/qa/ranges_test04.htt | 45 + src/fluent-bit/lib/monkey/qa/ranges_test05.htt | 46 + src/fluent-bit/lib/monkey/qa/run_tests.sh | 119 + src/fluent-bit/lib/monkey/qa/simple.htt | 26 + src/fluent-bit/lib/monkey/qa/uri_01.htt | 26 + src/fluent-bit/lib/monkey/qa/uri_02.htt | 27 + 566 files changed, 166859 insertions(+) create mode 100644 src/fluent-bit/lib/monkey/.gitignore create mode 100644 src/fluent-bit/lib/monkey/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/CONTRIBUTING.md create mode 100644 src/fluent-bit/lib/monkey/ChangeLog create mode 100644 src/fluent-bit/lib/monkey/ChangeLog.old create mode 100644 src/fluent-bit/lib/monkey/FUZZ.md create mode 100644 src/fluent-bit/lib/monkey/INSTALL create mode 100644 src/fluent-bit/lib/monkey/LICENSE create mode 100644 src/fluent-bit/lib/monkey/NOTICE create mode 100644 src/fluent-bit/lib/monkey/README.md create mode 100644 src/fluent-bit/lib/monkey/api/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/api/errors.c create mode 100644 src/fluent-bit/lib/monkey/api/test.c create mode 100644 src/fluent-bit/lib/monkey/cmake/FindLibkqueue.cmake create mode 100644 src/fluent-bit/lib/monkey/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/conf/monkey.conf.in create mode 100644 src/fluent-bit/lib/monkey/conf/monkey.mime.in create mode 100644 src/fluent-bit/lib/monkey/conf/plugins.load.in create mode 100644 src/fluent-bit/lib/monkey/conf/sites/default.in create mode 100755 src/fluent-bit/lib/monkey/configure create mode 100755 src/fluent-bit/lib/monkey/debian.sh create mode 100644 src/fluent-bit/lib/monkey/debian/changelog create mode 100644 src/fluent-bit/lib/monkey/debian/compat create mode 100644 src/fluent-bit/lib/monkey/debian/control create mode 100644 src/fluent-bit/lib/monkey/debian/copyright create mode 100644 src/fluent-bit/lib/monkey/debian/docs create mode 100644 src/fluent-bit/lib/monkey/debian/monkey-dev.install create mode 100644 src/fluent-bit/lib/monkey/debian/monkey-doc.docs create mode 100644 src/fluent-bit/lib/monkey/debian/monkey-doc.install create mode 100644 src/fluent-bit/lib/monkey/debian/monkey-polarssl.install create mode 100755 src/fluent-bit/lib/monkey/debian/monkey.init create mode 100644 src/fluent-bit/lib/monkey/debian/monkey.install create mode 100644 src/fluent-bit/lib/monkey/debian/monkey.postinst create mode 100755 src/fluent-bit/lib/monkey/debian/rules create mode 100644 src/fluent-bit/lib/monkey/debian/source/format create mode 100644 src/fluent-bit/lib/monkey/debian/watch create mode 100644 src/fluent-bit/lib/monkey/deps/deps.txt create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/README.md create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/aarch64.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/amd64.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/arm.c create mode 100755 src/fluent-bit/lib/monkey/deps/flb_libco/doc/style.css create mode 100755 src/fluent-bit/lib/monkey/deps/flb_libco/doc/targets.html create mode 100755 src/fluent-bit/lib/monkey/deps/flb_libco/doc/usage.html create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/fiber.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/libco.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/libco.h create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/ppc.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/settings.h create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/sjlj.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/ucontext.c create mode 100644 src/fluent-bit/lib/monkey/deps/flb_libco/x86.c create mode 100644 src/fluent-bit/lib/monkey/deps/rbtree/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/deps/rbtree/README.md create mode 100644 src/fluent-bit/lib/monkey/deps/rbtree/rbtree.c create mode 100644 src/fluent-bit/lib/monkey/deps/rbtree/rbtree.h create mode 100644 src/fluent-bit/lib/monkey/deps/regex/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/deps/regex/re.c create mode 100644 src/fluent-bit/lib/monkey/deps/regex/re.h create mode 100644 src/fluent-bit/lib/monkey/examples/README create mode 100644 src/fluent-bit/lib/monkey/examples/hello.c create mode 100644 src/fluent-bit/lib/monkey/examples/hello.py create mode 100644 src/fluent-bit/lib/monkey/examples/image.h create mode 100644 src/fluent-bit/lib/monkey/examples/list.c create mode 100644 src/fluent-bit/lib/monkey/examples/list.py create mode 100644 src/fluent-bit/lib/monkey/examples/quiz.c create mode 100644 src/fluent-bit/lib/monkey/examples/quiz.py create mode 100644 src/fluent-bit/lib/monkey/fuzz/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/fuzz/mk_check.c create mode 100644 src/fluent-bit/lib/monkey/fuzz/mk_fuzz_me.c create mode 100644 src/fluent-bit/lib/monkey/htdocs/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/htdocs/css/bootstrap.min.css create mode 100644 src/fluent-bit/lib/monkey/htdocs/css/freelancer.css create mode 100644 src/fluent-bit/lib/monkey/htdocs/css/monkey.css create mode 100644 src/fluent-bit/lib/monkey/htdocs/favicon.ico create mode 100644 src/fluent-bit/lib/monkey/htdocs/font-awesome/css/font-awesome.min.css create mode 100644 src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/FontAwesome.otf create mode 100644 src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.eot create mode 100644 src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.svg create mode 100644 src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.ttf create mode 100644 src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff create mode 100644 src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff2 create mode 100644 src/fluent-bit/lib/monkey/htdocs/img/mk_banner.png create mode 100644 src/fluent-bit/lib/monkey/htdocs/img/mk_logo.png create mode 100644 src/fluent-bit/lib/monkey/htdocs/img/mk_signature.png create mode 100644 src/fluent-bit/lib/monkey/htdocs/index.html create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/bootstrap.min.js create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.js create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.min.js create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/classie.js create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/freelancer.js create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/jqBootstrapValidation.js create mode 100644 src/fluent-bit/lib/monkey/htdocs/js/jquery.js create mode 100644 src/fluent-bit/lib/monkey/include/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_api.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_cache.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_cache_tls.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_clock.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_config.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/external/dirent.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/external/wingetopt.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/external/winpthreads.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/external/winuio.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_core_info.h.in create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_dep_unistd.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_dirent.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_event.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_event_epoll.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_event_kqueue.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_event_libevent.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_event_select.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_file.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_getopt.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_iov.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_limits.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_list.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_macros.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_memory.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_pipe.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_pthread.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_rconf.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_sleep.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_string.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_thread.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_thread_channel.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_uio.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_unistd.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_core/mk_utils.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_env.h.in create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_fifo.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_header.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http2.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http2_settings.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http_internal.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http_parser.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http_status.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_http_thread.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_info.h.in create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_kernel.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_lib.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_linuxtrace.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_mimetype.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_net.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_plugin.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_plugin_net.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_plugin_stage.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_scheduler.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_scheduler_tls.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_server.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_server_tls.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_socket.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_static_plugins.h.in create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_stream.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_thread.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_thread_libco.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_thread_ucontext.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_tls.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_user.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_utils.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_vhost.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/mk_vhost_tls.h create mode 100644 src/fluent-bit/lib/monkey/include/monkey/monkey.h create mode 100644 src/fluent-bit/lib/monkey/man/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/man/monkey.1 create mode 100644 src/fluent-bit/lib/monkey/mk_bin/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/mk_bin/mk_signals.c create mode 100644 src/fluent-bit/lib/monkey/mk_bin/mk_signals.h create mode 100644 src/fluent-bit/lib/monkey/mk_bin/monkey.c create mode 100644 src/fluent-bit/lib/monkey/mk_bin/systemd.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/.clang-format create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/.gitignore create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/.travis.yml create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/.uncrustify create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/CONTRIBUTING.md create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/ChangeLog create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/ChangeLog-1.4 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/ChangeLog-2.0 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/Doxyfile create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/LICENSE create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/Makefile.am create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/Makefile.nmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/README.md create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/VERSION create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/Vagrantfile create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/WIN32-Code/getopt.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/WIN32-Code/getopt.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/WIN32-Code/getopt_long.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/WIN32-Code/nmake/evconfig-private.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/WIN32-Code/nmake/event2/event-config.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/WIN32-Code/tree.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/appveyor.yml create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/arc4random.c create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/autogen.sh create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/buffer.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/buffer_iocp.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent_async.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent_filter.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent_openssl.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent_pair.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent_ratelim.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/bufferevent_sock.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/changelist-internal.h create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/checkpatch.sh create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/AddCompilerFlags.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/COPYING-CMAKE-SCRIPTS create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckFileOffsetBits.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckFileOffsetBits.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckFunctionExistsEx.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckFunctionExistsEx.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckFunctionKeywords.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckPrototypeDefinition.c.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckPrototypeDefinition.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckWaitpidSupportWNOWAIT.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CheckWorkingKqueue.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/CodeCoverage.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/Copyright.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/FindGit.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/LibeventConfig.cmake.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/LibeventConfigBuildTree.cmake.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/LibeventConfigVersion.cmake.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/cmake/VersionViaGit.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/compat/sys/queue.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/configure.ac create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/defer-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/devpoll.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/epoll.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/epoll_sub.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/epolltable-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evbuffer-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evconfig-private.h.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evconfig-private.h.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evdns.3 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evdns.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event-config.h.cmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event.3 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event_iocp.c create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event_rpcgen.py create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/event_tagging.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evmap-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evmap.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evport.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evrpc-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evrpc.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evsignal-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evthread-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evthread.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evthread_pthread.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evthread_win32.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evutil.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evutil_rand.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/evutil_time.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/ht-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/http-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/http.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/evdns.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/buffer.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/buffer_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/bufferevent.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/bufferevent_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/bufferevent_ssl.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/bufferevent_struct.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/dns.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/dns_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/dns_struct.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/event.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/event_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/event_struct.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/http.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/http_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/http_struct.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/keyvalq_struct.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/listener.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/rpc.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/rpc_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/rpc_struct.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/tag.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/tag_compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/thread.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/util.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/event2/visibility.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/evhttp.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/evrpc.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/evutil.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/include/include.am create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/iocp-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/ipv6-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/kqueue-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/kqueue.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/libevent.pc.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/libevent_core.pc.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/libevent_extra.pc.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/libevent_openssl.pc.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/libevent_pthreads.pc.in create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/listener.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/log-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/log.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/m4/ac_backport_259_ssizet.m4 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/m4/acx_pthread.m4 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/m4/libevent_openssl.m4 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/m4/ntp_pkg_config.m4 create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/make-event-config.sed create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/make_epoll_table.py create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/minheap-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/mm-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/openssl-compat.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/poll.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/ratelim-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/dns-example.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/event-read-fifo.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/hello-world.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/hostcheck.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/hostcheck.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/http-connect.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/http-server.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/https-client.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/include.am create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/le-proxy.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/openssl_hostname_validation.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/openssl_hostname_validation.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/signal-test.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/sample/time-test.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/select.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/signal.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/strlcpy-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/strlcpy.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/Makefile.nmake create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/bench.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/bench_cascade.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/bench_http.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/bench_httpclient.c create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/check-dumpevents.py create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/include.am create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/print-winsock-errors.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress.rpc create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_buffer.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_bufferevent.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_dns.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_et.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_finalize.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_http.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_iocp.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_listener.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_main.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_minheap.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_rpc.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_ssl.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_testutils.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_testutils.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_thread.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_thread.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_util.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/regress_zlib.c create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/rpcgen_wrapper.sh create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-changelist.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-closed.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-dumpevents.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-eof.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-fdleak.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-init.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-ratelim.c create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-ratelim.sh create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-time.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test-weof.c create mode 100755 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/test.sh create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/tinytest.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/tinytest.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/tinytest_demo.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/tinytest_local.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/test/tinytest_macros.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/time-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/util-internal.h create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/whatsnew-2.0.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/whatsnew-2.1.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/deps/libevent/win32select.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/external/README.md create mode 100644 src/fluent-bit/lib/monkey/mk_core/external/winpthreads.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/include/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_event.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_event_epoll.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_event_kqueue.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_event_libevent.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_event_select.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_file.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_iov.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_memory.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_rconf.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_string.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_thread.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_thread_channel.c create mode 100644 src/fluent-bit/lib/monkey/mk_core/mk_utils.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_cache.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_clock.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_config.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_fifo.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_header.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_http.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_http2.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_http_parser.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_http_thread.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_kernel.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_lib.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_mimetype.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_net.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_plugin.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_scheduler.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_server.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_socket.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_stream.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_user.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_utils.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/mk_vhost.c create mode 100644 src/fluent-bit/lib/monkey/mk_server/monkey.c create mode 100644 src/fluent-bit/lib/monkey/monkey.pc.in create mode 100644 src/fluent-bit/lib/monkey/monkey.spec create mode 100644 src/fluent-bit/lib/monkey/plugins/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/README create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/ABOUT create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/OPTIONAL create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/auth.c create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/auth.h create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/base64.c create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/base64.h create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/conf.c create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/conf.h create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/sha1.c create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/sha1.h create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/tools/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/auth/tools/mk_passwd.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cgi/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/cgi/cgi.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cgi/cgi.h create mode 100644 src/fluent-bit/lib/monkey/plugins/cgi/event.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cgi/request.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/ABOUT create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/OPTIONAL create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/cheetah.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/cheetah.h create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/cmd.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/cmd.h create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/conf/cheetah.conf create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/cutils.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/cutils.h create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/loop.c create mode 100644 src/fluent-bit/lib/monkey/plugins/cheetah/loop.h create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/ABOUT create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/OPTIONAL create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/dirhtml.conf create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/themes/bootstrap/entry.theme create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/themes/bootstrap/footer.theme create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/themes/bootstrap/header.theme create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/themes/guineo/entry.theme create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/themes/guineo/footer.theme create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/conf/themes/guineo/header.theme create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/dirlisting.c create mode 100644 src/fluent-bit/lib/monkey/plugins/dirlisting/dirlisting.h create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/conf/fastcgi.conf create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/fastcgi.c create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/fastcgi.h create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/fcgi_handler.c create mode 100644 src/fluent-bit/lib/monkey/plugins/fastcgi/fcgi_handler.h create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/ABOUT create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/MANDATORY create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/Makefile.in create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/README create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/STATIC create mode 100644 src/fluent-bit/lib/monkey/plugins/liana/liana.c create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/conf/logger.conf.in create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/logger.c create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/logger.h create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/pointers.c create mode 100644 src/fluent-bit/lib/monkey/plugins/logger/pointers.h create mode 100644 src/fluent-bit/lib/monkey/plugins/mandril/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/mandril/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/mandril/conf/mandril.conf create mode 100644 src/fluent-bit/lib/monkey/plugins/mandril/mandril.c create mode 100644 src/fluent-bit/lib/monkey/plugins/mandril/mandril.h create mode 100644 src/fluent-bit/lib/monkey/plugins/tls/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/tls/conf/CMakeLists.txt create mode 100644 src/fluent-bit/lib/monkey/plugins/tls/conf/tls.conf create mode 100644 src/fluent-bit/lib/monkey/plugins/tls/tls.c create mode 100644 src/fluent-bit/lib/monkey/qa/README.txt create mode 100644 src/fluent-bit/lib/monkey/qa/TEMPLATE create mode 100644 src/fluent-bit/lib/monkey/qa/__CONFIG create mode 100644 src/fluent-bit/lib/monkey/qa/__MACROS create mode 100755 src/fluent-bit/lib/monkey/qa/checklog create mode 100644 src/fluent-bit/lib/monkey/qa/connection_http10_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/connection_http10_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/connection_http10_03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/connection_http11_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/connection_http11_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/connection_http11_03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/directory_redirect_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/directory_redirect_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/directory_redirect_03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/docs_httest.txt create mode 100644 src/fluent-bit/lib/monkey/qa/error_400_test01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/error_404.htt create mode 100644 src/fluent-bit/lib/monkey/qa/error_411.htt create mode 100644 src/fluent-bit/lib/monkey/qa/error_413_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/error_413_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/error_501.htt create mode 100644 src/fluent-bit/lib/monkey/qa/error_505.htt create mode 100644 src/fluent-bit/lib/monkey/qa/head_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/head_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/headers_case_insensitive.htt create mode 100644 src/fluent-bit/lib/monkey/qa/hexa.htt create mode 100644 src/fluent-bit/lib/monkey/qa/host_port_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/host_port_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/host_port_03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/http_parse_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/if_modified_since_test01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/if_modified_since_test02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/if_modified_since_test03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/if_modified_since_test04.htt create mode 100644 src/fluent-bit/lib/monkey/qa/keepalive_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/keepalive_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/last_modified_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/path_traversal01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/path_traversal02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/path_traversal03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/post_test01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/post_test02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/post_test03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/protocol_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/protocol_02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/protocol_03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/protocol_04.htt create mode 100644 src/fluent-bit/lib/monkey/qa/protocol_05.htt create mode 100644 src/fluent-bit/lib/monkey/qa/query.htt create mode 100644 src/fluent-bit/lib/monkey/qa/ranges_test01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/ranges_test02.htt create mode 100644 src/fluent-bit/lib/monkey/qa/ranges_test03.htt create mode 100644 src/fluent-bit/lib/monkey/qa/ranges_test04.htt create mode 100644 src/fluent-bit/lib/monkey/qa/ranges_test05.htt create mode 100755 src/fluent-bit/lib/monkey/qa/run_tests.sh create mode 100644 src/fluent-bit/lib/monkey/qa/simple.htt create mode 100644 src/fluent-bit/lib/monkey/qa/uri_01.htt create mode 100644 src/fluent-bit/lib/monkey/qa/uri_02.htt (limited to 'src/fluent-bit/lib/monkey') diff --git a/src/fluent-bit/lib/monkey/.gitignore b/src/fluent-bit/lib/monkey/.gitignore new file mode 100644 index 000000000..6708c67e1 --- /dev/null +++ b/src/fluent-bit/lib/monkey/.gitignore @@ -0,0 +1,30 @@ +*.[aod] +*~ +*.so* +*.pyc +bin/* +Makefile +mk_env.h +mk_info.h +*.dpkg +*.pc +*.lo +tags +*.log +logs/* +callgrind.out.* +tests/lib/bin/* +plugins.conf +plugins.list +plugins/Make.common +plugins/auth/mk_passwd +lib/python/monkey.c +lib/python/bin/* +lib/python/conf/* +lib/python/jemalloc.config +src/include/ +build/ +include/monkey/mk_static_plugins.h +include/monkey/mk_core/mk_core_info.h +.vscode +monkey.service diff --git a/src/fluent-bit/lib/monkey/CMakeLists.txt b/src/fluent-bit/lib/monkey/CMakeLists.txt new file mode 100644 index 000000000..2d43835b7 --- /dev/null +++ b/src/fluent-bit/lib/monkey/CMakeLists.txt @@ -0,0 +1,331 @@ +# Let's have fun! +cmake_minimum_required(VERSION 3.0) +project(monkey C) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") +set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) + +# CMake includes +include(CheckSymbolExists) +include(CheckLibraryExists) +include(CheckIncludeFile) +include(CheckCSourceCompiles) +include(ExternalProject) +include(GNUInstallDirs) + +# Set default compiler options +if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wall -Wextra") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath \$<))\"'") +else() +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FILENAME__=__FILE__") +endif() + +# Monkey Version +set(MK_VERSION_MAJOR 1) +set(MK_VERSION_MINOR 7) +set(MK_VERSION_PATCH 2) +set(MK_VERSION_STR "${MK_VERSION_MAJOR}.${MK_VERSION_MINOR}.${MK_VERSION_PATCH}") + +# Output paths +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/library") + +# ============================================ +# ============= BUILD OPTIONS ================ +# ============================================ + +# Monkey Core +option(MK_DEBUG "Build with debug symbols" No) +option(MK_ACCEPT "Use accept(2) system call" No) +option(MK_ACCEPT4 "Use accept4(2) system call" Yes) +option(MK_LINUX_KQUEUE "Use Linux kqueue emulator" No) +option(MK_TRACE "Enable Trace mode" No) +option(MK_UCLIB "Enable uClib libc support" No) +option(MK_MUSL "Enable Musl libc support" No) +option(MK_BACKTRACE "Enable Backtrace feature" Yes) +option(MK_LINUX_TRACE "Enable Lttng support" No) +option(MK_PTHREAD_TLS "Use old Pthread TLS mode" No) +option(MK_MBEDTLS_SHARED "Use mbedtls shared lib" No) +option(MK_VALGRIND "Enable Valgrind support" No) +option(MK_FUZZ_MODE "Enable HonggFuzz mode" No) +option(MK_HTTP2 "Enable HTTP Support (dev)" No) +option(MK_TESTS "Enable Tests" No) + +# Plugins: what should be build ?, these options +# will be processed later on the plugins/CMakeLists.txt file +option(MK_PLUGIN_AUTH "Basic authentication" No) +option(MK_PLUGIN_CGI "CGI support" No) +option(MK_PLUGIN_CHEETAH "Cheetah Shell Interface" No) +option(MK_PLUGIN_DIRLISTING "Directory Listing" Yes) +option(MK_PLUGIN_FASTCGI "FastCGI" No) +option(MK_PLUGIN_LIANA "Basic network layer" Yes) +option(MK_PLUGIN_LOGGER "Log Writer" No) +option(MK_PLUGIN_MANDRIL "Security" Yes) +option(MK_PLUGIN_TLS "TLS/SSL support" No) + +# Options to build Monkey with/without binary and +# static/dynamic library modes (default is always just +# one target binary). +option(MK_WITHOUT_BIN "Do not build binary" No) +option(MK_WITHOUT_CONF "Skip configuration files" No) +option(MK_STATIC_LIB_MODE "Static library mode" No) + +# If building just for a "library" mode, disable plugins +if(MK_LIB_ONLY) + set(MK_PLUGIN_AUTH No) + set(MK_PLUGIN_CGI No) + set(MK_PLUGIN_CHEETAH No) + set(MK_PLUGIN_DIRLISTING No) + set(MK_PLUGIN_FASTCGI No) + set(MK_PLUGIN_LOGGER No) + set(MK_PLUGIN_MANDRIL No) +endif() + +if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(MK_ACCEPT 1) + set(MK_ACCEPT4 0) + set(MK_SYSTEM_MALLOC 1) +endif() + +if(MK_STATIC_PLUGINS) + set(MK_STATIC_PLUGINS "${MK_STATIC_PLUGINS},liana") +else() + set(MK_STATIC_PLUGINS "liana") +endif() + +# Variable to be populated by plugins/CMakeLists.txt. It will contain the +# code required to initialize any static plugin. +set(STATIC_PLUGINS_INIT "") +set(STATIC_PLUGINS_LIBS "") + +# =========================================== +# ============== DEPENDENCIES =============== +# =========================================== + +# Find pthreads +find_package(Threads) + +if(MK_DEBUG) + set(CMAKE_BUILD_TYPE "Debug") +endif() + +# It set's a definition and register into the mk_info.h file */ +macro(MK_DEFINITION var) + add_definitions(-D${var}) + set(MK_BUILD_FLAGS "${MK_BUILD_FLAGS}#ifndef ${var}\n#define ${var}\n#endif\n") +endmacro() + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + MK_DEFINITION(_CRT_SECURE_NO_WARNINGS) +endif() + +# Enable experimental (dev) HTTP/2 support +if (MK_HTTP2) + MK_DEFINITION(MK_HAVE_HTTP2) +endif() + +# Check for accept(2) v/s accept(4) +list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) +check_symbol_exists(accept4 "sys/socket.h" HAVE_ACCEPT4) +list(REMOVE_ITEM CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) +if(HAVE_ACCEPT4) + MK_DEFINITION(MK_HAVE_ACCEPT4) +endif() + +# Check for Linux Kqueue library emulator +if(MK_LINUX_KQUEUE) + find_package(Libkqueue REQUIRED) + if(NOT LIBKQUEUE_FOUND) + message(FATAL_ERROR "Linux libkqueue was not found." ) + else() + MK_DEFINITION(MK_LINUX_KQUEUE) + endif() +endif() + +# Check Trace +if(MK_TRACE) + MK_DEFINITION(MK_HAVE_TRACE) +endif() + +# Check Uclib library +if(MK_UCLIB) + MK_DEFINITION(MK_HAVE_UCLIB) +endif() + +# Check Musl library +if(MK_MUSL) + MK_DEFINITION(MK_HAVE_MUSL) +endif() + +# Check Backtrace support +check_include_file("execinfo.h" HAVE_BACKTRACE) +if (NOT HAVE_BACKTRACE) + set(MK_BACKTRACE No) +else() + MK_DEFINITION(MK_HAVE_BACKTRACE) +endif() + +# Check for LTTng-UST +if(MK_LINUX_TRACE) + check_include_file("lttng/tracepoint.h" HAVE_LTTNG) + if (NOT HAVE_LTTNG) + message(FATAL_ERROR "LTTng-UST is not installed in your system." ) + else() + MK_DEFINITION(MK_HAVE_LINUX_TRACE) + endif() +endif() + +# Use old Pthread TLS +if(NOT MK_PTHREAD_TLS) + check_c_source_compiles(" + __thread int a; + int main() { + __tls_get_addr(0); + return 0; + }" HAVE_C_TLS) + + if(HAVE_C_TLS) + MK_DEFINITION(MK_HAVE_C_TLS) + endif() +endif() + +# Valgrind support +check_c_source_compiles(" + #include + int main() { + return 0; + }" MK_HAVE_VALGRIND) + +if(MK_VALGRIND OR MK_HAVE_VALGRIND) + MK_DEFINITION(MK_HAVE_VALGRIND) +endif() + +# Regex support +check_c_source_compiles(" + #include + int main() { + regex_t reg; + const char str[] = \"[a-zA-Z0-9]*\"; + ret = regcomp(®, str, REG_EXTENDED|REG_ICASE|REG_NOSUB); + return 0; + }" HAVE_REGEX) + +if(HAVE_REGEX) + MK_DEFINITION(MK_HAVE_REGEX) +endif() + + +# ============================================ +# =========== CONFIGURATION FILES============= +# ============================================ + +# Default values for conf/monkey.conf +set(MK_CONF_LISTEN "2001") +set(MK_CONF_WORKERS "0") +set(MK_CONF_TIMEOUT "15") +set(MK_CONF_PIDFILE "monkey.pid") +set(MK_CONF_USERDIR "public_html") +set(MK_CONF_INDEXFILE "index.html index.htm index.php") +set(MK_CONF_HIDEVERSION "Off") +set(MK_CONF_RESUME "On") +set(MK_CONF_USER "www-data") +set(MK_CONF_KA "On") +set(MK_CONF_KA_TIMEOUT "5") +set(MK_CONF_KA_MAXREQ "1000") +set(MK_CONF_REQ_SIZE "32") +set(MK_CONF_SYMLINK "Off") +set(MK_CONF_DEFAULT_MIME "text/plain") +set(MK_CONF_FDT "On") +set(MK_CONF_OVERCAPACITY "Resist") + +# Default values for conf/sites/default +set(MK_VH_SERVERNAME "127.0.0.1") +set(MK_VH_DOCUMENT_ROOT MK_DATADIR) +set(MK_VH_LOG_ACCESS MK_LOGDIR) +set(MK_VH_LOG_ERROR MK_LOGDIR) + +# Paths +if(APPLE) + set(CMAKE_MACOSX_RPATH ${CMAKE_MACOSX_RPATH};${CMAKE_INSTALL_FULL_LIBDIR}/monkey) +endif() + +if(DEFAULT_PORT) + set(MK_CONF_LISTEN ${DEFAULT_PORT}) +endif() + +if(DEFAULT_USER) + set(MK_CONF_USER ${DEFAULT_USER}) +endif() + +configure_file( + "${PROJECT_SOURCE_DIR}/include/monkey/mk_info.h.in" + "${PROJECT_BINARY_DIR}/include/monkey/mk_info.h" + ) + +configure_file( + "${PROJECT_SOURCE_DIR}/include/monkey/mk_env.h.in" + "${PROJECT_BINARY_DIR}/include/monkey/mk_env.h" + ) + + +# General Headers +include_directories(./) +include_directories(deps/rbtree) +include_directories(deps/flb_libco) +include_directories(deps/regex) +include_directories(include) +include_directories(include/monkey/) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/monkey/) + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + include_directories(mk_core/deps/libevent/include) + include_directories("${PROJECT_BINARY_DIR}/mk_core/deps/libevent/include/") +endif() + +# Instruct CMake to build the the code base +# ========================================= +# mk_core : generic utilities +# plugins : plugins for mk_server +# mk_server: server code base: plugins, protocols, scheduler.. (no executable) +# mk_bin : server executable + +add_subdirectory(man) +add_subdirectory(deps/rbtree) +add_subdirectory(deps/regex) +add_subdirectory(deps/flb_libco) +add_subdirectory(mk_core) +add_subdirectory(plugins) +add_subdirectory(mk_server) + +if(NOT MK_WITHOUT_BIN) + add_subdirectory(mk_bin) +endif() + +# Configuration, headers generation and others +if(NOT MK_WITHOUT_CONF) + add_subdirectory(conf) +endif() +add_subdirectory(htdocs) +add_subdirectory(include) + +# Install (missings ?) paths +install(DIRECTORY DESTINATION ${MK_PATH_LOG}) +install(DIRECTORY DESTINATION ${MK_PATH_PIDPATH}) +install(DIRECTORY DESTINATION ${MK_PATH_WWW}) + +if(NOT SKIP_EMPTY_DIRS) + install(DIRECTORY DESTINATION ${MK_PATH_PIDPATH}) + install(DIRECTORY DESTINATION ${MK_PATH_LOG}) +endif() + +add_subdirectory(api) + +if(MK_FUZZ_MODE) + add_subdirectory(fuzz) +endif() + +if(MK_TESTS) + add_subdirectory(test) +endif() diff --git a/src/fluent-bit/lib/monkey/CONTRIBUTING.md b/src/fluent-bit/lib/monkey/CONTRIBUTING.md new file mode 100644 index 000000000..e82a8af73 --- /dev/null +++ b/src/fluent-bit/lib/monkey/CONTRIBUTING.md @@ -0,0 +1,60 @@ +# Contributing to Monkey Project + +We build Open Source software and we invite everyone to join us and contribute. So if you are interested into participate, please refer to the guidelines below. + +## GIT Repositories + +All code changes and submissions happens on [Github](http://github.com), that means that to start contributing you should clone the target repository, perform local changes and then do a Pull Request. For more details about the workflow we suggest you check the following documents: + + - https://help.github.com/articles/using-pull-requests + - https://help.github.com/articles/creating-a-pull-request + +## Coding Style + +Our development coding style for C is based on the Apache C style guidelines, we use the same rules, to get more details about it please check the following URL: + + - https://httpd.apache.org/dev/styleguide.html + +You have to pay attention to the code indentation, tabs are 4 spaces, spaces on conditionals, etc. If your code submission is not aligned, it will be rejected. + +## Commit Changes + +When you commit your local changes in your repository (before to push to Github), we need you take care of the following: + + - Your principal commit message (one line subject) must be prefixed with the core section name, e.g: If you are adding a new but missing protocol feature it could be __HTTP: add new XYZ method__. + - The Subject of the commit must not be longer than 80 characters. + - On the commit body, each line should not be longer than 80 characters. + - On most of cases we want full description about what your patch is doing, the patch description should be self descriptive.. like for dummies. Do not assume everybody knows what you are doing and on each like do not exceed 80 characters. + - When running the __git commit__ command, make sure you are using the __-s__ flag, that will add a Signed-off comment in the patch description. + +Expanding a bit the example feature message we could use the following command: + +> $ git commit -a -s +> +> HTTP: add new XYZ method +> +> This patch adds the missing XYZ method described in RCF2616 in the +> section 12.4.x.a, it do not alter the core behavior but if the new +> method is requested it will take care of the proper handling. +> +> the patch have been tested using tools A & B. +> +> Signed-off-by: Your Name + +If you want to see a real example, run the following command: + +> $ git log 4efbc11bafeb56fbe2b4f0f6925671630ce84125 + +Your path/patches should be fully documented, that will make the review process faster for us, and a faster merge for you. + +## Code review, no feelings + +When we review your code submission, they must follow our coding style, the code should be clear enough, documented if required and the patch Subject and Description well formed (within others). + +If your code needs some improvement, someone of the reviewers or core developers, will write a comment in your Pull Request, so please take in count the suggestion there, otherwise your request will never be merged. + +Despite the effort that took for you to create the contribution, that is not an inditacion that the code have to be merged into upstream, everything will be reviewed and must be aligned as the code base. + +## Community and respect + +Beside code, we are a community. Respect between all of us is mandatory, so we encourage to keep a good vocabulary on all our communication channels, as well we don't accept any discrimination by gender, sexual orientation, religion or other. Make sure you also contribute to keep a good environment. diff --git a/src/fluent-bit/lib/monkey/ChangeLog b/src/fluent-bit/lib/monkey/ChangeLog new file mode 100644 index 000000000..819a0e4d2 --- /dev/null +++ b/src/fluent-bit/lib/monkey/ChangeLog @@ -0,0 +1,24225 @@ +commit 2ec7636630df1ed405179e66fe7c5dad4b533496 +Author: Eduardo Silva +Date: Fri Aug 7 16:48:18 2015 -0600 + + server: HTTP: restrict pipeline request as keepalive requests + + Signed-off-by: Eduardo Silva + +commit 4723dac02f6d0dc62c5985833b286c2ed3817e3b +Author: Eduardo Silva +Date: Fri Aug 7 12:14:57 2015 -0600 + + server: HTTP parser: make parser_more() check static inline + + Signed-off-by: Eduardo Silva + +commit 49760cddbc41c5c8147fb3e0201943a296c5df71 +Author: Eduardo Silva +Date: Fri Aug 7 12:14:23 2015 -0600 + + server: scheduler: let protocol handlers decide if they want to process more data upon channel_done + + Signed-off-by: Eduardo Silva + +commit 2e2fdb5117f7a33a2b872fa9805b49e53d54c7e9 +Author: Eduardo Silva +Date: Fri Aug 7 12:13:41 2015 -0600 + + server: HTTP: reset errno for connection problems and re-enable pipeline support + + Signed-off-by: Eduardo Silva + +commit 5a64dff41dd030864e4c2c03b0da43e9e69e1c8a +Author: Eduardo Silva +Date: Fri Aug 7 11:29:11 2015 -0600 + + server: HTTP parser: general improvements + + Signed-off-by: Eduardo Silva + +commit 04c32ed5753a1c4b43308e7e379d19f26e44500c +Author: Eduardo Silva +Date: Thu Aug 6 14:32:39 2015 -0600 + + server: HTTP: remove unused code + + Signed-off-by: Eduardo Silva + +commit 697dd3ac80ea56b60c7b3d8d5a8f4566d1878935 +Author: Eduardo Silva +Date: Wed Aug 5 13:27:09 2015 -0600 + + HTML: intro update + + Signed-off-by: Eduardo Silva + +commit 8ff57ef1308cfc07a3babdc8bcb9c57d8e9b1d85 +Author: Eduardo Silva +Date: Wed Aug 5 13:11:59 2015 -0600 + + QA: update scripts to new htdocs content + + Signed-off-by: Eduardo Silva + +commit 08ebcfe0e9fe10cd6165bdde7f16216ab4d806cf +Author: Eduardo Silva +Date: Wed Aug 5 11:05:44 2015 -0600 + + server: scheduler: invalidate scheduler mode when initializing + + Signed-off-by: Eduardo Silva + +commit 03a79f05027adda286bc4d51cdfc7c560ff07f0b +Author: Eduardo Silva +Date: Wed Aug 5 10:53:50 2015 -0600 + + Doc: remove draft doc + + Signed-off-by: Eduardo Silva + +commit 90641dd3ab239f0e80d633a1f106955d4aecb3a1 +Author: Eduardo Silva +Date: Wed Aug 5 10:27:24 2015 -0600 + + Build: new option to use mbedtls shared lib (installed somewhere) + + Signed-off-by: Eduardo Silva + +commit 57eb2f6363db95f07b1e5c3179e525bd642d8b76 +Author: Eduardo Silva +Date: Wed Aug 5 09:53:21 2015 -0600 + + Build: configure: fix banner + + Signed-off-by: Eduardo Silva + +commit 125709c0a104fa1c17a31d7f41e63e8f0071afd7 +Author: Eduardo Silva +Date: Wed Aug 5 09:18:32 2015 -0600 + + server: scheduler: validate if channel is busy on event_write + + Signed-off-by: Eduardo Silva + +commit 5517c83c4089eca84b7051fd7f24c391ac7dc584 +Author: Eduardo Silva +Date: Wed Aug 5 09:14:02 2015 -0600 + + server: stream: fix trace message when consuming bytes + + Signed-off-by: Eduardo Silva + +commit 0e5b14e0a20428e7555156e8ef201223ebca410c +Author: Eduardo Silva +Date: Wed Aug 5 07:22:15 2015 -0600 + + server: validate listner list head when exiting + + Signed-off-by: Eduardo Silva + +commit 71579c4e83488a20d8afc3bb4e529f2f76917127 +Author: Eduardo Silva +Date: Wed Aug 5 06:40:23 2015 -0600 + + Build: make sure to generate 'modules' for OSX instead of shared lib + + Signed-off-by: Eduardo Silva + +commit 2d4fd2d01338f2b933d010f5c12a6bd223b84c9e +Author: Eduardo Silva +Date: Wed Aug 5 06:14:09 2015 -0600 + + Deps: add mbedtls sources as a dependency for TLS plugin + + Signed-off-by: Eduardo Silva + +commit 012f1abccad3128b000d8c1b150376e1ddff9778 +Author: Eduardo Silva +Date: Tue Aug 4 14:21:53 2015 -0600 + + bin: signals: restore uid/guid upon exit + + Signed-off-by: Eduardo Silva + +commit 338e595c7b9281172fa71c7acba0099a1873b561 +Author: Eduardo Silva +Date: Tue Aug 4 14:06:57 2015 -0600 + + server: scheduler: abort on listener problem + + Signed-off-by: Eduardo Silva + +commit c0932895310200aa637cd0c6ecbec1a0e4097d64 +Author: Eduardo Silva +Date: Tue Aug 4 14:06:40 2015 -0600 + + server: scheduler: if listener fails, return NULL + + Signed-off-by: Eduardo Silva + +commit e68ccfd99590d873e95d8c639d964ee3486fee82 +Author: Eduardo Silva +Date: Tue Aug 4 14:06:14 2015 -0600 + + server: socket: return error value if cannot bind + + Signed-off-by: Eduardo Silva + +commit 8100ed24a1b22c2da29ead8d84abdecb71e8773e +Author: Eduardo Silva +Date: Tue Aug 4 12:36:54 2015 -0600 + + Build: restore 'bash' for configure script + + Signed-off-by: Eduardo Silva + +commit 4b052a302101e81547f5f29d93ab5ee6f57dfd71 +Author: Eduardo Silva +Date: Tue Aug 4 12:03:14 2015 -0600 + + server: stream: fix trace message for 32 bits platforms + + Signed-off-by: Eduardo Silva + +commit f93cb2d173dbace2c21a5ed888fa903e9094fbe9 +Author: Eduardo Silva +Date: Sun Aug 2 20:57:00 2015 -0600 + + HTML: add CMakeLists.txt file for content installation + + Signed-off-by: Eduardo Silva + +commit 69276b66028e2c31cffa91419846ed4f83dc34d7 +Author: Eduardo Silva +Date: Sun Aug 2 20:33:40 2015 -0600 + + HTML: update homepage with new template and branding + + Signed-off-by: Eduardo Silva + +commit 8bfffd1f511d49083c658203809f33ead6a6763d +Author: Eduardo Silva +Date: Sun Aug 2 05:53:55 2015 -0600 + + Plugins: logger: do not use mk_libc_error from plugins + + Signed-off-by: Eduardo Silva + +commit 35169f869f46bd30ccc04533f0dd6c702fd17245 +Author: Eduardo Silva +Date: Sun Aug 2 05:50:09 2015 -0600 + + server: plugin: remove unused function + + Signed-off-by: Eduardo Silva + +commit e9982e355014f21c50a5712b83b841543f6a3d02 +Author: Eduardo Silva +Date: Sun Aug 2 05:48:43 2015 -0600 + + mk_core: file: change data type for size field + + Signed-off-by: Eduardo Silva + +commit 467471fcf80a28d27c78a3c66655bb3443946e09 +Author: Eduardo Silva +Date: Sat Aug 1 18:41:35 2015 -0600 + + Plugins: fastcgi: fix reference to channel_write + + Signed-off-by: Eduardo Silva + +commit 7c0242a3aeed802fdeac6b626b6775700d689fb5 +Author: Eduardo Silva +Date: Sat Aug 1 18:38:41 2015 -0600 + + Plugins: cgi: fix reference to TLS + + Signed-off-by: Eduardo Silva + +commit 55ac31218959d57fc3fdf3906595df6b97bcf26b +Author: Eduardo Silva +Date: Fri Jul 31 15:27:50 2015 -0600 + + Plugins: tls: functional with mbedtls-2.0 + + Signed-off-by: Eduardo Silva + +commit 07b811096b795ff87cc905be0bb113190c2a69ab +Author: Eduardo Silva +Date: Fri Jul 31 11:14:02 2015 -0600 + + server: scheduler: on read error, validate EAGAIN case + + Signed-off-by: Eduardo Silva + +commit 2f5639ef94cb106fbdd714644448c09b5d9e41ac +Author: Eduardo Silva +Date: Thu Jul 30 15:37:45 2015 -0600 + + server: HTTP: fix LF catch limit + + Signed-off-by: Eduardo Silva + +commit d254c61e209aaaf9e1d10a175053e2be3a23cc80 +Author: Eduardo Silva +Date: Mon Jul 27 23:43:21 2015 -0600 + + Plugins: auth: mk_passwd: validate when dumping info (CID 1245666) + + Signed-off-by: Eduardo Silva + +commit 2f0b50123c16885f91f72b1737792fa170e87a43 +Author: Eduardo Silva +Date: Mon Jul 27 23:40:55 2015 -0600 + + server: http: fix error page leak with HEAD method (CID 1299283) + + Signed-off-by: Eduardo Silva + +commit d258adcbee6011ad9ba13382a6313587c0d85376 +Author: Eduardo Silva +Date: Mon Jul 27 23:30:28 2015 -0600 + + server: http: validate return value of resource check (CID 1245652) + + Signed-off-by: Eduardo Silva + +commit 49b5e03de046e4105932d43be026b81d5cdbbcca +Author: Eduardo Silva +Date: Mon Jul 27 23:28:31 2015 -0600 + + server: vhost: do not leak file descriptor (CID 1245664) + + Signed-off-by: Eduardo Silva + +commit 97f5f9a5adaae23ce8275028f24cefaec39e2f5d +Author: Eduardo Silva +Date: Mon Jul 27 23:27:27 2015 -0600 + + server: http: on status error, validate content length against method + + Signed-off-by: Eduardo Silva + +commit 6d81d929643092ece4a53562a1070b503c4f9676 +Author: Eduardo Silva +Date: Mon Jul 27 23:22:40 2015 -0600 + + server: config: do not override list of values (CID 1299286) + + Signed-off-by: Eduardo Silva + +commit 737d3b1b9cd9ccad715b83457694481153797177 +Author: Eduardo Silva +Date: Mon Jul 27 23:09:19 2015 -0600 + + server: make sure timeout_fd is valid before close it + + Signed-off-by: Eduardo Silva + +commit 311db001a3087ac20f2e9df0761a5c71678d7dc6 +Author: Eduardo Silva +Date: Mon Jul 27 23:08:22 2015 -0600 + + Plugins: logger: fix unitialized value (CID 1313320) + + Signed-off-by: Eduardo Silva + +commit 91b4107f6986cec1fa1bf6da60db2556e322c9dd +Author: Eduardo Silva +Date: Mon Jul 27 23:01:23 2015 -0600 + + Plugins: TLS: move API for mbedtls 2.0 (not functional yet) + + Signed-off-by: Eduardo Silva + +commit 37bb5e1919073b0f44953105cfa2497419e81e9e +Author: Eduardo Silva +Date: Mon Jul 27 19:47:47 2015 -0600 + + Plugins: mandril: adapt callbacks to new API + + Signed-off-by: Eduardo Silva + +commit 6b77fbd253ee4e76512a9eb1b7623bd0c60a2a4d +Author: Eduardo Silva +Date: Mon Jul 27 19:47:25 2015 -0600 + + server: scheduler: do not print out msg if connection was block by a plugin + + Signed-off-by: Eduardo Silva + +commit eb632b4240876a534a35f7e8bfa3465cc4a934c2 +Author: Eduardo Silva +Date: Mon Jul 27 18:46:51 2015 -0600 + + server: on exit remove listeners + + Signed-off-by: Eduardo Silva + +commit 6365f40ff244c4bbce5dac5b6c8e2af46d2df892 +Author: Eduardo Silva +Date: Mon Jul 27 17:51:49 2015 -0600 + + Plugins: logger: fix pthread_cache initialization and get rid of the evil _mkp_data + + Signed-off-by: Eduardo Silva + +commit 55eb5a63ce21a0e9802ab2a91d161426422b140b +Author: Eduardo Silva +Date: Mon Jul 27 15:59:39 2015 -0600 + + Plugins: logger: adapt to new API + + Signed-off-by: Eduardo Silva + +commit 0a9e696d9882042de07cc4752c9a4533ccf598e2 +Author: Eduardo Silva +Date: Mon Jul 27 15:58:40 2015 -0600 + + server: http_parser: fix pointer protocol length + + Signed-off-by: Eduardo Silva + +commit 264c6f488d8d237e24b8f4bf7e8f2299d184238a +Author: Eduardo Silva +Date: Mon Jul 27 15:58:14 2015 -0600 + + server: HTTP: invoke stage 40 upon request end + + Signed-off-by: Eduardo Silva + +commit 3570ba2861dd0c13afe6d0bfa95872b1b360ac7b +Author: Eduardo Silva +Date: Mon Jul 27 14:02:12 2015 -0600 + + server: streams: do not release stream with pending bytes + + Signed-off-by: Eduardo Silva + +commit 85e492d766599b89a0d9a148df9a13fe26d1706f +Author: Eduardo Silva +Date: Mon Jul 27 11:51:21 2015 -0600 + + Plugins: dirlisting: general improvements and cleanup + + Signed-off-by: Eduardo Silva + +commit 7d31f9764a962c62ddf340fcf8b4d1223fb996e4 +Author: Eduardo Silva +Date: Mon Jul 27 11:51:00 2015 -0600 + + server: streams & http: cleanup channel on exit + + Signed-off-by: Eduardo Silva + +commit 86aa7ee843a3b609bad921ddc5db8be14c21b1ca +Author: Eduardo Silva +Date: Sun Jul 26 12:43:04 2015 -0600 + + mk_server: HTTP: do not walk around all stage30 + + Signed-off-by: Eduardo Silva + +commit 870ff952ef530de5911ea4bf56d1233c6642534b +Author: Eduardo Silva +Date: Sun Jul 26 12:27:26 2015 -0600 + + Plugins: cheetah: fix format parameters + + Signed-off-by: Eduardo Silva + +commit 268072bd72ab6f7eb888d3b8afc0e381f917df91 +Author: Eduardo Silva +Date: Sun Jul 26 12:15:52 2015 -0600 + + server: vhost: fix missing plugin msg + + Signed-off-by: Eduardo Silva + +commit 801352f0550e7574b3b61d935e86fb68d33ea565 +Author: Eduardo Silva +Date: Sun Jul 26 12:14:34 2015 -0600 + + Plugins: cgi: fix unitialized vars and use proper URI address + + Signed-off-by: Eduardo Silva + +commit 3a10263b7007320df59a10bf001bf6ee7cd69d52 +Author: Eduardo Silva +Date: Sun Jul 26 12:07:48 2015 -0600 + + Plugins: auth: fix number of parameters + + Signed-off-by: Eduardo Silva + +commit 0e293b071cb608a47a8b0d393544a0238ebaa2c5 +Author: Eduardo Silva +Date: Sun Jul 26 12:07:35 2015 -0600 + + server: HTTP: remove silly msg + + Signed-off-by: Eduardo Silva + +commit eb0dbf936e70d64e4438c64a49ae7486d80aa990 +Author: Eduardo Silva +Date: Sun Jul 26 11:53:47 2015 -0600 + + Plugins: fastcgi: fix callback parameters + + Signed-off-by: Eduardo Silva + +commit f26f2108e760411b460aee0b277c695db05213cc +Author: Eduardo Silva +Date: Sun Jul 26 11:49:40 2015 -0600 + + Plugins: cgi: handle parameters from handler setup + + Signed-off-by: Eduardo Silva + +commit aa986169ebf4ba648fded97fec95626599dee16f +Author: Eduardo Silva +Date: Sun Jul 26 11:47:22 2015 -0600 + + server: plugin: handlers now support parameters + + The handlers definitions on virtual host now can specify parameters, e.g: + + [HANDLERS] + Match /.*\.cgi param_1 param_2 param_3 + + Signed-off-by: Eduardo Silva + +commit 98481f6f2755f49e74aa88c30ee1587aa809324b +Author: Eduardo Silva +Date: Sun Jul 26 06:55:49 2015 -0600 + + server: HTTP: do not handle missing files with a handler (temporal) + + Signed-off-by: Eduardo Silva + +commit d164a051bf053babe30742277dee8acb0a15f230 +Author: Eduardo Silva +Date: Sat Jul 25 15:04:05 2015 -0600 + + mk_server: add handlers support + + this patch enable a new Handlers support for plugins, so now is + possible to define custom handlers for specific URI matches based + on regular expressions, a virtual host may enable FastCGI through + the following setup: + + [HANDLERS] + Match /.*\.php fastcgi + + The 'Match' rule indicate that it's about a regular expression, the + second argument is the regexec and the third argument is the plugin + handler name (known as short name). + + Handlers are processed in order, if no handler own the request the + server will dispatch the file content. + + Signed-off-by: Eduardo Silva + +commit dd2e7bee7e990cc3111522e997a20e2459ef41b9 +Author: Eduardo Silva +Date: Sat Jul 25 12:49:14 2015 -0600 + + Plugins: fastcgi: make query string conditional + + Signed-off-by: Eduardo Silva + +commit 0a9a2237ac6e90630c28e650cbdc04aeeef208f7 +Author: Eduardo Silva +Date: Sat Jul 25 11:42:22 2015 -0600 + + Plugins: fastcgi: handle unix socket mode + + Signed-off-by: Eduardo Silva + +commit 097fbc702f70320a8e53f916ac181582904a5469 +Author: Eduardo Silva +Date: Sat Jul 25 11:41:57 2015 -0600 + + mk_server: plugin: new api to open unix sockets + + Signed-off-by: Eduardo Silva + +commit 28c4683c7a667bdec8b47cad49ff567a01cd6d1d +Author: Eduardo Silva +Date: Sat Jul 25 11:40:56 2015 -0600 + + mk_server: HTTP: flush error page on error + + Signed-off-by: Eduardo Silva + +commit 763d032e4044ae705e84c321cd6694c2bdb218ba +Author: Eduardo Silva +Date: Sat Jul 25 10:36:29 2015 -0600 + + plugins: fastcgi: general improvements and cleanups on broken connections + + Signed-off-by: Eduardo Silva + +commit e9cee1f7fa37a5daaff71bb985bf918b1db84c7e +Author: Eduardo Silva +Date: Sat Jul 25 10:35:48 2015 -0600 + + mk_server: server: do not process idle connections + + Signed-off-by: Eduardo Silva + +commit dbea72780a8e9880db44bdb9b011e23a32a6a838 +Author: Eduardo Silva +Date: Sat Jul 25 10:35:17 2015 -0600 + + mk_server: scheduler: initialize event and defer event free + + Signed-off-by: Eduardo Silva + +commit 858491d1b074ecbd16504c2a0be0e7c0c569f2e7 +Author: Eduardo Silva +Date: Sat Jul 25 10:34:31 2015 -0600 + + mk_server: plugin: on request end, set the connection as incomplete + + Signed-off-by: Eduardo Silva + +commit aa0fac20feb1e14f3581d2bf767a0108e5f68100 +Author: Eduardo Silva +Date: Sat Jul 25 10:33:56 2015 -0600 + + mk_server: HTTP: set handler data and perform channel cleanup on broken connection + + Signed-off-by: Eduardo Silva + +commit d685645426848e5917c2e4f34a73c3740594730a +Author: Eduardo Silva +Date: Sat Jul 25 10:27:46 2015 -0600 + + mk_core: event: add new status field + + Signed-off-by: Eduardo Silva + +commit 76d557a916a2040eee8bc00d80e11725e2b176c3 +Author: Eduardo Silva +Date: Sat Jul 25 10:26:00 2015 -0600 + + mk_core: iov: fix buf_to_free reference + + Signed-off-by: Eduardo Silva + +commit af9f867c44bfed3fea54d57488247aba2d13a1d2 +Author: Eduardo Silva +Date: Sat Jul 25 10:24:58 2015 -0600 + + mk_server: stream: new clean interface to remove channel data + + Signed-off-by: Eduardo Silva + +commit 8c53246ee66249d054a87a80da9fa9818fffe7ac +Author: Eduardo Silva +Date: Sat Jul 25 10:23:36 2015 -0600 + + mk_server: HTTP: session request now have a new handler_data reference (used by plugins) + + Signed-off-by: Eduardo Silva + +commit 5a2eca4e4b3b411b1da49efce9da56ed713c044f +Author: Eduardo Silva +Date: Sat Jul 25 10:22:55 2015 -0600 + + mk_server: HTTP: do not mk_bug() when status is already completed + + Signed-off-by: Eduardo Silva + +commit 6cd33fc88cd8596d7540e7187b80aa0401f5804f +Author: Eduardo Silva +Date: Sat Jul 25 10:21:24 2015 -0600 + + API: fix MK_TRACE position declaration + + Signed-off-by: Eduardo Silva + +commit 5051e1a7117020cbb96f36341ba0f24b53fab409 +Author: Eduardo Silva +Date: Fri Jul 24 09:35:39 2015 -0600 + + Trace: shrink component name + + Signed-off-by: Eduardo Silva + +commit 4d1e398b1acb747227734af9166e820713849e08 +Author: Eduardo Silva +Date: Fri Jul 24 09:13:45 2015 -0600 + + Trace: shrink file path, do not include absolute path + + This patch makes CMAKE to define a new macro called __FILENAME__ which + allows to set the relative path of the target file instead of the absolute + path, e.g: + + before: /home/edsiper/coding/monkey/mk_server/mk_server.c + after : mk_server/mk_server.c + + Now the trace mode use this new __FILENAME__ macro making the output + a bit friendly. + + Signed-off-by: Eduardo Silva + +commit a680478232959070ae4cfe7e02216badd1ff2070 +Author: Eduardo Silva +Date: Wed Jul 22 22:32:14 2015 -0600 + + Plugins: FastCGI: fix unitialized variable on on_read callback (CID 1312111) + + Signed-off-by: Eduardo Silva + +commit f05a8c4d0b833c8239026ee4a7cd5d1827bc7ead +Author: Eduardo Silva +Date: Wed Jul 22 22:28:47 2015 -0600 + + Plugins: FastCGI: do not assume 'buf' can be null (CID 1312110) + + Signed-off-by: Eduardo Silva + +commit 856858980ca0a6d0dcf0f0ba237a31b2033fca3a +Author: Eduardo Silva +Date: Wed Jul 22 22:19:45 2015 -0600 + + mk_server: streams: fix dereference after null check (CID 1312109) + + Signed-off-by: Eduardo Silva + +commit df43e8bd93980c6977d07eb3a1af3164623dd28d +Author: Eduardo Silva +Date: Wed Jul 22 21:59:28 2015 -0600 + + Plugins: CGI: devnull cannot be negative (CID 1124125) + + Signed-off-by: Eduardo Silva + +commit 232b036cc2d7a95abef27681cb9d47f7fc20bf7c +Author: Eduardo Silva +Date: Wed Jul 22 17:58:06 2015 -0600 + + Plugins: FastCGI: add missing return value + + Signed-off-by: Eduardo Silva + +commit 72b3b52ee9daf1d1444613c97550d6f5968c2262 +Author: Eduardo Silva +Date: Wed Jul 22 17:57:28 2015 -0600 + + mk_server: plugin: re-map socket inteface + + Signed-off-by: Eduardo Silva + +commit d9bf3ffaabddbee11a3709d6c20d1ef837e95a26 +Author: Eduardo Silva +Date: Wed Jul 22 17:55:49 2015 -0600 + + mk_server: socket: improved connect interface + + Signed-off-by: Eduardo Silva + +commit 1f9eb5c84426e036c5baf7611e82f2c27a646dd1 +Author: Eduardo Silva +Date: Wed Jul 22 17:55:17 2015 -0600 + + mk_server: http: add header counters + + Signed-off-by: Eduardo Silva + +commit ad043900b9bf8d4e0536b24198d3967869510cf4 +Author: Eduardo Silva +Date: Wed Jul 22 17:54:18 2015 -0600 + + mk_core: event: new initializator + + Signed-off-by: Eduardo Silva + +commit ace406df30d6e627345916f857e458314c3360f6 +Author: Eduardo Silva +Date: Wed Jul 22 17:51:50 2015 -0600 + + Build: enable fastcgi plugin by default + + Signed-off-by: Eduardo Silva + +commit 989bae1d501f9c010283f24698294e4111f4aa7a +Author: Eduardo Silva +Date: Wed Jul 22 17:49:59 2015 -0600 + + Plugins: FastCGI: new FastCGI plugin + + This new implementation of the fastcgi interface use the new Monkey + architecture and reduce the code complexity due to the new features + available on the server core. + + It drops some neat features from the old version as KeepAlive and + the ability of multiple connections, all that will be restored in the + new version of Monkey which will support server pools natively. + + Note: old plugin required like 3000 lines of code, the new one only + around 650. + + Signed-off-by: Eduardo Silva + +commit d380488a14f9b914a49b8de5d75b90f9c0b4e19b +Author: Eduardo Silva +Date: Wed Jul 22 17:45:57 2015 -0600 + + Plugins: FastCGI: deprecate old FastCGI plugin + + This patch removes the old fastcgi plugins due to the following reasons: + + - New Monkey architecture requires plugins to hook and work in a different way. + - New Monkey features abstract many interfaces that were required by the old plugin + + Signed-off-by: Eduardo Silva + +commit ceafd30127c7c22a6612534521b72c2576f9239f +Author: Eduardo Silva +Date: Sun Jul 19 19:17:52 2015 -0600 + + mk_server: http_parser: map body content + + Signed-off-by: Eduardo Silva + +commit e34a971e17b737b099e3c130cc1a27741d88a76e +Author: Eduardo Silva +Date: Sun Jul 19 18:23:06 2015 -0600 + + Build: use absolute path on --local mode when setting up the document root + + Signed-off-by: Eduardo Silva + +commit 42caa74b228a77c21470385eec1a190fe1e92937 +Author: Eduardo Silva +Date: Sun Jul 19 17:05:01 2015 -0600 + + mk_server: scheduler: new macro to get connection layer capabilities + + Signed-off-by: Eduardo Silva + +commit 89781b5963af38289d9f42c4f6502637ddc51b1e +Author: Eduardo Silva +Date: Sun Jul 19 14:47:07 2015 -0600 + + mk_core: iov: fix iov reference pointer + + Signed-off-by: Eduardo Silva + +commit 2c459b61fc69c85eed10d6a853ecd625d713b207 +Author: Eduardo Silva +Date: Tue Jul 7 17:53:53 2015 -0600 + + mk_core: iov: new implementation for mk_iov re-alloc + + Signed-off-by: Eduardo Silva + +commit 79630e6945e4e106f87480b2c67514e214143fcc +Author: Eduardo Silva +Date: Tue Jul 7 17:39:12 2015 -0600 + + mk_server: header: now each response context have it own iov buffer + + This patch get rid of the cached (TLS) iov buffer for the response headers. It + now implements a struct mk_iov inside the struct response_header. + + No extra memory allocations are required, we keep the pattern of one memory + allocation per request for HTTP/1.1. + + Signed-off-by: Eduardo Silva + +commit 5eb89be5bd4980030f8581c03432374045054fa4 +Author: Eduardo Silva +Date: Tue Jul 7 17:37:21 2015 -0600 + + mk_core: iov: improve implementation, use just one memory buffer + + This patch makes the iov handler to use just one memory buffer instead + of multiple allocations. It also defines a new allocator and initializator + function. + + Signed-off-by: Eduardo Silva + +commit 6e749e93bc78a43e03b18a7ced442345a9dfb5f7 +Author: Eduardo Silva +Date: Tue Jul 7 07:52:57 2015 -0600 + + Plugins: cgi: defer event free when a hangup is faced + + Signed-off-by: Eduardo Silva + +commit 0773a305c299e73a5d51b7fa3d48d88ac9989a61 +Author: Eduardo Silva +Date: Tue Jul 7 07:52:30 2015 -0600 + + mk_core: event: add new field for generic purpose of a linked list + + Signed-off-by: Eduardo Silva + +commit bb079fe1197e005e1d311af7950025d48d8ff1b7 +Author: Eduardo Silva +Date: Tue Jul 7 07:37:17 2015 -0600 + + mk_server: scheduler: new interface to enqueue defer events object free + + This patch implements a new scheduler interface that allows the plugins to + defer the release of some object, the context and requirement of implementation + is based on the following behavior: + + 1. A connection is being handled by a plugin (e.g: CGI), the CGI plugin also + registered it own 'event' into the Event Loop to read incoming data from the + child process. + + 2. Before to receive the response, the client for some reason closes + the TCP connection. + + 3. The Scheduler will trap the 'close event' on the connection and start + notifying the protocol handler and the plugin associated about this. + + 4. The plugin will catch the notification on it stage30_hangup() callback so it + will release it resources (CGI context, child process, + close file desriptors, etc). + + 5. At this point in the same Event Loop round, it may contain many events notified + in the array, e.g: + + [0] TCP connection closed + [N] others... + [16] Read data from CGI child + + So when we reach the the 'TCP connection closed'[0], we perform a release procedure as + stated on #3 and #4, but then we reach 'Read data from CGI child'[16] but our event + context was already released due to 'TCP connection closed'[0]. For hence we face a + memory corruption. + + In order to avoid this kind of situations, the Scheduler and the plugins interface now + provides a new interface to request the Server to perform a 'memory release' of a linked + list of 'struct mk_event' after processing all the events in the round returned by mk_event_wait(). + + A plugin only requires to be aware of the broken connection stage30_hangup() and register it + event object mk_api->sched_event_free(struct mk_event *x). + + Signed-off-by: Eduardo Silva + +commit c9c44785e354efd6c776509c48cb600464b56589 +Author: Eduardo Silva +Date: Sun Jul 5 21:45:47 2015 -0600 + + Doc: update draft announcement + + Signed-off-by: Eduardo Silva + +commit 9b3e6f055972d774876d3af6ba337955f8f09ca5 +Author: Eduardo Silva +Date: Sun Jul 5 21:17:01 2015 -0600 + + Plugins: cgi: better handling for exceptions + + Signed-off-by: Eduardo Silva + +commit ced05634e7b79fb03c5d44f01a851d6ca6da6f02 +Author: Eduardo Silva +Date: Sun Jul 5 21:15:25 2015 -0600 + + mk_server: stream: more debug message when TRACE is enabled + + Signed-off-by: Eduardo Silva + +commit 1e1c5082221e4f52cdbf3fbf8dbf1dff78e3687c +Author: Eduardo Silva +Date: Sun Jul 5 21:13:44 2015 -0600 + + mk_server: scheduler: improve drop connection routine with new socket flags + + Signed-off-by: Eduardo Silva + +commit 22b565337b7f3270abbefb7d993222a6fb628c00 +Author: Eduardo Silva +Date: Sun Jul 5 21:13:01 2015 -0600 + + mk_server: plugin: on http request end, handle event close with a DONE_SOCKET flag + + Signed-off-by: Eduardo Silva + +commit d88cf83f0179f940e6704c49a40a655db15b3246 +Author: Eduardo Silva +Date: Sun Jul 5 21:10:57 2015 -0600 + + mk_core: event: new SOCKET_DONE status + + Signed-off-by: Eduardo Silva + +commit a20fd2be48461ac20f73a191faefeafb79037b65 +Author: Eduardo Silva +Date: Fri Jul 3 09:32:53 2015 -0600 + + Plugins: cgi: remove breakline + + Signed-off-by: Eduardo Silva + +commit 57b448421c258b3ad777ffe1beca5e04afd71b34 +Author: Eduardo Silva +Date: Fri Jul 3 09:32:35 2015 -0600 + + mk_server: plugin: fix validation of list of http requests + + Signed-off-by: Eduardo Silva + +commit b9c27a55fdf5f59ac173bc0380a5278dea0d8e72 +Author: Eduardo Silva +Date: Fri Jul 3 07:16:20 2015 -0600 + + mk_core: utils: rename backend of mk_libc_warn() + + Signed-off-by: Eduardo Silva + +commit d3fc419519a6c3d32f5f4b5065d1cf7bd7f1a263 +Author: Eduardo Silva +Date: Thu Jul 2 12:59:53 2015 -0600 + + mk_core: implement a static buffer for libc error messages (fix #195) + + Monkey utils implements a buffer per thread to format libc errors, but + when the mk_utils_libc_error() is invoked from the parent process, it + may crash as the pthread key do not exists. + + This patch implements a static buffer for those cases when the call is + invoked from a parent process. + + Signed-off-by: Eduardo Silva + +commit e5407e2c547c60a44b76db1c7215ce730a4c69e0 +Author: Eduardo Silva +Date: Tue Jun 30 17:08:46 2015 -0600 + + mk_server: plugin, http: session handling improvements + + This patch add some improvements over the Plugin interface to provide + more reliable handling of connection at the plugins levels (e.g: CGI), + it also adds a new callback to the stage30 based plugins to be triggered + when a hangup is faced (very common). + + Signed-off-by: Eduardo Silva + +commit 9f46b81ab442b90befe7880f4e251fd58d31660f +Author: Eduardo Silva +Date: Tue Jun 30 17:04:01 2015 -0600 + + Plugins: cgi: improved session hangup and cleanup + + Signed-off-by: Eduardo Silva + +commit fa5adce7128fcd91d62da968f21c7aa108b23ac6 +Author: Eduardo Silva +Date: Mon Jun 29 11:34:24 2015 -0600 + + Plugins: cgi: keepalive only allowed for HTTP/1.1 connections + + Signed-off-by: Eduardo Silva + +commit 12428e6658ae846762af08f9fa5c8b34ca32a3dc +Author: Eduardo Silva +Date: Mon Jun 29 10:50:05 2015 -0600 + + Plugins: cgi: restore session hangup + + Signed-off-by: Eduardo Silva + +commit 0ef0dee8d8155eb116ae035836be411540e204ba +Author: Eduardo Silva +Date: Mon Jun 29 10:48:25 2015 -0600 + + mk_server: http: fix api to handle request_ends + + Signed-off-by: Eduardo Silva + +commit 8c73d44c269c822e5b9bc2320260a3b0bb179094 +Author: Eduardo Silva +Date: Sat Jun 27 06:56:57 2015 -0600 + + Plugins: cgi: close CGI pipe read end + + Signed-off-by: Eduardo Silva + +commit 87a188c212beb9d453845297217ab0205f198467 +Author: Eduardo Silva +Date: Fri Jun 26 23:28:53 2015 -0600 + + mk_server: http: add support for ETag header (fix #139) + + Signed-off-by: Eduardo Silva + +commit 239af215c7ed9b529ad24687aff5382d8805fad8 +Author: Eduardo Silva +Date: Fri Jun 26 17:08:05 2015 -0600 + + Plugin: fix trace message (fix #181) + + Signed-off-by: Eduardo Silva + +commit 3e5025e51865979fc6fff73b6ebcbc2ccd7a596c +Author: Eduardo Silva +Date: Fri Jun 26 17:04:04 2015 -0600 + + Doc: update man page (fix #196) + + Signed-off-by: Eduardo Silva + +commit 0319ce1ef112ded31f6eef854f2e2867aee7a21c +Author: Eduardo Silva +Date: Fri Jun 26 15:39:03 2015 -0600 + + Plugins: cgi: workaround for separate breaklines (#202) + + This patch makes to read the whole data in the buffer until the + breaklines are found, if the buffer becomes full it will abort + the CGI program. + + This implementation needs more testing. + + Signed-off-by: Eduardo Silva + +commit 94cfa12080d3a4be979e8d5da27992d862d3855c +Author: Eduardo Silva +Date: Thu Jun 25 16:46:25 2015 -0600 + + mk_server: http: fix trace messages (socket number) + + Signed-off-by: Eduardo Silva + +commit 9b11ec43623a703ad05e67678f45f8d446906054 +Author: Eduardo Silva +Date: Thu Jun 25 16:28:53 2015 -0600 + + Plugins: cgi: use Monkey streams to dispatch data to the client + + Signed-off-by: Eduardo Silva + +commit 3f9b90ce3d9052ec218ee280c51c8e2bd1327c8b +Author: Eduardo Silva +Date: Thu Jun 25 16:27:12 2015 -0600 + + mk_server: streams: new interfaces to 'intent' to flush data + + Signed-off-by: Eduardo Silva + +commit f294a7d4480c992e3a1d17d4574c55755e3f523f +Author: Eduardo Silva +Date: Wed Jun 24 23:08:45 2015 -0600 + + mk_server: stream: add copybuf handling to stream_set + + Signed-off-by: Eduardo Silva + +commit 027706c4adc4e11be013732fd70a14c112264a71 +Author: Eduardo Silva +Date: Wed Jun 24 18:01:26 2015 -0600 + + mk_server: stream: handle MK_STREAM_COPYBUF + + Signed-off-by: Eduardo Silva + +commit 5e4ae0f504555a91373f34ea6a67c02b839426f9 +Author: Eduardo Silva +Date: Wed Jun 24 14:24:20 2015 -0600 + + mk_server: scheduler: initialize variable + + Signed-off-by: Eduardo Silva + +commit 4de656146e10fa775f6ae3b1c1e53de6c15fb7fd +Author: Eduardo Silva +Date: Wed Jun 24 12:22:44 2015 -0600 + + Plugins: cgi: little API changes and add CMake rules for configuration (#184) + + Signed-off-by: Eduardo Silva + +commit 1be4f4500f2b845fc972a0ab4a7f157fd7f34f2f +Author: Eduardo Silva +Date: Tue Jun 23 22:50:00 2015 -0600 + + mk_server: re-implement timeout handler + + Signed-off-by: Eduardo Silva + +commit 4583d128d283f4a851f60b049a1053dc683f2863 +Author: Eduardo Silva +Date: Fri Jun 19 20:39:44 2015 -0600 + + Plugins: build plugins with position independent code (PIC) + + Signed-off-by: Eduardo Silva + +commit a0e5c7334d7dfc74e312059f2a8ca5291844285a +Author: Eduardo Silva +Date: Thu Jun 18 11:23:50 2015 -0600 + + mk_core: event: workaround for old Linux Kernels without EPOLL_CLOEXEC + + Signed-off-by: Eduardo Silva + +commit ac8be28bc69c2e024d969df91f35493b92fd542f +Author: Eduardo Silva +Date: Wed Jun 17 09:48:57 2015 -0600 + + mk_core: event: fix leak if loop events mem creation fails + + Signed-off-by: Eduardo Silva + +commit 7186e87f8fb80a1a34228710dde0cb5cfcf49e4e +Author: Eduardo Silva +Date: Wed Jun 17 09:48:22 2015 -0600 + + mk_core: event: fix leak if loop creation fails + + Signed-off-by: Eduardo Silva + +commit 32e69eecbe7e483267012c110ad9bb1379485eb7 +Author: Eduardo Silva +Date: Wed Jun 17 09:45:00 2015 -0600 + + mk_core: utils: fix leak on PID file after locking + + Signed-off-by: Eduardo Silva + +commit 62e73837abf39ab1cd7b7aab9253fa763631fcb9 +Author: Eduardo Silva +Date: Wed Jun 17 09:37:20 2015 -0600 + + mk_core: utils: improve validation check when registering PID + + Signed-off-by: Eduardo Silva + +commit 4f6d84cf616e68d8fb1ac293a89f14c44c7b56f5 +Author: Eduardo Silva +Date: Wed Jun 17 09:33:07 2015 -0600 + + mk_core: iov: make iov_print work again + + Signed-off-by: Eduardo Silva + +commit 7bac859c623c112b565862e00e1be2333bf4bc2f +Author: Eduardo Silva +Date: Mon Jun 15 16:46:10 2015 -0600 + + mk_server: server: fix unitialized variable reuse port + + Signed-off-by: Eduardo Silva + +commit ab7bbf5307177830621639e22c6e0cd15b46b090 +Author: Eduardo Silva +Date: Mon Jun 15 16:45:09 2015 -0600 + + mk_core: config: fix leak on split list + + Signed-off-by: Eduardo Silva + +commit e219aeca6840a114e71d3128e81bbd196666d92a +Author: Eduardo Silva +Date: Mon Jun 15 16:40:14 2015 -0600 + + mk_server: http_parser: fix method table index + + Signed-off-by: Eduardo Silva + +commit 172ef76e626b68c678b745bdf6d243cc7b736218 +Author: Eduardo Silva +Date: Mon Jun 15 16:34:13 2015 -0600 + + mk_server: http_parser: remove unnecessary continue() after parse_next() + + Signed-off-by: Eduardo Silva + +commit 2be215b216172a0295ff44edc7f64c23bc942faf +Author: Eduardo Silva +Date: Mon Jun 15 16:32:56 2015 -0600 + + mk_core: rconf: do not over validate configuration context + + Signed-off-by: Eduardo Silva + +commit 4521934825c1ecc58df82b34a8ae5542c7189c45 +Author: Eduardo Silva +Date: Mon Jun 15 16:31:41 2015 -0600 + + mk_server: plugin: validate plugin instance + + Signed-off-by: Eduardo Silva + +commit 4bd3a9bb903740031f5af2a58b45bfd6810e7539 +Author: Eduardo Silva +Date: Mon Jun 15 16:30:47 2015 -0600 + + mk_server: plugin: close handler on exception + + Signed-off-by: Eduardo Silva + +commit f0c80f93024347d7030644fdeb646ddb5436b00f +Author: Eduardo Silva +Date: Mon Jun 15 16:26:16 2015 -0600 + + mk_server: plugin: fix stage40 call assignation + + Signed-off-by: Eduardo Silva + +commit 41f890e01f5a595c79a2c2918f50c42e16802dab +Author: Eduardo Silva +Date: Mon Jun 15 16:25:19 2015 -0600 + + plugins: logger: validate return value of fcntl() calls + + Signed-off-by: Eduardo Silva + +commit 3fb870f276ba6b75bd75370941d288ced34fb6ac +Author: Eduardo Silva +Date: Mon Jun 15 16:20:47 2015 -0600 + + mk_server: socket: validate tcp_nodelay return value + + Signed-off-by: Eduardo Silva + +commit 4445249a91db4b2057730685e55a330a7646fd1e +Author: Eduardo Silva +Date: Mon Jun 15 16:19:50 2015 -0600 + + mk_server: http: validate return value of cork_flag func + + Signed-off-by: Eduardo Silva + +commit 1771d759e3d7c16f03c2bb43cc125017d0fe78ba +Author: Eduardo Silva +Date: Mon Jun 15 16:03:27 2015 -0600 + + mk_server: rework connections timeout handling + + This patch re-enable the timeout handling into the scheduler, it now works + as follows: + + - Scheduler implements a new timeout_queue linked list (similar than before) + - Scheduler register all new connections into the timeout_queue + - Connections that have not send any data upon a timeout check, will be + dropped. + - If a connection sent some data, the protocol handler is in charge to + unregister the connection from the timeout_queue. + - For HTTP KeepAlive case, the session is registered on the timeout_queue + everytime a response was sent. + + Signed-off-by: Eduardo Silva + +commit 79294d2bda10c31c35a7f86690cc295579edc992 +Author: Eduardo Silva +Date: Sun Jun 14 21:03:38 2015 -0600 + + mk_server: move server_info func + + Signed-off-by: Eduardo Silva + +commit daf22a2a13ac7eddfd1645c1f5b7eb649f46ef4c +Author: Eduardo Silva +Date: Fri Jun 12 16:38:37 2015 -0600 + + mk_core: rconf: validate NULL path before create configuration context + + Signed-off-by: Eduardo Silva + +commit 2e4d82a3558b79f2836991cdfdf78f7ca6a2c11f +Author: Eduardo Silva +Date: Fri Jun 12 16:37:07 2015 -0600 + + mk_server: do not abort when no mimetypes are registered + + Signed-off-by: Eduardo Silva + +commit afcdf28455b5755136d527e861fe6562819481f0 +Author: Eduardo Silva +Date: Fri Jun 12 12:16:36 2015 -0600 + + Build: new WITHOUT_CONF CMake option to skip configuration files + + Signed-off-by: Eduardo Silva + +commit 889cd613bc8b19c20c56009adee3478af1a557ba +Author: Eduardo Silva +Date: Fri Jun 12 12:05:38 2015 -0600 + + mk_server: plugin: check if a plugins config file was set + + Signed-off-by: Eduardo Silva + +commit 71e79106e550afab974ca03d52380e115764a92b +Author: Eduardo Silva +Date: Fri Jun 12 11:33:56 2015 -0600 + + mk_server: plugin: do not abort if there is no dynamic plugins + + Signed-off-by: Eduardo Silva + +commit af1ffbb13e2838a8b23ed7daf6b2bb3d4352bddf +Author: Eduardo Silva +Date: Thu Jun 11 11:23:11 2015 -0600 + + mk_server: set -fPIC to C_FLAGS + + Signed-off-by: Eduardo Silva + +commit f2ca8ab23d47c0ebe01a8664b8018202a488d5c4 +Author: Eduardo Silva +Date: Thu Jun 11 11:03:06 2015 -0600 + + mk_server: build: link to -dl using CMAKE_DL_LIBS variable + + Signed-off-by: Eduardo Silva + +commit d024fdee05a6379138f818ecf5ccffb67d517d5a +Author: Eduardo Silva +Date: Wed Jun 10 19:44:15 2015 -0600 + + CI: add OSX as build system + + Signed-off-by: Eduardo Silva + +commit aa04d958ed18472b9eed2fae78f2baf8a43e8ae4 +Author: Chris Johns +Date: Thu Jun 11 11:14:52 2015 +1000 + + mk_server: build: fix library lists rules for FreeBSD. + +commit 87f3012d3bcd70ee696bba554f5312facbbaa2ab +Author: Chris Johns +Date: Thu Jun 11 11:14:24 2015 +1000 + + mk_server: socket: platform neutral sockopt setting + +commit 3593904c35c0f102d919ee5d83b0f41f9f893b60 +Author: Chris Johns +Date: Thu Jun 11 10:55:57 2015 +1000 + + mk_server: Liana: add FreeBSD support for sending a file. + +commit 8e88d356c86afd8d6be02bc845b000dd4a24344f +Author: Chris Johns +Date: Thu Jun 11 10:43:15 2015 +1000 + + Configure: add support for FreeBSD + + Switch the shell to /bin/sh as this should work on all systems. + + Make the colour support specific to Linux. + + Show Monkey is more than just Linux these days. + +commit ffe2625d75639d0a48daa26f8651b8a7f23ec53f +Author: Eduardo Silva +Date: Wed Jun 10 15:39:13 2015 -0600 + + mk_bin: mk_server: move signals interfaces and cleanup executable calls + + Signed-off-by: Eduardo Silva + +commit d7b4f703bb4295888c6dbd37e69c930813580bd7 +Author: Eduardo Silva +Date: Tue Jun 9 11:21:45 2015 -0600 + + mk_server: scheduler: fix variables on trace mode + + Signed-off-by: Eduardo Silva + +commit 090462eb5302654394e87fad74c77079998f4101 +Author: Eduardo Silva +Date: Tue Jun 9 11:13:56 2015 -0600 + + mk_core: event: epoll: fix parameter when trace is enabled + + Signed-off-by: Eduardo Silva + +commit eed81571a50a58c997c1458147ed8253b414783a +Author: Eduardo Silva +Date: Tue Jun 9 11:12:29 2015 -0600 + + mk_core: adopt mk_file interface + + Signed-off-by: Eduardo Silva + +commit 42225b674517d89eb87b9ffa0230e6c987118b92 +Author: Eduardo Silva +Date: Tue Jun 9 11:02:57 2015 -0600 + + mk_core: event: epoll: align API change for event_del() + + Signed-off-by: Eduardo Silva + +commit 5a2d722e08f7783ff7d6200871a6a529495a485a +Author: Eduardo Silva +Date: Tue Jun 9 10:58:39 2015 -0600 + + mk_core: event (mk_server): use event context when deleting a connection + + this patch makes the event handler to use the connection context mk_event as + a reference to obtain the connection file descriptor and event bitmask. + + The main reason for this change is the requirement to get the existent bitmask for + the kqueue interface, when deleting an event it needs the 'filter' associated and this + is translated to the event mask: EVFILT_READ ; EVFILT_WRITE. + + For epoll(2) backend is not required but there is no performance penalty associated, + epoll backend patch already coming. + + Signed-off-by: Eduardo Silva + +commit 8ba5c4fbc56f76a6a97da21a1ce6c22258af90e7 +Author: Eduardo Silva +Date: Tue Jun 9 08:51:54 2015 -0600 + + mk_core: kqueue: fix mask when adding a new fd + + Signed-off-by: Eduardo Silva + +commit 2cdeec3cd1e0fbf02afd8d7818e3a98de948414b +Author: Eduardo Silva +Date: Tue Jun 9 08:47:18 2015 -0600 + + mk_core: add missing declaration of memrchr for OSX + + Signed-off-by: Eduardo Silva + +commit c80b114349b70a19657e332adc404cf05ecc4c9d +Author: Eduardo Silva +Date: Tue Jun 9 08:39:49 2015 -0600 + + mk_core: kqueue: remove unused variable + + Signed-off-by: Eduardo Silva + +commit 4b92fe6cb528ec6bdfcb8edf61fd70641e7f56c4 +Author: Eduardo Silva +Date: Tue Jun 9 08:35:23 2015 -0600 + + File: add time header + + Signed-off-by: Eduardo Silva + +commit bc286b7995ca518c186e3c64c2aa4dbd2f729388 +Author: Eduardo Silva +Date: Mon Jun 8 22:43:59 2015 -0600 + + Build: fix linking to jemalloc when is enabled + + Signed-off-by: Eduardo Silva + +commit 303cb4c56695c4ce7609ab2150eb389de9ec6e26 +Author: Eduardo Silva +Date: Mon Jun 8 16:31:46 2015 -0600 + + mk_server: fix compiler warnings + + Signed-off-by: Eduardo Silva + +commit fffffe67cc64517e6a3c8e45f38647d5f19af8d2 +Author: Eduardo Silva +Date: Mon Jun 8 16:22:29 2015 -0600 + + mk_server: add initializator + + Signed-off-by: Eduardo Silva + +commit da39c4e9ad7c67545bdecb59288965fe9cda4827 +Author: Eduardo Silva +Date: Mon Jun 8 16:17:10 2015 -0600 + + mk_core: mk_server: general fixes for building + + Signed-off-by: Eduardo Silva + +commit 5aad2c798b80bc47516cc4e372fe518c8784e1d2 +Author: Eduardo Silva +Date: Sun Jun 7 09:57:42 2015 -0600 + + mk_core: adopt some mk_server utilities + + Signed-off-by: Eduardo Silva + +commit b135a82caa17ea3324590d2037714ae74345b260 +Author: Eduardo Silva +Date: Sun Jun 7 09:43:47 2015 -0600 + + mk_bin: add build system + + Signed-off-by: Eduardo Silva + +commit 2d09462fc4891988b846d1edb7cb481112f7dce7 +Author: Eduardo Silva +Date: Sun Jun 7 09:43:12 2015 -0600 + + Source: split code into new directories: mk_bin, mk_server & mk_core + + Signed-off-by: Eduardo Silva + +commit 67278ace622986ad7d12ff903e90c4406b0b0fff +Author: Eduardo Silva +Date: Sun Jun 7 08:51:10 2015 -0600 + + Core: fix some compiler warnings + + Signed-off-by: Eduardo Silva + +commit aef09631c107649a1b32afe924e487120718dba0 +Author: Eduardo Silva +Date: Sun Jun 7 08:25:26 2015 -0600 + + Build: add rules to build static lib + + Signed-off-by: Eduardo Silva + +commit 69f8762ab3707d61aa2870b25c867e5b13f29fe5 +Author: pandax381 +Date: Sat Jun 6 16:59:57 2015 -0600 + + Build: porting Mac OS X (and other BSD systems) + + Signed-off-by: Eduardo Silva + +commit 542a9dfd66069eebbd0b2619bed51f81e96a42cb +Author: nkaneko +Date: Thu Jun 4 17:25:58 2015 +0900 + + mk_core: fix timeout given to EVFILT_TIMER in some BSD + + This patch fix timeout parameter given to EV_SET(EVFILT_TIMER) in BSD system + other than FreeBSD. Only FreeBSD(or LINUX_SECOND) has NOTE_SECONDS defined and + specify seconds in EV_SET(EVFILT_TIMER). Other BSD expects milliseconds. + + Tested in NetBSD environment. + + Signed-off-by: enukane + +commit dfc6fd602b2ca06849967cbed711202d119787fb +Author: Eduardo Silva +Date: Wed Jun 3 17:29:52 2015 -0600 + + Stream: remove mk_bug() check on copybuf + + Signed-off-by: Eduardo Silva + +commit 16cd3c6dc41fc985548da7b54e2641355d6db975 +Author: Eduardo Silva +Date: Wed Jun 3 17:25:55 2015 -0600 + + Mimetype: fix header inclusion (core) + + Signed-off-by: Eduardo Silva + +commit e5d7a1f235927ed1b48a62ecd74255baaab446ec +Author: Eduardo Silva +Date: Wed Jun 3 17:23:14 2015 -0600 + + mk_core: move getenv routine inside TRACE conditional + + Signed-off-by: Eduardo Silva + +commit 3640f6ff14bdac110c8192bd92585c809b6f7f7f +Author: Eduardo Silva +Date: Wed Jun 3 17:18:59 2015 -0600 + + HTTP: fix header inclusion (core) + + Signed-off-by: Eduardo Silva + +commit f7c46f7548e7371fb05c363904570fdb3a781255 +Author: Eduardo Silva +Date: Wed Jun 3 17:13:04 2015 -0600 + + Dirlisting: do not try to flush the channel, just enqueue data + + Signed-off-by: Eduardo Silva + +commit 5a5a4f262a75a4720db47790c8e3014540ad8b32 +Author: Eduardo Silva +Date: Wed Jun 3 17:12:08 2015 -0600 + + Auth: fix headers and API calls + + Signed-off-by: Eduardo Silva + +commit cc8258f9d296185845259ec0261a8b69f43c5373 +Author: Eduardo Silva +Date: Wed Jun 3 03:01:28 2015 -0600 + + mk_core: add missing mk_rbtree.c + + Signed-off-by: Eduardo Silva + +commit 4fd1504c3bb7ef00c2be9f882ca4bf35ce3f19d6 +Author: Eduardo Silva +Date: Wed Jun 3 02:51:35 2015 -0600 + + mk_core: add missing mk_memory.c + + Signed-off-by: Eduardo Silva + +commit 9cf7ec5c43fa6f99b5767df1c1e3c9daf3cb5008 +Author: Eduardo Silva +Date: Wed Jun 3 02:47:54 2015 -0600 + + mk_core: add missing mk_limits + + Signed-off-by: Eduardo Silva + +commit 520d8c7f1401f345046a50f136b71c90e91b7916 +Author: Eduardo Silva +Date: Wed Jun 3 01:46:20 2015 -0600 + + mk_core: adopt some mk_utils functions + + Signed-off-by: Eduardo Silva + +commit 99aeba18807637dbcc2a91d434ab71467622f7b9 +Author: Eduardo Silva +Date: Tue Jun 2 23:53:04 2015 -0600 + + mk_core: move core files of generic features to a kind of 'lib' + + this patch moves several Monkey source code files to a mk_core + sub-directory: + + - moved only generic interfaces for memory, string handling, configuration, + polling, etc. + - useful for other projects that use some Monkey core files (e.g: fluent/fluent-bit) + + Signed-off-by: Eduardo Silva + +commit 69ba3fd02a2442544ee50e732504e14882632f9b +Author: Eduardo Silva +Date: Tue Jun 2 20:52:36 2015 -0600 + + Scheduler: write buffering and I/O abstraction. + + this patch makes the Monkey scheduler aware about buffering and + protocol handling. From now Monkey core protocol handlers are plugins + requires to enqueue outgoing data and the Scheduler take care of dispatch + the information out. + + Note: It still need to be tweak for high performance. + + Signed-off-by: Eduardo Silva + +commit 7e2a4075719ca8b06be406edfaa7a0d1e27f56a4 +Merge: 890c16f 47baec9 +Author: Eduardo Silva +Date: Sun May 31 18:45:51 2015 -0600 + + Merge pull request #209 from neeraj9/dev-use-sigsuspend + + Server: Use sigsuspend instead of sleep + +commit 47baec966af07fd919c6e7fe36f1f42748a6df9e +Author: Neeraj Sharma +Date: Fri May 29 14:45:43 2015 +0530 + + Use sigsuspend instead of sleep + + The usage of sigsuspend is both portable and cleaner than sleep to + indefinitely do nothing. This approach is useful in the master + loop (mk_server). + + This commit closes #203 + + Signed-off-by: Neeraj Sharma + +commit 890c16f1cc73609ffd203c0dc2b74f3d08104748 +Author: Eduardo Silva +Date: Mon May 18 21:42:15 2015 -0600 + + Plugin: deprecate old 'events' interface + + Signed-off-by: Eduardo Silva + +commit 240c2ab4accb5550ae06dd071a83462f640b3106 +Author: Eduardo Silva +Date: Mon May 18 11:51:20 2015 -0600 + + Plugin: remove dead events code + + Signed-off-by: Eduardo Silva + +commit 7e900b99dfae6934b51d7f6e5757f0d8ef2d88ea +Author: Eduardo Silva +Date: Mon May 18 11:43:53 2015 -0600 + + Server: banner now print the list of loaded plugins (Fix #185) + + Signed-off-by: Eduardo Silva + +commit e426544df9513c29dbd48fee8f480883b84513a4 +Author: Eduardo Silva +Date: Mon May 18 11:36:11 2015 -0600 + + Server: -b option now lists the built-in plugins (ref #185) + + Signed-off-by: Eduardo Silva + +commit b4d7ea69bb6d8baa8b1dcbe349408929e18cff86 +Author: Eduardo Silva +Date: Sat May 16 21:41:26 2015 -0600 + + Core: buffer: use network layer buffer size + + this patch makes the protocol handlers to respect the buffer sizes + suggested by the network plugin. + + Signed-off-by: Eduardo Silva + +commit 22a4435fdf21c2cc2ad95e2f293f148fcdab6f05 +Author: Eduardo Silva +Date: Sat May 16 20:24:33 2015 -0600 + + Scheduler: remove 'capacity' feature + + Signed-off-by: Eduardo Silva + +commit 6b419d1fd22030b4f71e20d59884872ed618a9ae +Author: Eduardo Silva +Date: Sat May 16 20:11:34 2015 -0600 + + Headers: some header inclusion cleanups + + Signed-off-by: Eduardo Silva + +commit def1f351d2e8344ac73c35df3125c4a69c66bf2b +Author: Eduardo Silva +Date: Sat May 16 18:31:09 2015 -0600 + + Socket: fix variable name + + Signed-off-by: Eduardo Silva + +commit 0b82d7f7e6632a1e785850ea08a1bd705de0365c +Author: Eduardo Silva +Date: Sat May 16 18:25:58 2015 -0600 + + Build: CMake: rename mbedtls option to tls + + Signed-off-by: Eduardo Silva + +commit 04290bc6fd5580ebb9190df711b575531ab55508 +Author: Eduardo Silva +Date: Sat May 16 18:23:04 2015 -0600 + + TLS: polarssl plugin fixes and rebranded as 'tls'. + + This patch makes some changes on the old polarssl plugin and is rebranded as + 'tls'. It now depends on mbedtls library. + + Signed-off-by: Eduardo Silva + +commit 5267220b44b65a5a8e41aafb280ae173e3d0ea13 +Author: Eduardo Silva +Date: Fri May 15 17:06:24 2015 -0600 + + Core: new network layer abstraction + + This patch implement the following changes/features: + + - Listeners configuration allows extra parameters or flags, the options are: + - http + - http2 (not implemented yet) + - ssl + these options are handled as 'capabilities' by the plugins and the core + interfaces. + - Each scheduler connection is linked to a protocol handler and a network layer + plugin. + - Due to previous changes, now multiple TCP ports can have different capabilities + and use multiple transports layer. + - Global configuration is not longer aware about networking stuff. + - Socket interface cleanup: moved network features like server, bind & connect + to it. + - Channels are now linked to the network layer interface. + + Signed-off-by: Eduardo Silva + +commit 3da7a940212e7e3fe70af8de0d63f74a1fe3ceea +Author: Eduardo Silva +Date: Thu May 14 14:10:52 2015 -0600 + + Config: Listen key now support flags: http, http2 & ssl (not yet functional) + + Signed-off-by: Eduardo Silva + +commit dc9f68cb24eaa116edcc9b566ca95709f621c672 +Author: Eduardo Silva +Date: Mon May 11 14:47:52 2015 -0600 + + Server: remove silly printf msg + + Signed-off-by: Eduardo Silva + +commit 40e72221a9e6ff12adcba32fad75b601f17b8d9a +Author: Eduardo Silva +Date: Sun May 10 21:24:28 2015 -0600 + + Build: CMake: when using jemalloc, link pthreads explicity + + Signed-off-by: Eduardo Silva + +commit 3c4770c2aae04c927d2a5faeed387c0b983f5409 +Author: Eduardo Silva +Date: Sun May 10 21:05:32 2015 -0600 + + Build: CMake: do not repeat parameters when adding libraries to the monkey target + + Signed-off-by: Eduardo Silva + +commit 45da3b13301c152f5f4a6e644e27a5a5763f6aa0 +Author: Eduardo Silva +Date: Sun May 10 20:57:49 2015 -0600 + + Event: Kqueue: fix backend to align to new Event core interface + + This patch modify the kqueue backend to align to the new Events mechanism, + at the moment it 'compiles', but it's not 100% functional. + + Signed-off-by: Eduardo Silva + +commit 43290a4dee0220beed77069271c8394392d89d5b +Author: Eduardo Silva +Date: Sun May 10 20:30:22 2015 -0600 + + Event: remove old references to event file descriptor table (EFDT) + + Signed-off-by: Eduardo Silva + +commit f46e84626162684db700d7ffa10130e46acb57b4 +Author: Eduardo Silva +Date: Mon May 4 11:11:42 2015 -0600 + + Event: epoll: do not zero events struct + + Signed-off-by: Eduardo Silva + +commit 44348ebe228511892371b3b15da9c49a214743a2 +Author: Eduardo Silva +Date: Mon May 4 09:36:08 2015 -0600 + + HTTP: improve how to check keepalive and session closing + + Signed-off-by: Eduardo Silva + +commit c45dfe03289336520108e35e1c89167e246a1924 +Author: Eduardo Silva +Date: Sun May 3 21:03:56 2015 -0600 + + HTTP: deprecate support of old Keep-Alive response header + + Signed-off-by: Eduardo Silva + +commit 05cc0e704fc9eabc3abeb14f1e39dc2b537a0e31 +Author: Eduardo Silva +Date: Sun May 3 13:45:16 2015 -0600 + + IOV: do not print out an error if array is outside of size + + Signed-off-by: Eduardo Silva + +commit 8bc7294801f1e0bdf8b92c45b327a2b362cc6032 +Author: Eduardo Silva +Date: Sun May 3 13:37:37 2015 -0600 + + IOV: on consume, check best of case where all bytes where consume (avoid walk around the array) + + Signed-off-by: Eduardo Silva + +commit f1d284238bf8212ee3765cc3310cf7b088739324 +Author: Eduardo Silva +Date: Sun May 3 13:29:30 2015 -0600 + + HTTP: store session in extended Scheduler connection memory area + + Signed-off-by: Eduardo Silva + +commit 4c8d6d9b2cec996c2589b37e24924919bb9b17e5 +Author: Eduardo Silva +Date: Sat May 2 15:46:40 2015 -0600 + + Doc: draft of v1.6 Announcement + + Signed-off-by: Eduardo Silva + +commit aaa8977a5cdc45e9b53e7e005371b75001a697c0 +Author: Eduardo Silva +Date: Sat May 2 15:42:56 2015 -0600 + + Scheduler: support protocols handler. + + This first patch makes the Scheduler aware about protocol handlers + per connection. + + One the next set of patches the following will be implemented: + + - Configure Listeners handlers per configuration + - Let CMake define protocols/handlers available and auto register + - Improve Scheduler memory allocation for protocol/handlers that + will own the session (e.g: HTTP). + + Signed-off-by: Eduardo Silva + +commit 94cb66c178c2b69f30080b1c0fce348f59ca7d07 +Author: Eduardo Silva +Date: Sat May 2 14:47:05 2015 -0600 + + Mandril: use new rconf api + + Signed-off-by: Eduardo Silva + +commit e7326959203b248281f9338852f8f9019121b8e7 +Author: Eduardo Silva +Date: Sat May 2 14:45:06 2015 -0600 + + Logger: use new rconf api + + Signed-off-by: Eduardo Silva + +commit 6a917c5928140642314d8ffc260711c3f19a144d +Author: Eduardo Silva +Date: Sat May 2 14:43:49 2015 -0600 + + Dirlisting: use new rconf api + + Signed-off-by: Eduardo Silva + +commit a1a6461f91c90a54a6c25adbe0586e5ebc3cf4a1 +Author: Eduardo Silva +Date: Sat May 2 14:43:08 2015 -0600 + + Cheetah: use new rconf api + + Signed-off-by: Eduardo Silva + +commit fa9c420a7c4bd3c1c1472341cb7577c82ab5384d +Author: Eduardo Silva +Date: Sat May 2 14:42:02 2015 -0600 + + Auth: use new rconf api + + Signed-off-by: Eduardo Silva + +commit dd534ad6a2ebc7282b44646521b55ccf7053247d +Author: Eduardo Silva +Date: Sat May 2 14:39:01 2015 -0600 + + RConf: new interface to handle configuration files. + + This patch creates rconf which is a new interface to read configuration + files, it basically take the routines to read configuration files from + the mk_config.c and place it in a new mk_rconf.c, functions got renamed + and some macros changed. + + Signed-off-by: Eduardo Silva + +commit 1ebbb35d3f78af749c3451a6468a12ca51233fee +Author: Eduardo Silva +Date: Sat May 2 10:44:37 2015 -0600 + + Scheduler: rename sched_list_node to mk_sched_worker + + Signed-off-by: Eduardo Silva + +commit cf8a4f4dc56e5b92b45ef09bb3b1841a304080a6 +Author: Eduardo Silva +Date: Sat May 2 09:23:39 2015 -0600 + + Connection: deprecate interface and move routines into the Scheduler + + Signed-off-by: Eduardo Silva + +commit 2e95030a0435147c54ef6b979329ffaa72c23160 +Author: Eduardo Silva +Date: Thu Apr 30 23:51:53 2015 -0600 + + HTTP: on error handling, set content-length=0 when no body exists + + Signed-off-by: Eduardo Silva + +commit 21c27fcbf1d372dc91d8cc660db9e273bdd1fa68 +Author: Eduardo Silva +Date: Thu Apr 30 23:45:22 2015 -0600 + + Core: fix GMT_DATEFORMAT macro for clock and HTTP + + Signed-off-by: Eduardo Silva + +commit 9d40873869dceb2da17177dbf886426a254bc82e +Author: Eduardo Silva +Date: Wed Apr 29 22:30:07 2015 -0600 + + Scheduler: free mk_sched_conn on closing connection + + Signed-off-by: Eduardo Silva + +commit 86a3550cd06714cbb3b5116be2fb56cef0b8c3e1 +Author: Eduardo Silva +Date: Wed Apr 29 15:15:02 2015 -0600 + + HTTP: on '400 Bad Request' do not compose error page + + Signed-off-by: Eduardo Silva + +commit 73a8f9cd4abfbed86f5087e1bc7bca6638042e91 +Author: Eduardo Silva +Date: Wed Apr 29 14:14:38 2015 -0600 + + HTTP: compose error page stream with stream API directly + + Signed-off-by: Eduardo Silva + +commit 355b208cdc3204ff0caade7fe293df91efcb7db9 +Author: Eduardo Silva +Date: Tue Apr 28 18:37:23 2015 -0600 + + Scheduler: remove unused field + + Signed-off-by: Eduardo Silva + +commit 8ee889bf5b59c9af0a6865cca4d9f3d18c22dab5 +Author: Eduardo Silva +Date: Tue Apr 28 17:06:33 2015 -0600 + + HTTP Parser: pack http_parser structure + + Signed-off-by: Eduardo Silva + +commit e781b99328fcda31e56a45731aff65c6a2cd318b +Author: Eduardo Silva +Date: Tue Apr 28 15:58:17 2015 -0600 + + Virtual Host FDT: do not try to close(2) a non-open file descriptor + + Signed-off-by: Eduardo Silva + +commit 807b7de732a5215996cd57d7dece569169ce6a51 +Author: Eduardo Silva +Date: Tue Apr 28 15:24:32 2015 -0600 + + Virtual Host FDT: fix uninitialized values and context flags + + Signed-off-by: Eduardo Silva + +commit 6a2a0f13fc0d8224d7ea9a1cd33181d86237e8ae +Author: Eduardo Silva +Date: Tue Apr 28 11:01:29 2015 -0600 + + Connection: Server: pass sched context across callbacks + + Signed-off-by: Eduardo Silva + +commit 24eebd4342a016384f03f7d30dd540a9af595ec0 +Author: Eduardo Silva +Date: Mon Apr 27 10:55:36 2015 -0600 + + Connection: fix handling for keep-alive connection + + Signed-off-by: Eduardo Silva + +commit e92f46764d959c2e014e1d43ab06d593ae2d078c +Author: Eduardo Silva +Date: Mon Apr 27 10:47:01 2015 -0600 + + Server: fix trace mode on loop_balancer() + + Signed-off-by: Eduardo Silva + +commit 996a877e2a63439b553d507d0352430befc6e112 +Author: Eduardo Silva +Date: Mon Apr 27 10:44:04 2015 -0600 + + Server: make old-balancer mode work again + + Signed-off-by: Eduardo Silva + +commit 271ce08ed7361e70db88fcbccfa256d087aff044 +Author: Eduardo Silva +Date: Sun Apr 26 20:43:42 2015 -0600 + + Server: fix worker_loop() declaration + + Signed-off-by: Eduardo Silva + +commit a2af71bf8e2f8660ed1e0c7928f2ecbf1f06f52a +Author: Eduardo Silva +Date: Sun Apr 26 20:40:30 2015 -0600 + + Plugin: remove deprecated reference of mk_stats.h + + Signed-off-by: Eduardo Silva + +commit 6021603736bb3952967a20362e538a917f37015a +Author: Eduardo Silva +Date: Sun Apr 26 20:37:25 2015 -0600 + + Mandril: adapt to new stage10 declaration + + Signed-off-by: Eduardo Silva + +commit abc4cfdd6231b45ad69e918ecd572c940a9c66f6 +Author: Eduardo Silva +Date: Sun Apr 26 20:36:32 2015 -0600 + + Logger: adapt to new polling API + + Signed-off-by: Eduardo Silva + +commit e4de5346782d85b3dea5598917e6124020045516 +Author: Eduardo Silva +Date: Sun Apr 26 20:18:04 2015 -0600 + + Core: Scheduler: Polling: new architecture (work in process) + + This patch is a major change on Monkey architecture. This is the + summary of the changes: + + - Polling: the polling mechanism do not longer works with a file + descriptor, instead, it store a 'struct mk_event' as void * that + can be used by the callers to set their own data and retrieve it + once an event is triggered on the monitored fd. + + The way to use it by the callers is that callers create their own + structure but the first field of that structure is a static + reference of 'struct mk_event', e.g: + + struct mk_sched_conn { + struct mk_event event; + ... + }; + + On that way we allow callers to set their own data and also let the + polling core to handle what they need. + + - Scheduler: major cleanup and reduced code, some functionalities are + still pending waiting for migration of code. For each accepted connection + a 'struct mk_sched_conn' exists. + + The scheduler do not longer holds a static array with the maximum number of + allowed connection. They are allocated on fly now. We reduced memory usage + and speed up the handling. + + - Event File Descriptor Table (EFDT): droped. Initially conceived to maintain + a global status of each file descriptor, this now is deprecated and handled + by the 'struct mk_event' and the structure in use by the caller. We reduced + memory usage and speed up the handling. + + This is still work in process, more updates on the next series of commits. + + Signed-off-by: Eduardo Silva + +commit 22d336ef7798e476822df637d0aa61bd37cbf8f4 +Author: Eduardo Silva +Date: Tue Apr 14 23:33:59 2015 -0600 + + Liana: do not print broken pipe errors to stdout on sendfile() + + Signed-off-by: Eduardo Silva + +commit b9f86ede3f8924359fe2faccc1ed981a71f11d95 +Author: Eduardo Silva +Date: Tue Apr 14 23:30:21 2015 -0600 + + Stream: fix data type to handle streams operations results (fix #200) + + Signed-off-by: Eduardo Silva + +commit a93a37553c920732f4708ba4f04f8a3e5255fe8b +Merge: 5e4c4d2 6faee5f +Author: Eduardo Silva +Date: Tue Apr 14 23:15:33 2015 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 5e4c4d2899d5b7efd8fcf82e2973f0ac9774adef +Author: Eduardo Silva +Date: Tue Apr 14 23:13:53 2015 -0600 + + Core: rename common return values and do not perform channel writes from protocol handling routines + + Signed-off-by: Eduardo Silva + +commit 6faee5ffd3c25892ee6d073bb8e067048c1eedad +Merge: 23b1dfe 04899a1 +Author: Eduardo Silva +Date: Tue Apr 14 22:58:07 2015 -0600 + + Merge pull request #199 from leowzukw/patch-1 + + Configuration: typo in template (/~user) + +commit 23b1dfe526b04abead092f18e36545d0761894ca +Author: Eduardo Silva +Date: Sun Apr 12 20:13:01 2015 -0600 + + HTTP: on http_prepare, return right return proper channel value + + Signed-off-by: Eduardo Silva + +commit 4de62255d716c21c5178f908ef31618dc785ee1f +Author: Eduardo Silva +Date: Sun Apr 12 18:51:56 2015 -0600 + + Request: initialize file stream 'preserve' field + + Signed-off-by: Eduardo Silva + +commit fb621bd8ffbdeece94cd97b756d76af799e9268e +Author: Eduardo Silva +Date: Sun Apr 12 18:45:22 2015 -0600 + + HTTP Parser: send 413 HTTP error when cannot store extra headers + + Signed-off-by: Eduardo Silva + +commit cda7a3d35865880240f536655c59867a57d3fe79 +Author: Eduardo Silva +Date: Sun Apr 12 17:37:55 2015 -0600 + + Stream: fix unitialized 'preserve' stream field + + Signed-off-by: Eduardo Silva + +commit 0560ee853a6e1f2fd3441753f69201fcdac40217 +Author: Eduardo Silva +Date: Sun Apr 12 17:33:22 2015 -0600 + + Connection: on premature close, check if the channel have some data to send + + Signed-off-by: Eduardo Silva + +commit cf5d2eeed9f97314ab1bc62a8e526656d41950d7 +Author: Eduardo Silva +Date: Sat Apr 11 19:53:26 2015 -0600 + + HTTP: on error, do not append stream after stream_set + + Signed-off-by: Eduardo Silva + +commit 04899a1ccb03a97c49b4a7ec89fc89821c97b5d2 +Author: leowzukw +Date: Sat Apr 11 09:15:55 2015 +0200 + + Typo? + +commit 58aa859de248e74e2bb196c02bbeeed172c9fabb +Author: Eduardo Silva +Date: Fri Apr 10 21:14:36 2015 -0600 + + Build: CMake: fix variable scope when linking static plugins + + Signed-off-by: Eduardo Silva + +commit 4e70b74e6202196534df3fcdf70c5c713901560d +Author: Eduardo Silva +Date: Fri Apr 10 09:31:04 2015 -0600 + + Server: remove unnecessary remove_client call + + Signed-off-by: Eduardo Silva + +commit 27a7a4302a415f545ecb72727e429ed396b802e7 +Author: Eduardo Silva +Date: Fri Apr 10 09:10:18 2015 -0600 + + Core: remove old/unused stats interface + + Signed-off-by: Eduardo Silva + +commit eec21cd5e47f6a2f6167d74324a25f8590a5fd4e +Author: Eduardo Silva +Date: Fri Apr 10 09:07:25 2015 -0600 + + HTTP: Fix memory corruption when handling a protocol error (Fix #194) + + When the HTTP parser catch an error, the HTTP core will try to close(2) an + unitialized file descriptor from the session, generating a memory corruption. + + This patch make sure to initialize the value and only try to close it if + it have some valid number. + + note: this problem is only faced on v1.6. + + Signed-off-by: Eduardo Silva + +commit c77183d9d11e2a1378ac27508a745f805c51448b +Author: Eduardo Silva +Date: Wed Apr 8 15:16:45 2015 -0600 + + Files: remove unused text documents + + Signed-off-by: Eduardo Silva + +commit 2438d67233b5849cfb537b01f16b9ca65c09e833 +Author: Eduardo Silva +Date: Tue Apr 7 11:43:46 2015 -0600 + + Build: CMake: auto-turn off Linux options on non-Linux systems + + Signed-off-by: Eduardo Silva + +commit 87e3f0ac229dd718297ce1919284946377bc20cc +Author: Eduardo Silva +Date: Tue Apr 7 10:27:38 2015 -0600 + + Doc: update README + + Signed-off-by: Eduardo Silva + +commit 04bded2cf38615821adfda51706834284b65636d +Author: Eduardo Silva +Date: Tue Apr 7 10:25:38 2015 -0600 + + Configure: remove old references to systemd init scripts + + Signed-off-by: Eduardo Silva + +commit 10be8467f510b2e357ea6f6473407e90a83dabb4 +Author: Eduardo Silva +Date: Tue Apr 7 10:24:01 2015 -0600 + + Mandril: CMake: support configuration files + + Signed-off-by: Eduardo Silva + +commit be90b12f4c6e45569c5bdf54703c56f9540b09db +Author: Eduardo Silva +Date: Tue Apr 7 10:18:05 2015 -0600 + + Build: CMake: create log path for local mode + + Signed-off-by: Eduardo Silva + +commit c29ffbf5bb96b97e979b8c9da4b8e2c495dea57f +Author: Eduardo Silva +Date: Tue Apr 7 10:14:33 2015 -0600 + + Logger: CMake: support configuration files + + Signed-off-by: Eduardo Silva + +commit e2e156ba0494f00c6035eb35aed4092186d47495 +Author: Eduardo Silva +Date: Tue Apr 7 10:04:03 2015 -0600 + + Cheetah: CMake: support configuration files + + Signed-off-by: Eduardo Silva + +commit 362921535e04ec2c552f4948a8e86c019e841579 +Author: Eduardo Silva +Date: Tue Apr 7 10:01:56 2015 -0600 + + Dirlisting: CMake: fix conf path + + Signed-off-by: Eduardo Silva + +commit fdf1f1948cdad3f7b2af55318363faa52e2cc41e +Author: Eduardo Silva +Date: Tue Apr 7 09:57:12 2015 -0600 + + Dirlisting: CMake: support configuration files + + Signed-off-by: Eduardo Silva + +commit 927b1a8c502c3d9d670ffa540fb00439275a6c44 +Author: Eduardo Silva +Date: Tue Apr 7 08:52:47 2015 -0600 + + Auth: avoid jemalloc stuff on mk_passwd + + Signed-off-by: Eduardo Silva + +commit efaaf4bc5b7fcf626739890975f1a665b5e8acc8 +Author: Eduardo Silva +Date: Mon Apr 6 22:47:18 2015 -0600 + + Build: CMake: do not load all plugins by default on plugins.load + + Signed-off-by: Eduardo Silva + +commit f1931b869a763cd02dba3abb303a4ee895e93a86 +Author: Eduardo Silva +Date: Mon Apr 6 22:46:18 2015 -0600 + + Build: CMake: fix webroot for local mode + + Signed-off-by: Eduardo Silva + +commit 3a515c3c56ccddce4b367755549676924efc7d63 +Author: Eduardo Silva +Date: Mon Apr 6 22:44:06 2015 -0600 + + Build: CMake: add missing path for PIDFILE on local mode + + Signed-off-by: Eduardo Silva + +commit 3691c6e7aa0d29722dec85b7d611964c3dc1d689 +Author: Eduardo Silva +Date: Mon Apr 6 22:40:15 2015 -0600 + + Logger: do not double print-error on configuration problem + + Signed-off-by: Eduardo Silva + +commit e7ecaff35172a3a51b3455e7a6c832917197dd70 +Author: Eduardo Silva +Date: Mon Apr 6 22:39:12 2015 -0600 + + Mandril: validate configuration file + + Signed-off-by: Eduardo Silva + +commit 5cbdb271cd13856abc40f4640c38a83b32ffabe2 +Author: Eduardo Silva +Date: Mon Apr 6 22:37:50 2015 -0600 + + Logger: validate configuration file + + Signed-off-by: Eduardo Silva + +commit c61be3be4f83a605c568e5c9560823f248a775e2 +Author: Eduardo Silva +Date: Mon Apr 6 22:36:56 2015 -0600 + + Dirlisting: validate configuration path, unload plugin if it fails + + Signed-off-by: Eduardo Silva + +commit 1368045797ce61df56f9f1c640343d243d03fbe5 +Author: Eduardo Silva +Date: Mon Apr 6 22:35:47 2015 -0600 + + Cheetah: unload plugin if configuration fails + + Signed-off-by: Eduardo Silva + +commit e32bb45a3f0e9a189b50804c6e3b1b77c1ebfd95 +Author: Eduardo Silva +Date: Mon Apr 6 17:16:24 2015 -0600 + + Auth: remove unused configuration example + + Signed-off-by: Eduardo Silva + +commit 77a61dbdd5b2db3e7356e129aa9bc4d7a578f47f +Author: Eduardo Silva +Date: Mon Apr 6 17:14:48 2015 -0600 + + Auth: build mk_passwd in tools (add CMake rules) + + Signed-off-by: Eduardo Silva + +commit f5988a4d8a81fcdd5cb66c4b729066c8a31c1979 +Author: Eduardo Silva +Date: Mon Apr 6 17:09:33 2015 -0600 + + Build: CMake: add support for --includedir/-DINSTALL_INCLUDEDIR + + Signed-off-by: Eduardo Silva + +commit b6ffe187675f028a1d6d0b6688155e247855fb55 +Author: Eduardo Silva +Date: Mon Apr 6 16:52:10 2015 -0600 + + Build: CMake: fix mimetypes installation + + Signed-off-by: Eduardo Silva + +commit 31c7db4f327773fec8ee76c5ad81187c31e3097c +Author: Eduardo Silva +Date: Mon Apr 6 16:48:46 2015 -0600 + + Build: CMake: add support for --webroot/-DINSTALL_WEBROOTDIR + + Signed-off-by: Eduardo Silva + +commit 29599e4beb508996bbb889ba1151f90440988f39 +Author: Eduardo Silva +Date: Mon Apr 6 16:27:41 2015 -0600 + + Build: CMake: add support for --pidfile/-DPID_FILE + + Signed-off-by: Eduardo Silva + +commit f9d7c6e2e8d5a090c26c86dc737682f87967fa3f +Author: Eduardo Silva +Date: Mon Apr 6 16:17:23 2015 -0600 + + Build: CMake: add support for --logdir/-DINSTALL_LOGDIR + + Signed-off-by: Eduardo Silva + +commit 690e68ad3589c6d34e0c98f417481d8599ffad15 +Author: Eduardo Silva +Date: Mon Apr 6 16:06:12 2015 -0600 + + Man: drop unused man pages + + Signed-off-by: Eduardo Silva + +commit cfb1cbb847dfa692f7a0bbd75290a614006954f5 +Author: Eduardo Silva +Date: Mon Apr 6 16:03:56 2015 -0600 + + Build: CMake: extend support for install libs and others + + Signed-off-by: Eduardo Silva + +commit 3d17830ca7a18d4dda34be183e7d7e897730a347 +Author: Eduardo Silva +Date: Mon Apr 6 10:27:44 2015 -0600 + + Build: CMake: generate plugins.load on plugins/CMakeLists.txt rules + + Signed-off-by: Eduardo Silva + +commit 4ccab82c3d38c27b995ab031768d428e3142f17c +Author: Eduardo Silva +Date: Sun Apr 5 22:55:49 2015 -0600 + + Build: CMake: improve config files decls and fix static linking + + Signed-off-by: Eduardo Silva + +commit fbdf82de06459fe8b6d3bc6fc464a278ee3614c9 +Author: Eduardo Silva +Date: Sat Apr 4 19:29:56 2015 -0600 + + CI: fix script line + + Signed-off-by: Eduardo Silva + +commit 733acfe88a05b23851a920738b497410396ce44b +Author: Eduardo Silva +Date: Sat Apr 4 19:26:35 2015 -0600 + + Build: Memory: fixes on CMake for Jemalloc + + Signed-off-by: Eduardo Silva + +commit fe4a2d48c564b0066036ae6d00730cf5b90f6c66 +Author: Eduardo Silva +Date: Sat Apr 4 18:47:42 2015 -0600 + + Liana: add missing CMakeLists.txt file + + Signed-off-by: Eduardo Silva + +commit 2bf4ab6a26dd402d8a9f60aa013d083683f8dcba +Author: Eduardo Silva +Date: Sat Apr 4 18:45:51 2015 -0600 + + Build: add root Makefile helper + + Signed-off-by: Eduardo Silva + +commit 09c6b2ab6fc31ed1d8c2f476e7a735cdb90a5ce0 +Author: Eduardo Silva +Date: Sat Apr 4 18:43:35 2015 -0600 + + Cheetah: add missing CMakeLists.txt file + + Signed-off-by: Eduardo Silva + +commit 2d2d0a9c27e8fdfe8ef9fe8f350eed886c986891 +Author: Eduardo Silva +Date: Sat Apr 4 18:40:07 2015 -0600 + + Build: CMake: fixes on MK_BUILD_PLUGIN macro + + Signed-off-by: Eduardo Silva + +commit 6f994da1c8d0712d3518df3e2d07bd89d22e7da0 +Author: Eduardo Silva +Date: Sat Apr 4 18:18:29 2015 -0600 + + Build: CMake: fixes on data to stdout + + Signed-off-by: Eduardo Silva + +commit 206e1d0a6ba148abeb1c1e40f061ee40e078208a +Author: Eduardo Silva +Date: Fri Apr 3 22:40:10 2015 -0600 + + Build: CMake: support enable,disable and static plugins. Configure script stripped! + + Signed-off-by: Eduardo Silva + +commit 1e4d9432fae2e9b6b0d5dae44846985c4d0ed353 +Author: Eduardo Silva +Date: Fri Apr 3 16:04:23 2015 -0600 + + Build: CMake: add definitions and support for Jemalloc as external dependency + + Signed-off-by: Eduardo Silva + +commit 775c187e07750a91831fb9c646a1f04120b2990e +Author: Eduardo Silva +Date: Fri Apr 3 14:28:48 2015 -0600 + + Plugin: remove old proxy_reverse plugin + + Signed-off-by: Eduardo Silva + +commit 79c046f854c96fd030a344c5a137d867a8231fc0 +Author: Eduardo Silva +Date: Fri Apr 3 14:28:22 2015 -0600 + + CMake: remove old reference to unused plugin + + Signed-off-by: Eduardo Silva + +commit 52b8ca8f6a77c9f7f1b589fbdfe749290cebf48d +Author: Eduardo Silva +Date: Fri Apr 3 14:23:56 2015 -0600 + + Mandril: add build/cmake support + + Signed-off-by: Eduardo Silva + +commit a3e21879c97f0b8f4d1b91ab25a7b7c45110dc7a +Author: Eduardo Silva +Date: Fri Apr 3 14:22:15 2015 -0600 + + Log Writer: add build/cmake support + + Signed-off-by: Eduardo Silva + +commit 5b23faef2dfa9a463f328e79eed5451043e3eab2 +Author: Eduardo Silva +Date: Fri Apr 3 14:18:13 2015 -0600 + + Directory Listing: add build/cmake support + + Signed-off-by: Eduardo Silva + +commit a6dcfe002a15b6cb434d9c5ea608d5c6636f1861 +Author: Eduardo Silva +Date: Fri Apr 3 14:15:33 2015 -0600 + + Cheetah: add build/cmake support + + Signed-off-by: Eduardo Silva + +commit 17c41f42e548c3233c9b577ff66bf64dab4d7b29 +Author: Eduardo Silva +Date: Fri Apr 3 14:10:41 2015 -0600 + + CGI: add build/cmake support + + Signed-off-by: Eduardo Silva + +commit 0610a5355103e1bb1d70bf321fd36cbc15b428e1 +Author: Eduardo Silva +Date: Fri Apr 3 14:04:32 2015 -0600 + + Build: CMake: Plugins: drop library prefix 'lib' from shared targets + + Signed-off-by: Eduardo Silva + +commit 70228379c2bee857bc12a6d576e7ee0b83b42d31 +Author: Eduardo Silva +Date: Fri Apr 3 13:00:43 2015 -0600 + + Liana: add build/cmake support + + Signed-off-by: Eduardo Silva + +commit ad2d252fcf1efd1412fe40ad480e91564152d6d6 +Author: Eduardo Silva +Date: Fri Apr 3 12:58:22 2015 -0600 + + Build: CMake: support to build plugins + + Signed-off-by: Eduardo Silva + +commit 93bc2b199b2e8e1c06e09ae0dc224e6f0fbb9e38 +Author: Eduardo Silva +Date: Fri Apr 3 11:10:30 2015 -0600 + + Build: CMake: generate mk_env.h using a template + + Signed-off-by: Eduardo Silva + +commit a6534a25d0f0907ebdeea5b55efb97d3f5248632 +Author: Eduardo Silva +Date: Thu Apr 2 14:25:22 2015 -0600 + + Core: use new definitions from CMake + + Signed-off-by: Eduardo Silva + +commit 33349e41c421dcf8cc8886f9fd0cd509855f77e7 +Author: Eduardo Silva +Date: Thu Apr 2 13:50:44 2015 -0600 + + Build: CMake: generate conf/sites/default using a template + + Signed-off-by: Eduardo Silva + +commit 4abab291cd9fb6b2ad734e170d15dbb792a1bfd6 +Author: Eduardo Silva +Date: Thu Apr 2 13:40:36 2015 -0600 + + Build: CMake: generate monkey.conf using a template + + Signed-off-by: Eduardo Silva + +commit 0b8d21efee1ff13b9e4e09cf284503e76b3f415c +Author: Eduardo Silva +Date: Thu Apr 2 13:22:43 2015 -0600 + + Build: CMake: generate mk_info.h + + Signed-off-by: Eduardo Silva + +commit eb7a77215a866e8ea7b12260938397cb4ac102b2 +Author: Eduardo Silva +Date: Thu Apr 2 12:56:03 2015 -0600 + + Build: start migration to CMake (yes, I changed my mind) + + This patch adds the first changes of the migration from the old + bash build system to a compatible CMake. + + This is still work in process and it aims to keep a generic 'configure' + script with the same options than before but it uses CMake in the + backend to validate dependencies and generate the Makefiles. + + I will explain later why I changed my mind about this in blog post, for + now there is a lot of work to do. :) + + Signed-off-by: Eduardo Silva + +commit 251e33194263ab22b9cf67c632007f484a9e1ae5 +Author: Eduardo Silva +Date: Wed Mar 25 17:46:58 2015 -0700 + + File: new 'mode' flag for file_get_info() + + this patch adds a new flag to the file_get_info() function to determinate + which kind of permission the caller want to check. + + It also modify all callers in the core and plugins. + + Signed-off-by: Eduardo Silva + +commit 007f681c1d6b87e3221afb1a51297087f0d6bc5d +Author: Eduardo Silva +Date: Mon Mar 9 09:30:26 2015 -0600 + + Stream: fix debug function for OSX + + Signed-off-by: Eduardo Silva + +commit 405ca7483bf6ba436c93c86b8d99533bcb54c39b +Author: Eduardo Silva +Date: Mon Mar 9 09:15:11 2015 -0600 + + Header: fix CORK usage on OSX + + Signed-off-by: Eduardo Silva + +commit 7e08773fe192ab083e23b15b78e86fed3669b641 +Author: Eduardo Silva +Date: Mon Mar 9 09:13:04 2015 -0600 + + Socket: move socket_accept at the end to avoid func declaration problems + + Signed-off-by: Eduardo Silva + +commit e0d713a4679b8b78b948f8090e1d547889dec3be +Author: Eduardo Silva +Date: Mon Mar 9 08:53:30 2015 -0600 + + Build: move -rdynamic to linker LDFLAGS variable + + Signed-off-by: Eduardo Silva + +commit 3f7d9be01d8941d5aa8dae34d2c46664c1e43950 +Author: Eduardo Silva +Date: Sun Mar 8 22:13:01 2015 -0600 + + Stream: set fmt default for trace mode + + Signed-off-by: Eduardo Silva + +commit bfaddc73e70e11b9e5a0142bc86377d669aa1cb1 +Author: Eduardo Silva +Date: Sun Mar 8 22:07:32 2015 -0600 + + CI: disable CGI and FastCGI on Travis + + Signed-off-by: Eduardo Silva + +commit 72babe73941ca87d4eb6678842d710f8dbfc3442 +Author: Eduardo Silva +Date: Sun Mar 8 21:38:00 2015 -0600 + + Socket: remove unused tcp_autocorking() function + + Signed-off-by: Eduardo Silva + +commit 05538a448de1c1a17f97f07576b9882d3e04ebda +Author: Eduardo Silva +Date: Mon Mar 2 14:49:22 2015 -0600 + + Scheduler: fix wrong handling of incoming queue. + + Under high load with many invalid (not finished) connections, the + scheduler incoming queue may generate invalid references. + + This patch solves the problem validating the sched node status. + + Signed-off-by: Eduardo Silva + +commit 0db2a4be943a04b0f1a238af9c5a79bfce9b7d79 +Author: Eduardo Silva +Date: Sun Mar 8 19:51:58 2015 -0600 + + Debian: remove old references of libmonkey + + Signed-off-by: Eduardo Silva + +commit f2d96fbd630817606a66f895894fc560d8acd49c +Author: Eduardo Silva +Date: Sun Mar 8 19:49:41 2015 -0600 + + Lib: more cleanup from headers + + Signed-off-by: Eduardo Silva + +commit 2b5d00774b539fb87123359f85658677d263c6f1 +Author: Eduardo Silva +Date: Sun Mar 8 19:44:42 2015 -0600 + + Lib: remove old SHAREDLIB macros and perform some headers cleanup + + Signed-off-by: Eduardo Silva + +commit 66949bc6f43cb0c79cf9ff66b44c4bcefd45d2e8 +Author: Eduardo Silva +Date: Sun Mar 8 19:26:51 2015 -0600 + + Plugin: silence some compiler warnings + + Signed-off-by: Eduardo Silva + +commit f60bc7302539b17670c82712795244ee7777dbd1 +Author: Eduardo Silva +Date: Sun Mar 8 19:19:03 2015 -0600 + + Mandril: fix headers + + Signed-off-by: Eduardo Silva + +commit 3fa454adb8ecd9c42945545f27b2f52ef93c446e +Author: Eduardo Silva +Date: Sun Mar 8 19:17:52 2015 -0600 + + Logger: fix headers + + Signed-off-by: Eduardo Silva + +commit 2dda685cecd01674f431eedd30d23bfd7e5bffe2 +Author: Eduardo Silva +Date: Sun Mar 8 19:16:48 2015 -0600 + + FastCGI: fix headers and disable until check it works with new API + + Signed-off-by: Eduardo Silva + +commit f5317ee11ecf79840e6cbb6e1276b50fc5ea08dc +Author: Eduardo Silva +Date: Sun Mar 8 19:09:17 2015 -0600 + + Cheetah: fix headers + + Signed-off-by: Eduardo Silva + +commit 115039f61b2fd584b0bf11c283eacc1cabbf2a48 +Author: Eduardo Silva +Date: Sun Mar 8 19:07:38 2015 -0600 + + CGI: fix headers and disable plugin until new API takes place + + Signed-off-by: Eduardo Silva + +commit 271811e7c3ec0ae6618c52fe2cc5d6561f2b019d +Author: Eduardo Silva +Date: Sun Mar 8 19:05:34 2015 -0600 + + Auth: fix headers + + Signed-off-by: Eduardo Silva + +commit 69511b932f1120e867dea14b519681d06ded99d1 +Author: Eduardo Silva +Date: Sun Mar 8 19:00:44 2015 -0600 + + Lib: deprecate library implementation. + + This patch removes the library mode as in the next changes Monkey + will become a library it self. + + Signed-off-by: Eduardo Silva + +commit 8fc94330ed321b8d5c503e7e714a78907674672d +Author: Eduardo Silva +Date: Sun Mar 8 18:57:00 2015 -0600 + + Headers: fix server name + + Signed-off-by: Eduardo Silva + +commit 86b3e938f55f1d012aa913bfa3f07fa886b91b66 +Author: Eduardo Silva +Date: Sun Mar 8 18:51:19 2015 -0600 + + Core: Network: move accept callback to the core. + + This patch deprecate the accept() callback from networking plugins + and place the functionality directly on the mk_server.c code through + an inclusion of mk_socket.h (static inline). + + It also perform some headers declaration fixes to align to the change + described. + + Signed-off-by: Eduardo Silva + +commit ffd5f5eae81723b7015b2c3ff3157592ff8ae148 +Author: Eduardo Silva +Date: Sun Mar 8 17:39:26 2015 -0600 + + Directory Listing: align streams structs declarations + + Signed-off-by: Eduardo Silva + +commit b480ec3e32bb9fb24297fbc25cda5e261504660b +Author: Eduardo Silva +Date: Sun Mar 8 17:38:02 2015 -0600 + + Core: Stream: use structs instead of typedef + + Signed-off-by: Eduardo Silva + +commit f8b8d5781a07cc322e1b9a2e3e9c8410dba90967 +Author: Eduardo Silva +Date: Sun Mar 8 17:34:37 2015 -0600 + + Directory Listing: enable chunked encoding (not functional yet) + + Signed-off-by: Eduardo Silva + +commit f38c68f8c9c8ada20bb29508d849caa8f810bce5 +Author: Eduardo Silva +Date: Sun Mar 8 16:02:53 2015 -0600 + + Directory Listing: update API to use new Monkey streams. + + this patch modify the directory listing plugin to use the new streams + mechanism, it works in async mode but it still requires the following + improvements: + + - Enable Chunked-Transfer encoding once the core start supporting it. + - Improve entries handling and enqueue N instead of 1 per write event. + + Signed-off-by: Eduardo Silva + +commit 00482feeee753e396ae7664675e2b3a93be87110 +Author: Eduardo Silva +Date: Sat Mar 7 14:19:02 2015 -0600 + + Stream: fix initialization and streams linking + + Signed-off-by: Eduardo Silva + +commit 4ac4bcc60010f96893cedff3327b03bc9e119854 +Author: Eduardo Silva +Date: Mon Jan 26 20:59:27 2015 -0600 + + Stream: accept custom 'data' by reference in functions + + Signed-off-by: Eduardo Silva + +commit 0c5d113bce0cb3b4396e6dfc4f5734a8a691bd66 +Author: Eduardo Silva +Date: Mon Jan 26 20:54:00 2015 -0600 + + Stream: new 'data' field for custom references + + Signed-off-by: Eduardo Silva + +commit 0e37bc34d825acf9a9265d90f7e83331d4027f8b +Author: Eduardo Silva +Date: Mon Jan 26 20:52:43 2015 -0600 + + Stream: rename data field as 'buffer' + + Signed-off-by: Eduardo Silva + +commit 4f330264ba340a8d3ffc8c0241624cca1a3d5ddb +Author: Eduardo Silva +Date: Mon Jan 26 18:09:35 2015 -0600 + + Plugin: fix exit_all handler + + Signed-off-by: Eduardo Silva + +commit b252648ddd1e7382fa55ababa33abdf21839e641 +Author: Eduardo Silva +Date: Mon Jan 26 08:53:44 2015 -0600 + + HTTP: fix redirection for missing ending slash on directory request + + Signed-off-by: Eduardo Silva + +commit 0ce6955f31e354a384d0ec3fc852ed1f713ec874 +Author: Eduardo Silva +Date: Mon Jan 26 08:14:57 2015 -0600 + + IOV: deprecate MK_IOV_ macros, use Monkey MK_TRUE/MK_FALSE + + Signed-off-by: Eduardo Silva + +commit 00f15d2950bfd95bf9668dccb2d461efb0d4d738 +Author: Eduardo Silva +Date: Mon Jan 26 03:49:08 2015 -0600 + + Stream: on HTTP static file, set the Stream Channel. + + This patch fixes a problem when disabling the TCP_CORK. The Stream + did not contain the channel reference. + + Signed-off-by: Eduardo Silva + +commit bb0719c67fe76a3d93df866314002e90a3c6df73 +Author: Eduardo Silva +Date: Fri Jan 23 12:50:36 2015 -0600 + + Auth: use new Streams API to send headers response + + Signed-off-by: Eduardo Silva + +commit edc0d1a7825ee91924aa35182ee08f43810e6374 +Author: Eduardo Silva +Date: Fri Jan 23 12:48:03 2015 -0600 + + Plugin/API: export Channel/Stream API + + Signed-off-by: Eduardo Silva + +commit 1f5a90489c51e7a2cfd48bbea80c3e5e290c3fbd +Author: Eduardo Silva +Date: Fri Jan 23 12:18:40 2015 -0600 + + Auth: fix server signature usage + + Signed-off-by: Eduardo Silva + +commit 512fd58c9c0435d7433a4649286ae11acf0e1aec +Author: Eduardo Silva +Date: Fri Jan 23 12:14:42 2015 -0600 + + Plugin: disable shortname plugin on trace + + Signed-off-by: Eduardo Silva + +commit dfdc4d5f323c6485c5009f0c317560ef579078a5 +Author: Eduardo Silva +Date: Fri Jan 23 12:07:21 2015 -0600 + + HTTP: mark two variables as unused + + Signed-off-by: Eduardo Silva + +commit 6e4e916851d61630ed72c7cbd8aa435f94fb3df3 +Author: Eduardo Silva +Date: Fri Jan 23 10:56:34 2015 -0600 + + Core: on server exit, fix some minor leaks. + + - Mimetype headers + - MK Event loops (epoll/kqueue) + + Signed-off-by: Eduardo Silva + +commit 00a64181f4987139ac2e5df23ce6abfa6c5cb0cb +Author: Eduardo Silva +Date: Fri Jan 23 08:50:01 2015 -0600 + + Core: new option -I, --pid-file to override PID file path set by configuration (Ref #173) + + Signed-off-by: Eduardo Silva + +commit 2ba417f2ee344f4981b819b6a2cfde05b65597f3 +Author: Eduardo Silva +Date: Fri Jan 23 08:31:25 2015 -0600 + + Core: Check Listeners at start (Fix #173). + + This patch implements a new mechanism to test if a Listener interface and + TCP port are already in use through a basic TCP connection. This check + is required as the sockets can be in shared mode (SO_REUSEPORT) we need + to be aware if other Monkey instance is already running. + + If the test claims there is an interface busy, it will abort. But we give + the user a new option '-T' to override this failure and proceed anyways. + + Signed-off-by: Eduardo Silva + +commit f4b57a5016a19a1cdc8bcff65599bea69cfda4c5 +Author: Eduardo Silva +Date: Thu Jan 22 18:09:01 2015 -0600 + + Server: scheduler mode is now optional and other improvements. + + - scheduler mode is optional using new -B argument. + - balancer use monkey event API to handle connections. + - code cleanup. + + Signed-off-by: Eduardo Silva + +commit d308add756c75bf9b081f81d5af4cbd8b95a1c66 +Merge: 7549514 1fa31d3 +Author: Eduardo Silva +Date: Fri Jan 16 23:28:32 2015 -0600 + + Merge branch 'streams2' + +commit 1fa31d3b97714923cb63f9a8abfb4279acbf9664 +Author: Eduardo Silva +Date: Fri Jan 16 23:18:10 2015 -0600 + + Core: improve stream handling and Cork options (KeepAlive slow) + + this patch makes improvements when using the streams to dispatch responses. As + well it take care of the right usage pf TCP_CORK (Linux) and TCP_NOPUSH (OSX). + + KeepAlive mode is running with a delay between each request, still work in + process. + + Signed-off-by: Eduardo Silva + +commit 754951414210e3496ebcb725637c2bb56ebc12bd +Author: Eduardo Silva +Date: Sat Jan 10 09:28:29 2015 -0600 + + HTTP: Parser: optimize performance, try to catch protocol version by chars check + + Signed-off-by: Eduardo Silva + +commit cfd4bcf1d5d040f9d4a4eebe32a54ec74d5f1f1e +Author: Eduardo Silva +Date: Fri Jan 9 10:00:14 2015 -0600 + + Clock: Header: pre-set Server and Date headers, reduce one mk_iov + + Signed-off-by: Eduardo Silva + +commit bc653cadc2ffaf8dd657b6c6960e23e6f4bc6cfc +Author: Eduardo Silva +Date: Fri Jan 9 09:22:49 2015 -0600 + + Core: move server signature to global config struct + + Signed-off-by: Eduardo Silva + +commit 1ba2aa963d906d71bf44952f611a98aeb836a90c +Author: Eduardo Silva +Date: Thu Jan 8 16:06:53 2015 -0600 + + HTTP: Parser: pack structure and remove alignment + + Signed-off-by: Eduardo Silva + +commit 481cd277a6a46c974e3412121b0cf5e038095520 +Author: Eduardo Silva +Date: Thu Jan 8 15:52:21 2015 -0600 + + HTTP: Parser: do pre-rolling check on header comparisson, performance improvement + + Signed-off-by: Eduardo Silva + +commit ae6711912995c0f2fe0d4991ecc4f109b674830f +Author: Eduardo Silva +Date: Thu Jan 8 13:23:47 2015 -0600 + + API: remove old plugin (MK_EXPORT) declarations + + Signed-off-by: Eduardo Silva + +commit 3397d97cfddcfc829511416e7095e295ebe192b0 +Author: Eduardo Silva +Date: Tue Jan 6 23:04:21 2015 -0600 + + Core: dispatch headers and static files using Streams + + Signed-off-by: Eduardo Silva + +commit 5cfaf8967d535cea95d3d4f540e9ee2cd1003816 +Author: Eduardo Silva +Date: Mon Jan 5 21:21:52 2015 -0600 + + Streams: initial implementation of Streams and Channels. + + This patch implement the Streams concept which will be the interface + to enqueue and dispatch data. + + Taken from a conversation with Sonny over email, here is the description: + + "I think this is the point where the Channel concept joins, a socket is + represented at high level by a Channel, which contains the references + to the callbacks for each event and also the transport layer to be used, + and who handle Channel events is the Scheduler. + + A Channel have two directions IN/OUT and each one managed by a list of + Streams: socket, iov, raw buffer, etc." + + Signed-off-by: Eduardo Silva + +commit 8a8abb2f36a62381f7f55147e174178bf809c715 +Author: Eduardo Silva +Date: Sun Jan 4 20:55:42 2015 -0600 + + Plugin: deprecate old stage_run routines + + Signed-off-by: Eduardo Silva + +commit f615e9625e7976c1ba20b4bfa5edeb1b7f07cc66 +Author: Eduardo Silva +Date: Sun Jan 4 17:17:03 2015 -0600 + + Core: support new PTHREAD_TLS mode + + Monkey support threads, and when sharing global data on each worker it does + it by using the Compiler TLS (Thread Local Storage) feature. + + TLS is a compiler specific feature, it works on GCC and CLANG. As it can be + considered a *new* feature on compilers, some legacy compiler versions or + custom toolchains for Embedded do not come with that feature. + + This patch adds a new option called PTHREAD_TLS that can be enabled on the + configure script through the --pthread-tls option. When enabled, instead + of TLS, Monkey will use Pthread Keys for the same purpose. + + Signed-off-by: Eduardo Silva + +commit 0ecc932cb877831c539a01e3a57c3673b3333d62 +Author: Eduardo Silva +Date: Sun Jan 4 20:33:48 2015 -0600 + + Liana: remove unused header reference + + Signed-off-by: Eduardo Silva + +commit 4db8df50271207b06dedb6f1a09a3e4e57d654c5 +Author: Eduardo Silva +Date: Sun Jan 4 17:26:07 2015 -0600 + + Build: use environment variable to set AR + + Signed-off-by: Eduardo Silva + +commit d59d7db6ae8d1f89e120464938ad61415bd58722 +Author: Eduardo Silva +Date: Sun Jan 4 13:40:56 2015 -0600 + + Logger: use new mk_iov API + + Signed-off-by: Eduardo Silva + +commit 03989f4bdb91cca890cf42098907de1b2dda1790 +Author: Eduardo Silva +Date: Sun Jan 4 12:32:25 2015 -0600 + + Configure: detect STATIC Plugins by default + + Signed-off-by: Eduardo Silva + +commit e99756f3253542566ddc3e9219c978852576cbfe +Author: Eduardo Silva +Date: Sat Jan 3 10:45:15 2015 -0600 + + HTTP: Parser: improve method lookup for known methods + + Signed-off-by: Eduardo Silva + +commit 3c463a34eee1223fb7b3b8d0d220cdbefb82b998 +Author: Eduardo Silva +Date: Sat Jan 3 09:30:46 2015 -0600 + + IOV: remove separators implementation + + Signed-off-by: Eduardo Silva + +commit d262dace63e389ddeb468ca1540cb1abf0849b57 +Author: Eduardo Silva +Date: Sat Jan 3 08:53:04 2015 -0600 + + Core: Plugin: separate stage_run routines + + Signed-off-by: Eduardo Silva + +commit 348f972ba4117c0213c78ccc8a2cea52dfafe470 +Author: Eduardo Silva +Date: Sat Jan 3 00:25:58 2015 -0600 + + HTTP: restore performance on Linux for small static files. + + Later on 2014 Monkey performance got decreased when serving few bytes + of data on Linux. A fix for OSX generated a performance issue on Linux + that is only faced when mixing sendfile(2) and TCP_CORK. + + This patch implements the fix for Linux, now it increased performance + up to ~24% when serving small static files. Monkey is rocking again :) + + Signed-off-by: Eduardo Silva + +commit d796c9ca2081368bdd2bb9c4a83c74098402175d +Author: Eduardo Silva +Date: Fri Jan 2 23:32:26 2015 -0600 + + Headers: optimize composer of response headers + + Signed-off-by: Eduardo Silva + +commit 66bff035168d835ff87ee8bb6fe771effd3d11ec +Author: Eduardo Silva +Date: Fri Jan 2 22:58:32 2015 -0600 + + HTTP: Parser: after first header key character check, do a continue + + Signed-off-by: Eduardo Silva + +commit bced74cb1b81bdd4823825ccc9e4e53dd207da6a +Author: Eduardo Silva +Date: Fri Jan 2 22:42:57 2015 -0600 + + HTTP: Parser: on CR, try to catch LF if there are some remaining bytes to check + + Signed-off-by: Eduardo Silva + +commit ecf23216d71005e930aa980de738961bb4dbb267 +Author: Eduardo Silva +Date: Fri Jan 2 22:20:34 2015 -0600 + + Configure: fix static plugins code generator + + Signed-off-by: Eduardo Silva + +commit c71d9fcf03a35de5d4e0acc7a3c7bc0b0e64c625 +Author: Eduardo Silva +Date: Fri Jan 2 21:22:47 2015 -0600 + + Core: global confix context rename from 'config' to 'mk_config' + + Signed-off-by: Eduardo Silva + +commit 9fa29382bb73e4c5bec2e8bdf7b46ee1cdd9c255 +Author: Eduardo Silva +Date: Thu Jan 1 10:18:49 2015 -0600 + + Copyright: welcome 2015! + + Signed-off-by: Eduardo Silva + +commit d5ba99de550c7385d65afe23e16b412ede2d2cea +Author: Eduardo Silva +Date: Wed Dec 31 17:22:45 2014 -0600 + + Logger: fix callbacks for local worker + + Signed-off-by: Eduardo Silva + +commit da599328f589ad681da90a2f84b7d1c73ddf3db8 +Author: Eduardo Silva +Date: Wed Dec 31 17:18:38 2014 -0600 + + FastCGI: fix declarations + + Signed-off-by: Eduardo Silva + +commit 5a16b1882821032d8f2622eed8c8f243235fe6f6 +Author: Eduardo Silva +Date: Wed Dec 31 17:16:02 2014 -0600 + + Plugin: allow plugins without direct hook type + + Signed-off-by: Eduardo Silva + +commit 21bd9a16408ca21ea92e5353819dee7c8d0eaab8 +Author: Eduardo Silva +Date: Wed Dec 31 17:05:15 2014 -0600 + + Logger: fix pointer initialization + + Signed-off-by: Eduardo Silva + +commit ef95e85a72beeac780fb66795e62d9f53a411cba +Author: Eduardo Silva +Date: Wed Dec 31 17:02:01 2014 -0600 + + Mandril: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit dfd9994cc60e5ff498b0cbf7198749d9499fe2d3 +Author: Eduardo Silva +Date: Wed Dec 31 16:54:25 2014 -0600 + + Logger: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit d658b432cfaa70c8991f04915b42a2244bedb405 +Author: Eduardo Silva +Date: Wed Dec 31 16:42:33 2014 -0600 + + FastCGI: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit d5553e62da6c634b6e5ff505f3f087bddc8b1471 +Author: Eduardo Silva +Date: Wed Dec 31 15:05:47 2014 -0600 + + CI: Disable library mode on Travis + + Signed-off-by: Eduardo Silva + +commit 1aefdc9430e46ef573c2f0a34e1f658442059f5e +Author: Eduardo Silva +Date: Wed Dec 31 15:05:00 2014 -0600 + + Dirlisting: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit 2abfc62e7d24f67b191d1d893a98daaf04def470 +Author: Eduardo Silva +Date: Wed Dec 31 14:56:45 2014 -0600 + + Plugin: restore stage macros + + Signed-off-by: Eduardo Silva + +commit 701cefe16c89490b961c003d0636751b48fb81de +Author: Eduardo Silva +Date: Wed Dec 31 14:55:39 2014 -0600 + + Cheetah: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit 6dd04787f72fe1ec3830813e4b9acc65240afd71 +Author: Eduardo Silva +Date: Wed Dec 31 13:46:59 2014 -0600 + + CGI: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit 4523f0b3a3486095797af51984ada700ac64ebd1 +Author: Eduardo Silva +Date: Wed Dec 31 13:34:10 2014 -0600 + + Core: Plugin: re-implement stages setup and callbacks + + Signed-off-by: Eduardo Silva + +commit d1ee9d2836336cfbe13aa4f9ac6bf8765bb1e3c3 +Author: Eduardo Silva +Date: Tue Dec 30 14:47:04 2014 -0600 + + Core: Plugin: remove old structures for plugins + + Signed-off-by: Eduardo Silva + +commit de6102471a27ab5cff5ceb583aa562c05e89d79a +Author: Eduardo Silva +Date: Tue Dec 30 11:43:53 2014 -0600 + + Auth: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit f345bd2b48846a962da66d4a6448d5c995b1cefe +Author: Eduardo Silva +Date: Tue Dec 30 11:19:03 2014 -0600 + + Plugins: remove old API.txt doc file + + Signed-off-by: Eduardo Silva + +commit 59fbe838e53b68673a9fbbf5de66dad6e445c144 +Author: Eduardo Silva +Date: Tue Dec 30 11:14:49 2014 -0600 + + PolarSSL: migrate plugin schema to new model (support static linking) + + Signed-off-by: Eduardo Silva + +commit 79a8a90137e316152a3ad312a56bfcdab046a04d +Author: Eduardo Silva +Date: Mon Dec 29 23:43:55 2014 -0600 + + Config: do not warn on Sections without keys + + Signed-off-by: Eduardo Silva + +commit 9e64323f73c9785e51c509187eaf68fb8a21dc7b +Author: Eduardo Silva +Date: Mon Dec 29 23:39:43 2014 -0600 + + Core: Plugin: load dynamic and static plugins + + This patch makes able to load plugins in static or dynamic mode + for those who provides a NETWORK_LAYER (Liana on this case). + + Signed-off-by: Eduardo Silva + +commit 0c37330d7bc03d9910c1295f1945346be18fc72c +Author: Eduardo Silva +Date: Sun Dec 28 20:25:33 2014 -0600 + + Core: Plugin: Let build system hook static plugins + + This patch implements a new option on the configure script called 'static_plugins=' + where is possible to define which plugins will be build in static mode. Also the + core is able to detect the statics and link them in the global configuration. + + More work is required, but this is a good progress. Just tested on Liana plugin. + + Signed-off-by: Eduardo Silva + +commit 241964ca3180606fe6f1ca3762c115841020ba97 +Author: Eduardo Silva +Date: Sun Dec 28 09:41:10 2014 -0600 + + Liana: Build: add static build support + + Signed-off-by: Eduardo Silva + +commit ea4e2c1d51438aaab839fe943c3c668734dfb74a +Author: Eduardo Silva +Date: Sat Dec 27 16:37:20 2014 -0600 + + Core: Plugin: Network layer functional in workaround mode + + This patch makes Liana work with the new plugin mechanism. More + work is required to re-enable stages and hooks for other plugins. + + Signed-off-by: Eduardo Silva + +commit 36efede314d2d66c6876bdb76070e943be63108b +Author: Eduardo Silva +Date: Thu Dec 25 22:53:28 2014 -0600 + + Core: Plugin: new draft of plugin mechanism (wip) + + This patch adds a new mechanism to load plugins, at the moment it only + do some partial replacements over the Liana plugin adding a new structure + to define callbacks for certain I/O network operations. + + note: work in process. + + Signed-off-by: Eduardo Silva + +commit e8100255efb586abe26978e41be69950b99859d9 +Author: Eduardo Silva +Date: Thu Dec 25 17:18:01 2014 -0600 + + Mandril: use new Monkey structures to handle sessions and requests + + Signed-off-by: Eduardo Silva + +commit f085ed3e75f815366385f53f81e901d56047dc89 +Author: Eduardo Silva +Date: Wed Dec 24 15:20:18 2014 -0600 + + Logger: use new Monkey structures to handle sessions and requests + + Signed-off-by: Eduardo Silva + +commit 2f66a51dcc3ad6b5d1dfde440f5266583f480f9c +Author: Eduardo Silva +Date: Wed Dec 24 15:19:11 2014 -0600 + + FastCGI: iterate headers using new Parser Headers list + + Signed-off-by: Eduardo Silva + +commit cbb361e6af331ea169106beae80162eb67617355 +Merge: 16be561 307a10f +Author: Eduardo Silva +Date: Wed Dec 24 14:59:11 2014 -0600 + + Merge branch 'fastcgi_upgrade' + +commit 16be561926ce5b1406c228b1c76b8c87533a8b4e +Author: Eduardo Silva +Date: Wed Dec 24 14:56:32 2014 -0600 + + HTTP: Parser: register headers in a parser linked list + + This patch implements a linked list in the parser so when a known header + or extra headers are found, they are linked to the list so any plugin + can iterate them without problems. + + Signed-off-by: Eduardo Silva + +commit 307a10f31f8425fd6a0c00de6145f0d0c328ee56 +Author: Eduardo Silva +Date: Wed Dec 24 14:47:32 2014 -0600 + + FastCGI: use new Monkey structures to handle sessions and requests + + Signed-off-by: Eduardo Silva + +commit ca3273b5ca3617f378f4c71f66eb4f6a4108b22b +Author: Eduardo Silva +Date: Wed Dec 24 13:36:22 2014 -0600 + + Dirlisting: use new Monkey structures to handle sessions and requests + + Signed-off-by: Eduardo Silva + +commit f10d6eaeb91fff4b854dcab133829516cd2262a0 +Author: Eduardo Silva +Date: Wed Dec 24 13:33:51 2014 -0600 + + CGI: use new Monkey structures to handle sessions and requests + + Signed-off-by: Eduardo Silva + +commit b4b0202dfc9a022b99f33ae9dbd26eee42fb8e1f +Author: Eduardo Silva +Date: Wed Dec 24 13:30:49 2014 -0600 + + Auth: use new HTTP Parser API to manage Authorization header + + Signed-off-by: Eduardo Silva + +commit e3c59ac5b8702e74286ce17f8efa2c87e233046a +Author: Eduardo Silva +Date: Wed Dec 24 11:59:37 2014 -0600 + + HTTP: Fix Content-Length array index + + This patch fix a static workaround implemented to by pass a double + definitions of headers strings, it basically did two things: + + 1. Use the MK_HEADER_CONTENT_LENGTH macro + 2. On header.h move some definitions to the .c file + + Signed-off-by: Eduardo Silva + +commit ee783ad26b9bb97602e66d4c5ac4c78cc7210861 +Author: Eduardo Silva +Date: Mon Dec 22 00:23:35 2014 -0600 + + HTTP: Parser: add lookup support for 'Cache-Control' header + + Signed-off-by: Eduardo Silva + +commit b0ed0172fc6b1cc27b7cae387b53e388fd182d29 +Author: Eduardo Silva +Date: Sun Dec 21 23:52:38 2014 -0600 + + Core: make header_get() usable with new parser internals + + Signed-off-by: Eduardo Silva + +commit 4aba21b6db2213150c945e5af467a000e5980d10 +Author: Eduardo Silva +Date: Sat Dec 20 23:06:35 2014 -0600 + + HTTP: Parser: initialize headers_extra_count field with zero + + Signed-off-by: Eduardo Silva + +commit 0d3575fa7bf63c5777c30e4270fcc77c4b883447 +Author: Eduardo Silva +Date: Sat Dec 20 23:05:10 2014 -0600 + + HTTP: Parser: parser now supports 'Upgrade' value on Connection header + + Signed-off-by: Eduardo Silva + +commit b93946c1638587e79029670ed0d2a407207da4e1 +Author: Eduardo Silva +Date: Sat Dec 20 23:02:50 2014 -0600 + + HTTP: Parser: add support for 'Upgrade' Header + + Signed-off-by: Eduardo Silva + +commit 6c075d7acfd4a55aa3a4bbbadd2a6f015268def9 +Author: Eduardo Silva +Date: Sat Dec 20 22:58:43 2014 -0600 + + HTTP: Parser: new parser->headers_extra array + + The purpose of the new array, is to register unknown/custom headers + set by the client. + + Signed-off-by: Eduardo Silva + +commit 2f21ff44819a943239257cf31b7c153a7a6e5933 +Author: Eduardo Silva +Date: Mon Dec 15 13:58:42 2014 -0600 + + QA: improved Keep-Alive tests + + Signed-off-by: Eduardo Silva + +commit 737895140d541b71f9276364a9ad7563f1eefd45 +Author: Eduardo Silva +Date: Mon Dec 15 13:48:47 2014 -0600 + + HTTP: Parser: don't validate EOF on Content-Length header + + Signed-off-by: Eduardo Silva + +commit c396ee073bf6d616d9003881230f3fdef2c17510 +Author: Eduardo Silva +Date: Mon Dec 15 13:37:27 2014 -0600 + + HTTP: Parser: fix host string length in mk_ptr + + Signed-off-by: Eduardo Silva + +commit 0ae9da888eb9b87bb25d80e6910f94bfa1be8985 +Author: Eduardo Silva +Date: Mon Dec 15 13:31:35 2014 -0600 + + HTTP: Parser: handle Host header TCP port + + Signed-off-by: Eduardo Silva + +commit f0e49c171eb08f9c5959787287e5dc38c3ca7df7 +Author: Eduardo Silva +Date: Mon Dec 15 10:25:35 2014 -0600 + + HTTP: Parser: validate protocol when query string is set (add QA script) + + Signed-off-by: Eduardo Silva + +commit 3b0454cee3a68ceca09d763faed1243f58da9956 +Author: Eduardo Silva +Date: Mon Dec 15 10:20:00 2014 -0600 + + HTTP: Initialize request->port field + + Signed-off-by: Eduardo Silva + +commit 7d2f51fff68439962d0a53537235fbb1e07a72eb +Author: Eduardo Silva +Date: Mon Dec 15 10:18:19 2014 -0600 + + QA: Fix error_413_02 test, send a very long request + + Signed-off-by: Eduardo Silva + +commit bdfbcd8c437101430de8cc28393077c63be086d6 +Author: Eduardo Silva +Date: Mon Dec 15 09:45:26 2014 -0600 + + HTTP: Parser: support insensitive headers RFC2616 s4.2 + + Signed-off-by: Eduardo Silva + +commit 2551ee37f8a3793e1ca423e862d6961a6f05dbde +Author: Eduardo Silva +Date: Mon Dec 15 09:03:26 2014 -0600 + + HTTP: fix code indentation + + Signed-off-by: Eduardo Silva + +commit d5f2d97aa8a05b0c4aa656ffdc099961c5ee2094 +Author: Eduardo Silva +Date: Mon Dec 15 09:02:27 2014 -0600 + + HTTP: Parser: extra checks on protocol and error page fixes + + Signed-off-by: Eduardo Silva + +commit 94a8ab5934276c84040f0831efd623f7d82eb0b4 +Author: Eduardo Silva +Date: Sun Dec 14 23:11:16 2014 -0600 + + HTTP: Parser: return BAD_REQUEST error on bad-formed protocol + + Signed-off-by: Eduardo Silva + +commit c3207c9bf502c23970ceb1704dbe063e01241b27 +Author: Eduardo Silva +Date: Sun Dec 14 22:58:36 2014 -0600 + + HTTP: Parser: validate protocol version + + Signed-off-by: Eduardo Silva + +commit 9c3cf34a773c226058bf6a277921ff6f8fe1af46 +Author: Eduardo Silva +Date: Sun Dec 14 22:44:11 2014 -0600 + + HTTP: Core: initialize request and headers flags + + Signed-off-by: Eduardo Silva + +commit 72be121d33d45e8baa939dd0f4624b03d880e949 +Author: Eduardo Silva +Date: Sun Dec 14 22:39:28 2014 -0600 + + HTTP: Parser: handle MK_CLIENT_REQUEST_ENTITY_TOO_LARGE + + Signed-off-by: Eduardo Silva + +commit d25172c6d2805bfe7e94e86f3e51f1d693c49589 +Author: Eduardo Silva +Date: Sun Dec 14 20:56:52 2014 -0600 + + HTTP: Parser: validate Content-Length is set on POST/PUT requests + + Signed-off-by: Eduardo Silva + +commit f8a173e7047b682c5c8b862c953860c6a88974ab +Author: Eduardo Silva +Date: Sun Dec 14 02:20:04 2014 -0600 + + HTTP: Parser: fix iterator limit + + Signed-off-by: Eduardo Silva + +commit 7ae62fc1d5ceb25c71f1c830af0f621782dc0755 +Author: Eduardo Silva +Date: Wed Dec 10 17:58:30 2014 -0600 + + HTTP: Parser: fix handling of KA connections + + Signed-off-by: Eduardo Silva + +commit 4ca7fff7acc7834e0907c80c3c8f7710a364b625 +Author: Eduardo Silva +Date: Wed Dec 10 13:28:09 2014 -0600 + + Connection: fix body length passed to HTTP parser + + Signed-off-by: Eduardo Silva + +commit ef515294a28c6b5c06663c9c9d589f3b7b58fb46 +Author: Eduardo Silva +Date: Wed Dec 10 13:08:36 2014 -0600 + + Server: improve behavior when accepting a new connection + + Signed-off-by: Eduardo Silva + +commit 7bc851668797f2f06c594f392353f1609444cd9e +Author: Eduardo Silva +Date: Tue Dec 9 14:44:50 2014 -0600 + + HTTP: re-enable support for Keep-Alive check. + + This patch re-introduce the detection of the Connection header value + and do some logic steps to determinate if the connection should be + keep open as in a keep-alive state or be closed. + + Signed-off-by: Eduardo Silva + +commit d1c7cc8005fd58ce78489440f9b178ead838f3b5 +Author: Eduardo Silva +Date: Mon Dec 8 21:33:37 2014 -0600 + + HTTP: little improvement when initializing parser. + + Signed-off-by: Eduardo Silva + +commit b99037eccba56c008481d4442593d66faacaa81b +Author: Eduardo Silva +Date: Thu Nov 20 17:28:56 2014 -0600 + + Connection: link fixed http_request from http_session + + Signed-off-by: Eduardo Silva + +commit 9f1595d0cf9d3d4957a8b7741e9b5d07a1a9bafd +Author: Eduardo Silva +Date: Fri Nov 7 22:34:30 2014 -0600 + + HTTP: more code cleanup (wip) + + Signed-off-by: Eduardo Silva + +commit 27a6e9e359adf76519c46c0bc2b5230f13f091d7 +Author: Eduardo Silva +Date: Fri Nov 7 13:34:19 2014 -0600 + + HTTP: merge parser results on http_request + + Signed-off-by: Eduardo Silva + +commit 7fbca6e347c4bef7b1c31620b59259b2cb9cf4b5 +Author: Eduardo Silva +Date: Fri Nov 7 10:38:11 2014 -0600 + + Core: refactoring structures and HTTP parser + + Signed-off-by: Eduardo Silva + +commit 5dde82f851c1e13ef14360c8b92f0dae05378e2c +Author: Eduardo Silva +Date: Tue Nov 4 21:58:51 2014 -0600 + + Core: small fixes when building in TRACE mode + + Signed-off-by: Eduardo Silva + +commit 690eb05d57d9c8f1c1941285926fb3ea0192ad54 +Author: Eduardo Silva +Date: Tue Nov 4 21:57:23 2014 -0600 + + HTTP: do not include old mk_method header file + + Signed-off-by: Eduardo Silva + +commit 6dfb5b744a52401c2c117b9011be35216d4c17e7 +Author: Eduardo Silva +Date: Tue Nov 4 21:40:35 2014 -0600 + + HTTP: new parser and main structures refactoring + + This is the first patch of a big change that is coming, it does: + + - deprecate mk_request.[ch] + - deprecate mk_method.[ch] + - replace struct client_session by struct mk_http_session + - replace struct session_request by struct mk_http_request + - new HTTP parser mk_http_parser.c + + At this moment the server 'compiles'. It now needs to be aware about + the new parser and also needs some cleanup on headers interfaces. + + the fun begins.. + + Signed-off-by: Eduardo Silva + +commit d3b498a11a8b535eae5be8d17bf290e110aa09f1 +Merge: a79c038 7815bb3 +Author: Eduardo Silva +Date: Tue Nov 4 11:11:01 2014 -0600 + + Merge branch 'master' of https://github.com/monkey/monkey + +commit a79c038f5e8bbe94a2f4fbbe442aeb677488334a +Author: Eduardo Silva +Date: Tue Nov 4 11:10:45 2014 -0600 + + Kernel: disable TCP_AUTOCORKING (#175) + + Signed-off-by: Eduardo Silva + +commit 7815bb3932a38fb4746663eb4f66479a33426a04 +Author: Eduardo Silva +Date: Mon Oct 27 09:45:36 2014 -0600 + + Auth: if no global config exists, just skip stage 30 + + Signed-off-by: Eduardo Silva + +commit c61969059ee58ef73492bf3fb3abb4dea87ea509 +Author: Eduardo Silva +Date: Mon Oct 27 09:41:48 2014 -0600 + + Auth: validate that config have been loaded + + Signed-off-by: Eduardo Silva + +commit fe65020113a4411dcf3a0446aacff8460f761e86 +Author: Eduardo Silva +Date: Mon Oct 27 02:04:55 2014 -0600 + + Configure: enable -rdynamic + + Signed-off-by: Eduardo Silva + +commit fb297b42b0ce66901425b5d08644432ee3155ae9 +Merge: f1a5e96 b6ddb6d +Author: Eduardo Silva +Date: Fri Oct 24 00:03:10 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit f1a5e96ae40d79530b2e9eb4339642ac4784c4c4 +Author: Eduardo Silva +Date: Thu Oct 23 14:44:07 2014 -0600 + + Scheduler: proper handling when dropping connections + + This patch implements a new function at scheduler level that is + used to cleanup a complete connection. + + It helps to fix an issue when connections are dropped from different + sources such as: timeouts, I/O errors, incomplete requests, etc. + + Signed-off-by: Eduardo Silva + + Conflicts: + src/mk_http.c + src/mk_request.c + src/mk_scheduler.c + +commit b6ddb6d2324a4106b7c1548ef73f015c242af865 +Author: Sonny Karlsson +Date: Wed Oct 22 13:07:51 2014 -0700 + + utils: Fixes Mac Os X macro in mk_utils_worker_rename(). + + Signed-off-by: Sonny Karlsson + +commit 7bb177644652667021c3c89dc64a2f5a961bf5b3 +Merge: 1c76aaa 01bf1af +Author: Eduardo Silva +Date: Tue Oct 21 20:17:03 2014 -0600 + + Merge pull request #172 from ksonny/master + + OSX fixes + +commit 01bf1af68a817a7b3fd7d4828b8b3d1fa6bf6f3d +Author: Sonny Karlsson +Date: Tue Oct 21 17:04:45 2014 -0700 + + liana: Fixes for *bsd sendfile(). + + Always update file_offset variable. + Return -1 if errno == EAGAIN and no bytes sent. + Use error log instead of trace for Linux sendfile(). + + Signed-off-by: Sonny Karlsson + +commit 81e8b869d70f9da93ddfbfb17ec7f12ce3c28fc6 +Author: Sonny Karlsson +Date: Sat Oct 18 12:11:49 2014 +0200 + + http: Remove cork before first call to sendfile(). + + This removes a large delay on Mac OS X when headers and file content + does not fill a single frame. + Deactivating TCP_NOPUSH does not cause pending frames to be sent until + the next write operation. + + Signed-off-by: Sonny Karlsson + +commit 389e84766bece353fdb681e618691aceca38e41d +Author: Sonny Karlsson +Date: Sat Oct 18 11:41:17 2014 +0200 + + logger: Uses stack buffer in splice() fallback. + + Signed-off-by: Sonny Karlsson + +commit 774859a98271668f4a51b33e7b8c017d8864a7d5 +Author: Sonny Karlsson +Date: Tue Oct 21 18:09:27 2014 -0700 + + socket: Set SOL_TCP to IPPROTO_TCP for Mac Os X. + + Signed-off-by: Sonny Karlsson + +commit af513bbac2d4ac56e356edb11ebe5e6be52afd4e +Author: Sonny Karlsson +Date: Sat Oct 18 11:36:11 2014 +0200 + + util: Set thread name on Mac OS X. + + Signed-off-by: Sonny Karlsson + +commit 1c76aaaaf510101c07376d3c9b05f0ed01fd61f7 +Author: Eduardo Silva +Date: Sun Oct 19 13:45:02 2014 -0600 + + Configure: improve src/Makefile output + + Signed-off-by: Eduardo Silva + +commit 9ead720f52f12d60fa0e87c6c6d091fed9919b48 +Author: Eduardo Silva +Date: Sun Oct 19 11:21:14 2014 -0600 + + Utils: on worker_rename, fix warning on OSX + + Signed-off-by: Eduardo Silva + +commit 67973ab53e0c2a5dd44d758dc297615471c68dbe +Author: Eduardo Silva +Date: Sat Oct 18 22:59:07 2014 -0600 + + Cheetah: fix address length for unix socket + + Signed-off-by: Eduardo Silva + +commit 71ecbdcc2e4872ec0283ab6fd8398e6d21d3e889 +Author: Eduardo Silva +Date: Sat Oct 18 22:32:00 2014 -0600 + + HTML: update Monkey to 'Black Macaque' + + Signed-off-by: Eduardo Silva + +commit 5176e48f879c873c9da0cb5d04ea660818a3ada2 +Author: Eduardo Silva +Date: Sat Oct 18 22:30:17 2014 -0600 + + HTML: update info for v1.6 + + Signed-off-by: Eduardo Silva + +commit 424c7d40aa0f1dba383427687ecbf19449fb9b2c +Author: Eduardo Silva +Date: Sat Oct 18 21:49:39 2014 -0600 + + Socket: fix warnings on OSX + + Signed-off-by: Eduardo Silva + +commit 835fb4630e93ca4a84e01caa9ea59947eefb327e +Author: Eduardo Silva +Date: Sat Oct 18 21:48:58 2014 -0600 + + Liana: fix sendfile() call for OSX + + Signed-off-by: Eduardo Silva + +commit 731d41ae12727090ca0a3d7903f96f74ad2c487c +Author: Eduardo Silva +Date: Sat Oct 18 21:28:35 2014 -0600 + + Server: do not warn TCP_DEFER_ACCEPT problem on OSX + + Signed-off-by: Eduardo Silva + +commit b89953faf7034cf42a10b103f069498011568268 +Author: Eduardo Silva +Date: Sat Oct 18 21:26:13 2014 -0600 + + Socket: fixes for OSX + + Signed-off-by: Eduardo Silva + +commit 92725ce811204282815a493631425fac1380c0b0 +Author: Eduardo Silva +Date: Sat Oct 18 21:23:44 2014 -0600 + + Configure: drop -rdynamic from Makefiles + + Signed-off-by: Eduardo Silva + +commit 27992a0daabea32f0b2a149b6689505175852576 +Merge: ad133f8 b841ec2 +Author: Eduardo Silva +Date: Sat Oct 18 20:47:39 2014 -0600 + + Merge branch 'logger-event' + +commit b841ec20299b33930b213ebbc25a98800c7d2a4f +Author: Eduardo Silva +Date: Sat Oct 18 20:47:03 2014 -0600 + + Logger: add support for Linux and OSX, use Events translator to iterate events + + Signed-off-by: Eduardo Silva + +commit b6492096df03dd702cd977168d18a4c9e2ef400b +Author: Eduardo Silva +Date: Sat Oct 18 20:46:13 2014 -0600 + + Events: export fdt() api and add extra validation on backend iterators + + Signed-off-by: Eduardo Silva + +commit ad133f85851c33e9680cb5df8965f13460591b99 +Author: Eduardo Silva +Date: Thu Oct 16 10:45:06 2014 -0600 + + Scheduler: trigger exception when registering a client that already exists + + Signed-off-by: Eduardo Silva + +commit e0d86fd358946e35bab5f916b8580684c5c67a9a +Author: Eduardo Silva +Date: Thu Oct 16 10:37:42 2014 -0600 + + Request: trigger an exception when an entry already exists on the rbtree + + Signed-off-by: Eduardo Silva + +commit 80815f28b0ee26fef2332cd7635aea3450c5ff64 +Author: Eduardo Silva +Date: Thu Oct 16 10:32:31 2014 -0600 + + Macros: new mk_exception(), similar to mk_bug() but without conditional + + Signed-off-by: Eduardo Silva + +commit c997b057edaeb8512f264a58e365c338482c4952 +Author: Eduardo Silva +Date: Sun Oct 12 17:35:22 2014 -0600 + + Liana: add support for OSX sendfile() + + Signed-off-by: Eduardo Silva + +commit 31b767bbe75c034d0d2918a8ebb853720fd05741 +Author: Eduardo Silva +Date: Sun Oct 12 17:23:09 2014 -0600 + + Utils: support worker rename just on Linux + + Signed-off-by: Eduardo Silva + +commit 03dbbf8ea4ab9ceaf6d38611939723098a2b4ff0 +Author: Eduardo Silva +Date: Sun Oct 12 17:18:05 2014 -0600 + + String: add memrchr() function as OSX lacks of it + + Signed-off-by: Eduardo Silva + +commit cc1919843389b39a4a961ad574b3ef125afdfe76 +Author: Eduardo Silva +Date: Sun Oct 12 17:15:19 2014 -0600 + + Socket: fixes to support Linux and OSX + + Signed-off-by: Eduardo Silva + +commit 62b266905f4e7025f3a135b0bd8a226333a7d856 +Author: Eduardo Silva +Date: Sun Oct 12 17:04:57 2014 -0600 + + Signal: remove dependency of features.h + + Signed-off-by: Eduardo Silva + +commit 30ac42fd066d5a5dbf2cf854268ed0004070f0c1 +Author: Eduardo Silva +Date: Sun Oct 12 17:04:19 2014 -0600 + + Scheduler: support thread id for OSX + + Signed-off-by: Eduardo Silva + +commit 7f4d2aefc0ec9cdd1c5ad43957d4afb6d27ce4e8 +Author: Eduardo Silva +Date: Sun Oct 12 17:01:51 2014 -0600 + + Scheduler: remove old direct dependency of epoll and eventfd + + Signed-off-by: Eduardo Silva + +commit ef016abe806b97998fab59bd251f69dc66c410d2 +Author: Eduardo Silva +Date: Sun Oct 12 17:01:10 2014 -0600 + + File: use O_NOATIME just on Linux + + Signed-off-by: Eduardo Silva + +commit 669c9330122d3687f3965bd0c4447f611b56db26 +Author: Eduardo Silva +Date: Sun Oct 12 16:56:03 2014 -0600 + + Configure: check_generic() now accepts new parameter for defines + + Signed-off-by: Eduardo Silva + +commit 55e2a683383c246c3d3d09359e86eaf37ba65d8d +Author: Eduardo Silva +Date: Sun Oct 12 16:46:20 2014 -0600 + + Configure: find: use -type instead of -xtype (OSX friendly) + + Signed-off-by: Eduardo Silva + +commit 4af9151e1521c4cdc2fd224aede9e8a1c2ddab23 +Author: Eduardo Silva +Date: Sun Oct 12 16:45:03 2014 -0600 + + Configure: support 'sed' options for Linux and OSX + + Signed-off-by: Eduardo Silva + +commit 5d8e70421b6074edc5f6ddf16b7d0e24c491adb2 +Author: Eduardo Silva +Date: Sat Oct 11 23:46:51 2014 -0600 + + Config: reset address of listener on setup + + Signed-off-by: Eduardo Silva + +commit 64e032b66d5f840f58d24e04875df8ddd9ef7c9b +Author: Eduardo Silva +Date: Sat Oct 11 23:09:01 2014 -0600 + + Config: on listener read, do not continue on loop + + Signed-off-by: Eduardo Silva + +commit 98be899bb28214486c35fa6ab52419515131f4bd +Author: Eduardo Silva +Date: Sat Oct 11 22:33:52 2014 -0600 + + Event: on initialization error, release memory + + Signed-off-by: Eduardo Silva + +commit 94676f37dfdc002007b6e3683236ed79c6816489 +Author: Eduardo Silva +Date: Sat Oct 11 22:32:51 2014 -0600 + + Config: fix mem leak on 'address' when using multiple listeners + + Signed-off-by: Eduardo Silva + +commit 0e741727b13e6c83daa3a32592d101a65ce628d2 +Author: Eduardo Silva +Date: Sat Oct 11 22:26:22 2014 -0600 + + Vhost: when find a docerror exception (config), do not leak host + + Signed-off-by: Eduardo Silva + +commit fa0ea796f4c069b605234fcadc5aa81c3b78f908 +Author: Eduardo Silva +Date: Sat Oct 11 22:23:52 2014 -0600 + + Config: on config create, do not leak indent var + + Signed-off-by: Eduardo Silva + +commit 23bf3f2c6f20b8a0958ddea03a0ff4816cc1decb +Author: Eduardo Silva +Date: Sat Oct 11 22:22:51 2014 -0600 + + Config: on config create, do not leak file handler + + Signed-off-by: Eduardo Silva + +commit f95d28ea02d34ce83e5f3e6f02550d807cbff839 +Author: Eduardo Silva +Date: Sat Oct 11 22:21:44 2014 -0600 + + Config: abort if SECTION config is not found + + Signed-off-by: Eduardo Silva + +commit 91f58ae6c4b5f1134d972515f5ccb9d15e74d362 +Author: Eduardo Silva +Date: Sat Oct 11 22:20:08 2014 -0600 + + Request: check status of cork_flag set + + Signed-off-by: Eduardo Silva + +commit 08b7a135b673deb02150e401bc04c116bd7d55a7 +Author: Eduardo Silva +Date: Sat Oct 11 22:17:35 2014 -0600 + + HTTP: validate return when sending headers on redirection + + Signed-off-by: Eduardo Silva + +commit 3095600949656fe76d102251be6bb64d89612152 +Author: Eduardo Silva +Date: Sat Oct 11 22:15:28 2014 -0600 + + Mimetype: fix leak if initialization fails + + Signed-off-by: Eduardo Silva + +commit f330be3527e9cfe04049f4e4147a7847865eadd7 +Author: Eduardo Silva +Date: Fri Oct 3 11:35:40 2014 -0600 + + HTTP: do not allow GET with body data + + Signed-off-by: Eduardo Silva + +commit 96a82376061935ccc06d7610998e0b49f4bf47af +Merge: 92fcaa1 1f840f0 +Author: Eduardo Silva +Date: Wed Sep 24 23:28:35 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 92fcaa1963b2ac7c0e021ec80f8ce7dbea8966ee +Author: Eduardo Silva +Date: Wed Sep 24 23:28:24 2014 -0600 + + Conf: validate sections + + Signed-off-by: Eduardo Silva + +commit 1f840f0674b3e94c2db1303b759973b2fc7fd1fa +Author: Eduardo Silva +Date: Wed Sep 24 16:04:03 2014 -0600 + + User: use memcpy() instead of strncpy() + + Signed-off-by: Eduardo Silva + +commit f29a133cb92fac74e6642c41d45eeb78c9d6e580 +Author: Eduardo Silva +Date: Wed Sep 24 16:02:04 2014 -0600 + + Utils: use memcpy() on URL decode + + Signed-off-by: Eduardo Silva + +commit 322b011c4f6c0e80167f80955c43f513f196dc74 +Merge: 24f03ef ff95472 +Author: Eduardo Silva +Date: Tue Sep 23 21:52:28 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit ff954726382476e5f7766c53860d64a5dc4bd03b +Author: Eduardo Silva +Date: Tue Sep 23 10:40:35 2014 -0600 + + Configure: fix override of DEFS environment variable + + Signed-off-by: Eduardo Silva + +commit 0091d4dcb91d1f00de27dc80fa0d20cad7a2da1e +Author: Eduardo Silva +Date: Mon Sep 22 10:58:26 2014 -0600 + + Configure: new get_realpath() to resolve script path + + Signed-off-by: Eduardo Silva + +commit 24f03ef309e9592a478701568b68cdab25f622d6 +Author: Eduardo Silva +Date: Fri Sep 19 19:08:51 2014 -0600 + + Banner: print Linux Features just if __linux__ is defined + + Signed-off-by: Eduardo Silva + +commit d2c4058a685a2a93d54a08ff7e03caea0ea23ab5 +Author: Eduardo Silva +Date: Thu Sep 18 09:00:59 2014 -0600 + + Cheetah: print error if bind fails + + Signed-off-by: Eduardo Silva + +commit cc764b459736ccca11f8f9a36c9393ff23857590 +Author: Eduardo Silva +Date: Wed Sep 17 22:25:50 2014 -0600 + + Scheduler: on Fair Balancing, adapt worker capacity + + Signed-off-by: Eduardo Silva + +commit 5834427d031e726c92b6caf83c7582a94dfe18b2 +Author: Eduardo Silva +Date: Wed Sep 17 11:44:32 2014 -0600 + + Cheetah: on server info expose events backend + + Signed-off-by: Eduardo Silva + +commit 0cf60e6b8d9895742c2f6033a8bc4047ac7beca0 +Author: Eduardo Silva +Date: Wed Sep 17 11:42:48 2014 -0600 + + Plugin: export event_backend() + + Signed-off-by: Eduardo Silva + +commit af4ae08fc118bf55f7952619dd6ca887596d5ab7 +Author: Eduardo Silva +Date: Wed Sep 17 11:26:59 2014 -0600 + + User: on switch user, do not alter NOFILE limits + + Signed-off-by: Eduardo Silva + +commit bf106fefab74448de22f60d0978b16c389870fa9 +Author: Eduardo Silva +Date: Wed Sep 17 10:34:04 2014 -0600 + + Events: new event_backend() to identify polling mechanism + + Signed-off-by: Eduardo Silva + +commit 2c61531b8aa36477e84c8f03c8d3c3039fc4c925 +Author: Eduardo Silva +Date: Tue Sep 16 22:23:00 2014 -0600 + + HTTP: Disable TCP_CORK on send_file on first round of data + + Signed-off-by: Eduardo Silva + +commit 0b283275cf691e120fd4a4471676569c69e7aaff +Author: Eduardo Silva +Date: Tue Sep 16 22:11:16 2014 -0600 + + Header: improve performance on buffers cache + + Signed-off-by: Eduardo Silva + +commit fc577af77858db10403d8913067edb339eda4907 +Author: Eduardo Silva +Date: Tue Sep 16 21:45:27 2014 -0600 + + Plugin: improve performance when accessing thread global event list + + Signed-off-by: Eduardo Silva + +commit 496770a6291246e39f7d45e036acd8ed3a0cf8df +Author: Eduardo Silva +Date: Tue Sep 16 19:18:22 2014 -0600 + + Cache: remove unused pthread keys + + Signed-off-by: Eduardo Silva + +commit 93d2f5730cb380c3dd85762a333013b25c8a8e71 +Author: Eduardo Silva +Date: Tue Sep 16 19:16:17 2014 -0600 + + Utils: improve performance when accessing thread global gmt caches + + Signed-off-by: Eduardo Silva + +commit 1c2d028cedba355753cb67cd978f1e012ef09fcc +Author: Eduardo Silva +Date: Tue Sep 16 17:10:31 2014 -0600 + + Scheduler: improve performance when accessing thread sched node + + Signed-off-by: Eduardo Silva + +commit 5e2d95b2f8075f6db72d2731a9f205e1e2d217f4 +Author: Eduardo Silva +Date: Tue Sep 16 16:01:01 2014 -0600 + + Plugin: expose ev_translate() on API + + Signed-off-by: Eduardo Silva + +commit 7c36db6f6f500b8d29304abc4398b5c2e884a3ca +Author: Eduardo Silva +Date: Tue Sep 16 15:57:21 2014 -0600 + + Events: kqueue: new mk_event_translate() and mk_event_foreach() interfaces + + Signed-off-by: Eduardo Silva + +commit 3ae46a119e5f80b3099a5053d8672768e686df8c +Author: Eduardo Silva +Date: Tue Sep 16 15:35:43 2014 -0600 + + Events: new mk_event_translate() and mk_event_foreach() interfaces + + Previous mechanism required to perform two walks through the events + result array, the first one for the native backend and the second + to export the results to a new interface. + + This patch implements two new interface to improve performance over + the past scenario plus a minor change: + + 1. mk_event_wait(): just invoke the backend poll interface, nothing else. + 2. mk_event_foreach() macros that allows to walk arround over the backend + interface results avoiding double copy. + 3. mk_event_translate(): do a explicit copy from backend resutls to the + public interface. + + This patch only apply the interfaces to the epoll backend. + + Signed-off-by: Eduardo Silva + +commit 1c8ba8561adca6d099faea1a1cb2f33d9f9826c4 +Author: Eduardo Silva +Date: Tue Sep 16 14:44:56 2014 -0600 + + Events: remove old events data structure approach + + Signed-off-by: Eduardo Silva + +commit e6e518457528ce5f58f17f7e531090c00f7cc01d +Author: Eduardo Silva +Date: Tue Sep 16 14:38:38 2014 -0600 + + Scheduler: remove unused events mask on sched_connection + + Signed-off-by: Eduardo Silva + +commit e0ea056c00f575019554b0dbca1cb510f473dfb7 +Author: Eduardo Silva +Date: Tue Sep 16 11:51:03 2014 -0600 + + CI: disable proxy_reverse plugin + + Signed-off-by: Eduardo Silva + +commit 009ef9ee06f59e8294bc44c61f8aceeccd250704 +Author: Eduardo Silva +Date: Tue Sep 16 11:47:30 2014 -0600 + + Logger: replace old epoll calls by new Events mechanism + + Signed-off-by: Eduardo Silva + +commit 28bbd325d410f2bb2e86d5e4adce627625684123 +Author: Eduardo Silva +Date: Tue Sep 16 11:42:00 2014 -0600 + + CGI: use new Events mechanism + + Signed-off-by: Eduardo Silva + +commit b8c18ae15a052ae43a055be187b4875da44c3ad9 +Author: Eduardo Silva +Date: Tue Sep 16 11:39:52 2014 -0600 + + Lib: adjust to new Server capacity logic + + Signed-off-by: Eduardo Silva + +commit dcf3020ec45a6d403946130417b9354c8ca93a9a +Author: Eduardo Silva +Date: Tue Sep 16 11:26:47 2014 -0600 + + CI: re-enable Travis + + Signed-off-by: Eduardo Silva + +commit dd40abe3f1fe7b58ac1b5c5fdadefe94bd5f3858 +Author: Eduardo Silva +Date: Tue Sep 16 11:19:48 2014 -0600 + + Events: kqueue: implement timeout_create + + Signed-off-by: Eduardo Silva + +commit 8145451314e626fcb599dbe26993897cb839ebe4 +Author: Eduardo Silva +Date: Tue Sep 16 10:58:54 2014 -0600 + + Events: epoll: on timeout_create, use event_add() call + + Signed-off-by: Eduardo Silva + +commit b8c632c5457b869d17bfb828414c41ba0b9451d0 +Author: Eduardo Silva +Date: Tue Sep 16 10:46:50 2014 -0600 + + Events: kqueue: implement channels_create() handler + + Signed-off-by: Eduardo Silva + +commit 73baa60d613a335784dc45dceb53556b082afd3b +Author: Eduardo Silva +Date: Tue Sep 16 10:37:50 2014 -0600 + + Events: Scheduler / Epoll: set read and write file descriptors + + This patchs makes the Events channel creation to use two file descriptors + for read and write operations. Mostly because kqueue based interface + will use old-fashion pipe(2) as eventfd() is not available. + + Signed-off-by: Eduardo Silva + +commit 6ccbfc050058e78a9223a52b2c8f19b78e4b5687 +Author: Eduardo Silva +Date: Tue Sep 16 10:05:36 2014 -0600 + + Events: kqueue: disable debug messages + + Signed-off-by: Eduardo Silva + +commit 0dde3beb69e595cc8e6a4c2b9dbcf47a2915db1a +Author: Eduardo Silva +Date: Mon Sep 15 22:55:41 2014 -0600 + + Events: change flags value and found a libkqueue bug + + I found a bug running libkqueue (GIT version), not sure if it + can be replicated on older versions. It only happens when the + following sequence of kqueue calls are done: + + 1. Register FD as EVFILT_READ + 2. Delete EVFILT_READ for FD + 3. Register FD as EVFILT_WRITE + 4. Register FD as EVFILT_READ + + On step #4 kevent() fails with EFAULT (Bad Address). I was able + to reproduce the problem with a standalone test case, I contacted + the library author about this problem. I need this to get resolved + to continue. + + Signed-off-by: Eduardo Silva + +commit 281183ca6fafb2790c7ed554efd6bb2dafda0546 +Author: Eduardo Silva +Date: Mon Sep 15 14:53:39 2014 -0600 + + Events: kqueue: on delete, do not validate errors + + Signed-off-by: Eduardo Silva + +commit b9a081ea766d1485827463b141a5bc3b7c1f4b7c +Author: Eduardo Silva +Date: Mon Sep 15 14:15:52 2014 -0600 + + Events: kqueue: fix event deletion + + Signed-off-by: Eduardo Silva + +commit 271a33c390af5b7f1934e1fdc4c06396ba82f028 +Author: Eduardo Silva +Date: Mon Sep 15 12:37:10 2014 -0600 + + Events: add kqueue poll events handler + + Signed-off-by: Eduardo Silva + +commit 4fc2cd53dde74ef170fb33f5562d7f3465245bde +Author: Eduardo Silva +Date: Mon Sep 15 12:25:29 2014 -0600 + + Events: add kevent 'event delete' handler + + Signed-off-by: Eduardo Silva + +commit 39ed833f715a9bcd1231f0f8a04cae4fdf865f54 +Author: Eduardo Silva +Date: Mon Sep 15 12:22:56 2014 -0600 + + Events: kqueue event add callback + + Signed-off-by: Eduardo Silva + +commit 3df8d431789a75e702f492f92693692d1a3e8363 +Author: Eduardo Silva +Date: Mon Sep 15 11:41:25 2014 -0600 + + Events: kqueue loop create plus configure script fixes for libkqemu + + Signed-off-by: Eduardo Silva + +commit a0abb6fc2d56e2f9a4799cd16a47664dcc465796 +Author: Eduardo Silva +Date: Mon Sep 15 11:31:03 2014 -0600 + + Events: add kqueue handler Skeleton + + Signed-off-by: Eduardo Silva + +commit 10b58cec2301df36bf4001bb8afc8e472b2c08da +Author: Eduardo Silva +Date: Mon Sep 15 11:25:48 2014 -0600 + + Events: use epoll only on Linux and when linux-kqueue not defined + + Signed-off-by: Eduardo Silva + +commit d1f303d2f855224f5c2322ad00e6a94032474cd3 +Author: Eduardo Silva +Date: Mon Sep 15 10:50:48 2014 -0600 + + Config: move port override to global conf + + Signed-off-by: Eduardo Silva + +commit dbabdc09b16a1cee49222255eb40615b4fbce943 +Author: Eduardo Silva +Date: Fri Sep 12 11:15:53 2014 -0600 + + Events: set custom 'data' field on results array + + Signed-off-by: Eduardo Silva + +commit a6d101e3db41e9cbcf1f9a98370f37200fde8163 +Author: Eduardo Silva +Date: Fri Sep 12 10:43:18 2014 -0600 + + Plugin: make events behavior param void + + Signed-off-by: Eduardo Silva + +commit ce18be91117be85132289e0357075afc2aaf3151 +Author: Eduardo Silva +Date: Fri Sep 12 10:40:09 2014 -0600 + + Server: remove deprecated reference to mk_epoll.h + + Signed-off-by: Eduardo Silva + +commit f1a8928ab405cfd793d678ad79893556edbd8900 +Author: Eduardo Silva +Date: Thu Sep 11 16:46:17 2014 -0600 + + Events: set array size using getrlimit + + Signed-off-by: Eduardo Silva + +commit 7da674a44ce21dbedc9534681f0b26d56c9b1108 +Author: Eduardo Silva +Date: Thu Sep 11 16:13:51 2014 -0600 + + Events: align EFDT size with server capacity + + Signed-off-by: Eduardo Silva + +commit 7a75941f318464d35093e5fc11b1027b7f0172a4 +Author: Eduardo Silva +Date: Thu Sep 11 16:07:57 2014 -0600 + + Config: update FDLimit description + + Signed-off-by: Eduardo Silva + +commit 8dc36979a08e2b6c56f8dae6cb81d36d97d62fbf +Author: Eduardo Silva +Date: Thu Sep 11 11:26:06 2014 -0600 + + Config: support new FDLimit (fix #143) + + Signed-off-by: Eduardo Silva + +commit c1b2228db588c21724fb3c838990b4d20c09e242 +Author: Eduardo Silva +Date: Thu Sep 11 10:02:27 2014 -0600 + + Doc: new Branch TODO for this new architecture + + Signed-off-by: Eduardo Silva + +commit 2c9bbe7c73a7d67811f42256727d3f3110f5fc6b +Author: Eduardo Silva +Date: Thu Sep 11 09:19:31 2014 -0600 + + FastCGI: fix API flags + + Signed-off-by: Eduardo Silva + +commit a5b40f0584f7f0f96fcb7f3f5ff2ba53f9f8fa97 +Author: Eduardo Silva +Date: Wed Sep 10 22:17:01 2014 -0600 + + Scheduler: change server capacity + + Signed-off-by: Eduardo Silva + +commit c3358d8785f5f0e45cad53480c3e3f8b2d874dbf +Author: Eduardo Silva +Date: Wed Sep 10 21:42:23 2014 -0600 + + Event: separate logic between main loop and backend + + Signed-off-by: Eduardo Silva + +commit bd6866c7cdad267d2cc067ce1689bf43fe8dc969 +Author: Eduardo Silva +Date: Wed Sep 10 21:29:28 2014 -0600 + + Event: small fixes, partially working (serving requests) + + Signed-off-by: Eduardo Silva + +commit 0944212c0a4c76940797abc294ad18dac7418ebb +Author: Eduardo Silva +Date: Wed Sep 10 19:56:43 2014 -0600 + + Scheduler: mark thread loop as initialized + + Signed-off-by: Eduardo Silva + +commit 1d05d26c43e92c2004f900d7ecdd559699bc3d38 +Author: Eduardo Silva +Date: Wed Sep 10 19:42:11 2014 -0600 + + Plugin: export new Event core API to plugins + + Signed-off-by: Eduardo Silva + +commit 66b21a904631a839e4f4b20b8a8cd07eda7c8030 +Author: Eduardo Silva +Date: Wed Sep 10 16:40:57 2014 -0600 + + Core: remove deprecated calls based on old epoll_ API + + Signed-off-by: Eduardo Silva + +commit c876a79f547c8cd0c95ea2d9f432f8b9c98a5078 +Author: Eduardo Silva +Date: Wed Sep 10 13:38:37 2014 -0600 + + Scheduler: use new Event interface + + Signed-off-by: Eduardo Silva + +commit cd0366cffcf98bac1d123cc559dbf42c3a80e62a +Author: Eduardo Silva +Date: Wed Sep 10 13:26:18 2014 -0600 + + CI: disable Travis CI for this branch + + Signed-off-by: Eduardo Silva + +commit d6566f741b3e6ed29e5130105667d6d85f8f343b +Author: Eduardo Silva +Date: Wed Sep 10 13:17:36 2014 -0600 + + Epoll: it was a pleasure, but you have been deprecated. + + This patch removes mk_epoll.[ch] from sources as the new mk_event.c + handler with mk_event_epoll.c backend is in place. + + Now the core is totally broken as all other interfaces needs to be + adjusted to the new Events mechanism. + + Now the fun begins :) + + Signed-off-by: Eduardo Silva + +commit fc6c4231a069425f953938f343f6b90ef6fc33d3 +Author: Eduardo Silva +Date: Wed Sep 10 13:13:00 2014 -0600 + + Scheduler: use new event loop interface + + Signed-off-by: Eduardo Silva + +commit 8107a13f3899c30d8d27d950829576f4c2d79b48 +Author: Eduardo Silva +Date: Wed Sep 10 12:44:10 2014 -0600 + + Event: add signal channel support + + Signed-off-by: Eduardo Silva + +commit adc206c604717e32787f866a3e2fbce0dae7d568 +Author: Eduardo Silva +Date: Tue Sep 9 22:34:48 2014 -0600 + + Server: worker loop handle events + + Signed-off-by: Eduardo Silva + +commit 8f6a135dec17f111129bf8b66e0d2b0e9a1e6cd0 +Author: Eduardo Silva +Date: Tue Sep 9 12:09:34 2014 -0600 + + Server: prepare worker loop + + Signed-off-by: Eduardo Silva + +commit e9a4ab97be444a47595bb1c0d3fd47eac485279b +Author: Eduardo Silva +Date: Tue Sep 9 12:05:17 2014 -0600 + + Event: wrap backend context on a 'loop_t' data type + + Signed-off-by: Eduardo Silva + +commit ffb68fede1c5d96ea2a297c4fbe5c82ed008c827 +Author: Eduardo Silva +Date: Tue Sep 9 11:17:08 2014 -0600 + + Config: remove unused param when calling listeners free + + Signed-off-by: Eduardo Silva + +commit d4788c69da0f65c51cb1d76bd6183e33c9b9a1f9 +Author: Eduardo Silva +Date: Tue Sep 9 11:10:47 2014 -0600 + + Event: fix compiler warnings + + Signed-off-by: Eduardo Silva + +commit 8074056d5a4ac0d22bd553f060d5991b410e658b +Author: Eduardo Silva +Date: Tue Sep 9 11:03:26 2014 -0600 + + Event: fix builder + + Signed-off-by: Eduardo Silva + +commit 5243abd1073deecdec279904b179824808808256 +Author: Eduardo Silva +Date: Mon Sep 8 23:14:01 2014 -0600 + + Event: header fixes + + Signed-off-by: Eduardo Silva + +commit 034a53a9746b0917f9fbdc955da9915d41bb5ffe +Author: Eduardo Silva +Date: Mon Sep 8 22:29:59 2014 -0600 + + Event: workaround for events abstraction + + Signed-off-by: Eduardo Silva + +commit ab9ac8be1e85fe09f62133fa91a2c5aafa096386 +Author: Eduardo Silva +Date: Mon Sep 8 20:10:25 2014 -0600 + + Event: rename calls and add timeout handler + + Signed-off-by: Eduardo Silva + +commit d7c980c31eaa9a8b05347c5cea22a91c720e4f62 +Author: Eduardo Silva +Date: Mon Sep 8 17:32:00 2014 -0600 + + Event: wrappers for event_add and event_dell + + Signed-off-by: Eduardo Silva + +commit 8060d44ca35eb4224754f6b4dc2cf969515659bf +Author: Eduardo Silva +Date: Mon Sep 8 12:31:11 2014 -0600 + + Event: initialize global event states table + + Signed-off-by: Eduardo Silva + +commit a972d061e8761e78edf83a591cf09415ebb16d78 +Author: Eduardo Silva +Date: Sun Sep 7 23:11:04 2014 -0600 + + Event: preparing event handlers & basic epoll + + Signed-off-by: Eduardo Silva + +commit 4171e4dda9057bbcba17fdf027699180e75df818 +Author: Eduardo Silva +Date: Sun Sep 7 12:10:41 2014 -0600 + + Configure: enable check for libkqueue (linux emulation) + + Signed-off-by: Eduardo Silva + +commit 8f20986ec316fd560a53bf7ec0b3feab1f69691a +Author: Eduardo Silva +Date: Thu Sep 4 16:55:38 2014 -0600 + + API: export str_char_search() + + Signed-off-by: Eduardo Silva + +commit 987c2e2455fbed7fa9d07325778589e8dd1efd94 +Author: Eduardo Silva +Date: Sat Aug 30 23:07:02 2014 -0600 + + Config: export listener_add so the lib can use it + + Signed-off-by: Eduardo Silva + +commit 8e41fe656e925c49bde9f58e846689b2d7f21370 +Author: Eduardo Silva +Date: Sat Aug 30 21:05:07 2014 -0600 + + Cheetah: print mem allocator and little tweaks + + Signed-off-by: Eduardo Silva + +commit 5e39bd80c78e5253d25646059cd2d27f0912c1d9 +Author: Eduardo Silva +Date: Sat Aug 30 20:44:49 2014 -0600 + + Config: duplicate Listener value buffers for safe free + + Signed-off-by: Eduardo Silva + +commit abcea6e6c42179ecb4bdaf1eaef9a98c94a19208 +Author: Eduardo Silva +Date: Sat Aug 30 20:42:53 2014 -0600 + + Epoll: make listener set EPOLLRDHUP + + Signed-off-by: Eduardo Silva + +commit 9bd6b9edfef8e271f7989c10b9be0ec8e6fc5c8f +Author: Eduardo Silva +Date: Sat Aug 30 20:41:59 2014 -0600 + + Epoll: initialize event struct for listener + + Signed-off-by: Eduardo Silva + +commit 77e7f3a7c4e255082a89f1f9b2b50ccfdd84a97a +Author: Eduardo Silva +Date: Sat Aug 30 20:40:54 2014 -0600 + + Config: skip duplicated listeners + + Signed-off-by: Eduardo Silva + +commit 11f4b1cb307ca08f366ffff51445b4dedf36d3eb +Author: Eduardo Silva +Date: Sat Aug 30 20:26:09 2014 -0600 + + Config: do not free resources after load a Listener + + Signed-off-by: Eduardo Silva + +commit 1c1a173ac7462ca20ec9f211364fbe24e23aa35c +Author: Eduardo Silva +Date: Sat Aug 30 17:53:19 2014 -0600 + + Logger: fix API usage for new Listeners + + Signed-off-by: Eduardo Silva + +commit 6e78b9daf89964f50090c84e42e2b8e5df20c858 +Author: Eduardo Silva +Date: Sat Aug 30 17:50:13 2014 -0600 + + PolarSSL: fix data type + + Signed-off-by: Eduardo Silva + +commit b0c7f25886fa2138f103eb6ce7dab00973d3968a +Author: Eduardo Silva +Date: Sat Aug 30 17:48:06 2014 -0600 + + Cheetah: fix API usage on Listeners + + Signed-off-by: Eduardo Silva + +commit d2bf008233de3f25811b15943022881afab0365b +Author: Eduardo Silva +Date: Sat Aug 30 17:42:34 2014 -0600 + + Lib: fix API for new Listener stuff + + Signed-off-by: Eduardo Silva + +commit d1af5833ef6eda83e8942c362afa7c99c0cce3bd +Author: Eduardo Silva +Date: Sat Aug 30 17:27:30 2014 -0600 + + Core: fix API usage on new Listeners mode and small changes + + A new feature for multiple listeners was added but it did not follow + the Monkey pattern internals, this patch perform the following changes: + + - Listeners are not longer a linked list, instead a mk_list. + - Memory allocations/deallocations now use mk_mem_*() family. + - Renamed concepts of 'listen' to 'listener' and 'listeners'. + - Small function to register a new listener. + + Signed-off-by: Eduardo Silva + +commit f07ec2d17088922bcfd47cb8f0500d5d12d5f25d +Author: Eduardo Silva +Date: Tue Aug 26 11:05:14 2014 -0600 + + README: updates + + Signed-off-by: Eduardo Silva + +commit 506a7a18564be6bea8d61952384970088a20c7ac +Merge: 6dd20b3 ae3bffe +Author: Eduardo Silva +Date: Tue Aug 26 10:35:50 2014 -0600 + + Merge pull request #168 from ksonny/master + + Multiple listen sockets support + +commit 6dd20b3da0d5d120a60d7c751d7ecfbb068e1a66 +Author: Eduardo Silva +Date: Sat Aug 23 11:28:36 2014 -0600 + + Header: when using Chunked encoding, do not set Content-Length + + Signed-off-by: Eduardo Silva + +commit 51aed72efb590622de33071a555ebed94eb10ac3 +Author: Eduardo Silva +Date: Tue Aug 19 22:51:24 2014 -0600 + + API: export je_mallctl when JEMALLOC_STATS is set + + Signed-off-by: Eduardo Silva + + Conflicts: + include/monkey/mk_plugin.h + +commit df7aca1ae80d6ed5e856f944d4318b0ef8848711 +Author: Eduardo Silva +Date: Mon Aug 18 19:38:46 2014 -0600 + + Kernel: support Debian version format + + Signed-off-by: Eduardo Silva + +commit ae3bffeb93bfd75380b88ff32ab8c2f6f00f0a36 +Author: Sonny Karlsson +Date: Mon Aug 18 18:13:56 2014 +0200 + + mk_lib: Adds multi listening socket support. + +commit f364dbc90f81570ec289d1171e52c22fdbe51e65 +Merge: 491f7e8 7ad943c +Author: Eduardo Silva +Date: Mon Aug 18 09:51:20 2014 -0600 + + Merge pull request #167 from kaspersky/ldpreload + + Libmonkey: Stats and python bindings + +commit 491f7e8026da1f1f9dcaf82a3f27e8f459e726a9 +Author: Eduardo Silva +Date: Mon Aug 18 09:48:38 2014 -0600 + + CI: Make Travis to build the shared library version + + Signed-off-by: Eduardo Silva + +commit 9e764c5dd509bfeda929437eb450e1aabdd0a0ea +Author: Sonny Karlsson +Date: Mon Aug 18 17:45:04 2014 +0200 + + mk_lib: Fixes errors from changes made to server_config. + + Use config->listen.address and config->listen.port instead of + config->listen_addr and config->serverport. + + Signed-off-by: Sonny Karlsson + +commit 7ad943cf04aeb8cc15f0dc3f9e9b23e283fda441 +Merge: 3c8cddc 6125f57 +Author: kaspersky +Date: Mon Aug 18 17:59:53 2014 +0300 + + Merge branch 'master' of https://github.com/monkey/monkey into ldpreload + +commit 6125f57da0fca4c8be93ec745ab4243577733ccc +Merge: 7cf0dab e260a6c +Author: Eduardo Silva +Date: Mon Aug 18 08:47:52 2014 -0600 + + Merge pull request #166 from Denisss025/plugin_buff_size_export + + Plugin: add export to buffer_size function. + +commit a22d33668aeb3ab5f0006fe2f9f38df5476580d9 +Author: Sonny Karlsson +Date: Mon Aug 18 15:47:44 2014 +0200 + + plugins/logger: Fixes printing of listen addresses. + + Signed-off-by: Sonny Karlsson + +commit 4e8f93630bc4a9bc52f1fbf53f001559c998689e +Author: Sonny Karlsson +Date: Mon Aug 18 15:46:09 2014 +0200 + + plugins/cheetah: Fixes printing of listen addresses. + + Signed-off-by: Sonny Karlsson + +commit ce470b9ab428e60ad2f62f3c9777f32e023781d4 +Author: Sonny Karlsson +Date: Mon Aug 18 15:44:08 2014 +0200 + + mk_scheduler: Initialize mk_server_listen struct. + + Binds listening sockets when thread is launched. + Use stack-allocated mk_server_listen to start mk_epoll_loop(). + + Signed-off-by: Sonny Karlsson + +commit 3c5827e9e7079f3988711af3d130491241d3edd5 +Author: Sonny Karlsson +Date: Mon Aug 18 15:39:10 2014 +0200 + + mk_scheduler: Removes mk_scheduler_add_client*() methods. + + mk_scheduler_add_client_reuseport() and mk_scheduler_add_client() are + superseded by mk_server_listen_handler(). + + Signed-off-by: Sonny Karlsson + +commit 9dc8c01eeb9899c4e500c1b2029360b1dcb82512 +Author: Sonny Karlsson +Date: Mon Aug 18 15:34:17 2014 +0200 + + mk_scheduler: Adds mk_sched_next_target(). + + Used in mk_server to balance new connections. + + Signed-off-by: Sonny Karlsson + +commit 1a89da348e36997c0c3820c3248014b40554f031 +Author: Sonny Karlsson +Date: Mon Aug 18 15:30:48 2014 +0200 + + mk_epoll: Adds multisocket support to epoll loop. + + Changes arguments of mk_epoll_init() to accept a mk_server_listen + struct instead of a filedescriptor. + Adds code to register listening sockets from mk_server_listen to + epoll(). + Adds call to mk_server_listen_handler() when a new connection arrives. + Changes type of mk_api->epoll_init(). + + Signed-off-by: Sonny Karlsson + +commit 7961903fadc6dd198d63865eee824c0bf0d77690 +Author: Sonny Karlsson +Date: Mon Aug 18 15:21:11 2014 +0200 + + mk_server: Adds multisocket support for server loop. + + Adds support for multiple listening sockets when SO_REUSEADRESS is + unavailable. Uses poll() for event notification. + + Signed-off-by: Sonny Karlsson + +commit afb20cb1492328a8ebe30830d38327b11b4092c4 +Author: Sonny Karlsson +Date: Sat Aug 16 17:23:20 2014 +0200 + + monkey: Adopts port override for multiple listen sockets. + + Set port in first listen structure on configuration and removes other + listen directives when port specified on commandline. + + Signed-off-by: Sonny Karlsson + +commit 8b40ef64ea68e237461d7758e4212e61bcdcadd3 +Author: Sonny Karlsson +Date: Sat Aug 16 17:18:44 2014 +0200 + + plugin: Changes port argument type on mk_socket_server(). + + Signed-off-by: Sonny Karlsson + +commit 2c70a37dd00924095ceac6e30c675bdeef09edf5 +Author: Sonny Karlsson +Date: Sat Aug 16 17:12:06 2014 +0200 + + utils: Use first listen port on pid file name. + + Signed-off-by: Sonny Karlsson + +commit 9a76bc0ee8c7053bccb932728f35c91f5ce8428e +Author: Sonny Karlsson +Date: Mon Aug 18 16:26:35 2014 +0200 + + en/mconf: Removes Port and changes Listen directives. + + Signed-off-by: Sonny Karlsson + +commit d9fc68fb50dbe9c340748a527d5b0ee887f04f8c +Author: Sonny Karlsson +Date: Sat Aug 16 16:58:18 2014 +0200 + + mk_config: Parse multiple Listen configuration options. + + Signed-off-by: Sonny Karlsson + +commit e260a6ce1c1f404d195a44bfa4b35462804118f8 +Author: Denis +Date: Mon Aug 18 11:51:28 2014 +0400 + + Plugin: add export to buffer_size function. + + This patch fixes a problem where `mk_plugin_load_symbol` returns 0 + for `_mkp_network_io_buffer_size` function. + +commit 3c8cddcf996da4f3311c0e217148d611f8d11e7f +Merge: 55f2a7b 7cf0dab +Author: kaspersky +Date: Sun Aug 17 17:56:12 2014 +0300 + + Merge branch 'master' of https://github.com/monkey/monkey into ldpreload + +commit 7cf0dabd31878b58bd190e85fc87e3901265ea0b +Author: Eduardo Silva +Date: Sat Aug 16 20:30:02 2014 -0600 + + Epoll: validate when registering connection with the Scheduler + + In the epoll event loop, when registering a new connection with + the Scheduler, there were not check if this was successfull or not, + a common example may be a security plugin dropping a connection + at STAGE_10. + + This patch adds a validation on the return value when trying to register + a connection with the Scheduler. If it fails, the socket will be closed + right away. + + Signed-off-by: Eduardo Silva + +commit 869eb02be55dbe94729a2d76444122bbe62ed299 +Author: Eduardo Silva +Date: Sat Aug 16 20:16:40 2014 -0600 + + Mandril: remove trace msg + + Signed-off-by: Eduardo Silva + +commit d13e8d9d6a6764aad845f83dfb45ce4a274b9ac7 +Author: Eduardo Silva +Date: Sat Aug 16 17:34:15 2014 -0600 + + Macros: document NET macros parameters + + Signed-off-by: Eduardo Silva + +commit 8424837a4840473a478df333949fae303df36248 +Author: Eduardo Silva +Date: Sat Aug 16 17:27:27 2014 -0600 + + Mandril: fix network address reference + + Signed-off-by: Eduardo Silva + +commit b2d0e6f92310bb14a15aa2f8e96e1fb5379776dd +Author: Eduardo Silva +Date: Sat Aug 16 11:55:28 2014 -0600 + + Request: new request session flag to mark those files opened by FDT + + This patch aims to fix a potential DDoS problem that can be caused + in the server quering repetitive non-existent resources. + + When serving a static file, the core use Vhost FDT mechanism, but if + it sends a static error page it does a direct open(2). When closing + the resources for the same request it was just calling mk_vhost_close() + which did not clear properly the file descriptor. + + This patch adds a new field on the struct session_request called 'fd_is_fdt', + which contains MK_TRUE or MK_FALSE depending of how fd_file was opened. + + Thanks to Matthew Daley for report and troubleshoot this + problem. + + Signed-off-by: Eduardo Silva + +commit f9d0f8d4cbf7a799a9af2a1e70e6ed622a95b399 +Author: Matthew Daley +Date: Fri Aug 8 00:23:48 2014 +1200 + + Utils: allocate enough space to include the null terminator when URL-decoding URLs + + Signed-off-by: Matthew Daley + Signed-off-by: Eduardo Silva + +commit 1b5d6cc3fd03b513f6793bf56af0c8b02a3a69ff +Author: Matthew Daley +Date: Fri Aug 8 00:20:52 2014 +1200 + + Request: don't search off the end of the body buffer for query strings + + mk_string_char_search takes a length, not an end position. + + Signed-off-by: Matthew Daley + Signed-off-by: Eduardo Silva + +commit e2b2d78d62b524eb3c6245289ed9fc1362fdb054 +Author: Matthew Daley +Date: Fri Aug 8 00:11:02 2014 +1200 + + Method: correctly extract content length value from body buffer when pre-parsing + + The buffer offset and the end position passed to mk_string_copy_substr + is incorrect. + + Signed-off-by: Matthew Daley + Signed-off-by: Eduardo Silva + +commit 9ba97fa0029ab332110cd45ac123f129646fe822 +Author: Matthew Daley +Date: Fri Aug 8 00:06:08 2014 +1200 + + Mimetype: don't iterate off the start of the filename when looking for an extension + + Check the iterator position before checking for an extension. + + Signed-off-by: Matthew Daley + Signed-off-by: Eduardo Silva + +commit 115c4edd02a8b5aaa2d5aecdf8d8cfa8aa168d53 +Author: Matthew Daley +Date: Fri Aug 8 00:05:38 2014 +1200 + + Request: set correct path size when truncated + + If snprintf can't write the entire string out to the buffer, it will + still null-terminate it. Hence, the length of the string is one less + than the maximum passed in, not the maximum itself. + + Signed-off-by: Matthew Daley + Signed-off-by: Eduardo Silva + +commit 3f7fa6f73de8dea848443690774792690e61d41b +Author: Matthew Daley +Date: Sat Aug 16 07:38:14 2014 -0600 + + Request: unlink request node from cs->request_lists + + Signed-off-by: Eduardo Silva + +commit 58473846c364a4d4f160bd4d7955d97937c55462 +Author: Eduardo Silva +Date: Fri Aug 15 19:08:00 2014 -0600 + + Scheduler: on timeout, validate incomplete linked list (#163) + + Signed-off-by: Eduardo Silva + +commit 55f2a7be51ab0f0cc269d3cfb553591dc34e4bf5 +Merge: 9748d1e 295512e +Author: kaspersky +Date: Fri Aug 15 23:19:00 2014 +0300 + + Merge branch 'master' of https://github.com/monkey/monkey into ldpreload + +commit 9748d1e181706647e09f4293d53e41be10109573 +Author: kaspersky +Date: Fri Aug 15 23:18:10 2014 +0300 + + Libmonkey: Fix clock_gettime undefined + + Signed-off-by: kaspersky + +commit 295512e5ad2e5f857777381be5179f72d7af7054 +Author: Eduardo Silva +Date: Thu Aug 14 23:40:49 2014 -0600 + + PolarSSL: new get_bytes_avail() call + + Signed-off-by: Eduardo Silva + +commit c74f062cbfd25ca7c29dd35f5ffd56cca413ffda +Author: Eduardo Silva +Date: Thu Aug 14 23:38:20 2014 -0600 + + PolarSSL: let io_read return more bytes than consumed + + Signed-off-by: Eduardo Silva + +commit 8c9c5d61fade510bb90107ec173cb42cdc06ed01 +Author: Eduardo Silva +Date: Thu Aug 14 23:28:54 2014 -0600 + + Request: initialize max_read + + Signed-off-by: Eduardo Silva + +commit 00954f84880d642f592886015a944e58066df6d1 +Author: Eduardo Silva +Date: Thu Aug 14 23:12:35 2014 -0600 + + Core: adaptive network buffer size (Fix #163) + + Monkey stack allows to a plugin to handle the network operations + in a low level layer, at that area the plugins Liana and PolarSSL + are the main ones in charge to add support for plain communication + and further SSL. + + When working over plain sockets, the Networking plugin (liana) just + perform direct read from the system call to the clien_session buffer, + so it will read as of buffer capacity and then continue after each + event triggered by the Kernel. In the opposite side, when the plugin + requires some data processing after read(2) and before to return the + control to Monkey core, we may face a double-buffering and that is + the case of the PolarSSL plugin, where by obvious reasons it needs + it own buffer. + + By RFC defition, SSL/TLS defines a maximum transaction of 2^14 bytes, + which is 16KB, so if we get an Event notification from the Kernel and the + plugin processed a number of bytes grater that the available on the caller + buffer (client_session), we may ended up with some un-read bytes in the + SSL layer. + + This patch implements a few mechanisms to avoid the situation described: + + 1. The Plugin API at Networking level now implements a new callback + called 'buffer_size', so from now all Networking plugins requires + to implement it. Monkey core will call it with the purpose to ask if + the plugin is implementing it own buffering and the size of it. + + 2. When initializing plugins and check the Networking plugin buffer size, + If it returns something >= MK_REQUEST_CHUNK, the Configuration will be + set to that value. Note that from that moment every request will require + two memory allocations (a workaround for custom systems will in the next + patch). + + 3. When invoking a Network read, now a plugin may be able to return a greater + number of bytes requested by the caller. If this is faced, it means the + Network plugin have some pending data to be read, so now the Request handler + will consume that amount of data before to return to process other events. + + note: as said a new patch will come to fix the need of double-memory allocation + per request. + + Signed-off-by: Eduardo Silva + + Conflicts: + src/mk_http.c + src/mk_request.c + +commit 05024797ba95ba737a8cd6b647f20d8ebe8493e2 +Merge: fd2ac8f 1025daf +Author: Eduardo Silva +Date: Thu Aug 14 09:51:03 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit fd2ac8ffa428c54ef4b4909d8292174ee4f9c347 +Author: Eduardo Silva +Date: Thu Aug 14 09:49:23 2014 -0600 + + Core: new '-t' option to override TransportLayer from command line + + Signed-off-by: Eduardo Silva + +commit 3abb35c3d89b5dcaf66ec050781828532d403343 +Author: Eduardo Silva +Date: Tue Aug 12 19:22:38 2014 -0600 + + Epoll: move READ message after signal condition + + Signed-off-by: Eduardo Silva + +commit 775ca46644ffbae7317f49e5e9eeff188d61caa3 +Author: Eduardo Silva +Date: Fri Aug 8 20:00:03 2014 -0600 + + Scheduler: on TRACE mode when closing connection, validate cs. + + When trace mode is enabled through --trace, when the Scheduler will + close a connection, verify that no client_session associated exists + to the Scheduler entry, this condition may happen on bad API usage + by plugins. + + Signed-off-by: Eduardo Silva + +commit 2d43b5e8aa1d05755ac169b93fb075b448ef8514 +Author: kaspersky +Date: Wed Aug 13 19:29:54 2014 +0300 + + Libmonkey: Add usage instructions for stats + + Signed-off-by: kaspersky + +commit ee178e150ea80261f2538904fa1d76c476707b7a +Author: kaspersky +Date: Wed Aug 13 19:29:31 2014 +0300 + + Libmonkey: Improve documentation in python API. + + Signed-off-by: kaspersky + +commit 4e96b2fd7c34987738d5dea1abddaaf6ee1a28a6 +Author: kaspersky +Date: Sun Aug 10 23:15:08 2014 +0300 + + Libmonkey: Convert integer return value to boolean in monkey.configure() + + Signed-off-by: kaspersky + +commit 7c55d140c3b0cb7b946110e671135575afecfe68 +Merge: 36cac75 1025daf +Author: kaspersky +Date: Sun Aug 10 22:21:29 2014 +0300 + + Merge branch 'master' of https://github.com/monkey/monkey into ldpreload + +commit 36cac7523d1a102fcdfd63181e832121dddefc2f +Author: kaspersky +Date: Sun Aug 10 22:20:45 2014 +0300 + + Libmonkey: Update manpages + + Signed-off-by: kaspersky + +commit 1025daf4e36e29bd22a108fed08e7384569d863d +Author: Eduardo Silva +Date: Fri Aug 8 20:00:03 2014 -0600 + + Scheduler: on TRACE mode when closing connection, validate cs. + + When trace mode is enabled through --trace, when the Scheduler will + close a connection, verify that no client_session associated exists + to the Scheduler entry, this condition may happen on bad API usage + by plugins. + + Signed-off-by: Eduardo Silva + +commit 44beac406efaf89073fd10b25b140332a9691aa2 +Author: kaspersky +Date: Fri Aug 8 02:00:32 2014 +0300 + + Libmonkey: Fix 'content_len' field in python examples + + Signed-off-by: kaspersky + +commit 04516e3fc08e3cdc402aa20e7b7f807778e58a45 +Author: kaspersky +Date: Fri Aug 8 01:37:47 2014 +0300 + + Libmonkey: Fix a bizarre segmentation fault at libstats unload + + Apparently, an application with multiple threads or child processes + can cause a call to libstats destructor many times. Avoid closing + multiple times the same library handler. + + Signed-off-by: kaspersky + +commit 6324c2b06702c6c81b23ebfd1951d817bfbee0c1 +Author: kaspersky +Date: Fri Aug 8 00:53:35 2014 +0300 + + Libmonkey: Move liana plugin to right location for running tests + + Signed-off-by: kaspersky + +commit 0412b23ec12f7138f30992c98711120278c55df2 +Author: kaspersky +Date: Thu Aug 7 22:35:43 2014 +0300 + + Libmonkey: Fix equality test to mk_stats variable + + Signed-off-by: kaspersky + +commit 5a23be68e103e06526b248a8df89896e57a4d186 +Author: kaspersky +Date: Thu Aug 7 22:34:53 2014 +0300 + + Libmonkey: Remove hardcoded value in run-tests.sh + + Signed-off-by: kaspersky + +commit f412eb5d8e156b52dfe9d7aa96e583b3158ea401 +Author: kaspersky +Date: Thu Aug 7 22:34:30 2014 +0300 + + Libmonkey: Add stop server message in python examples + + Signed-off-by: kaspersky + +commit e3223cc6ea5147e6e872b04d29530cdd4e3c6426 +Merge: 9d569f1 7fc6a5f +Author: kaspersky +Date: Thu Aug 7 20:49:18 2014 +0300 + + Merge branch 'master' of https://github.com/monkey/monkey into ldpreload + +commit 9d569f1ec3a32bf1406f24109ca6704fd3d5aa2a +Author: kaspersky +Date: Thu Aug 7 20:09:00 2014 +0300 + + Libmonkey: Prettier print format for worker stats + + Signed-off-by: kaspersky + +commit 212da6ae5ed413f5dcc2de023802bc3fbe6f5151 +Author: kaspersky +Date: Thu Aug 7 20:08:17 2014 +0300 + + Libmonkey: Fix -DSTATS flag for stats Makefile + + Signed-off-by: kaspersky + +commit ceeb8e7e2f826bc592da8c5a53c585b6a0beef97 +Author: kaspersky +Date: Thu Aug 7 19:22:32 2014 +0300 + + Libmonkey: Add compile option for libstats in Makefile + + Signed-off-by: kaspersky + +commit 3e91987a70c756a2ef7413427d8044097d61f3c6 +Author: Eduardo Silva +Date: Thu Aug 7 09:55:32 2014 -0600 + + WIP: status completed crash + + Signed-off-by: Eduardo Silva + +commit c45d68f78371e00d115254e480909322e7fd490e +Author: kaspersky +Date: Wed Aug 6 22:13:43 2014 +0300 + + Libmonkey: Minor stats fix + + Signed-off-by: kaspersky + +commit 07d213126c9f0fe1fc4d30108a49e5e59486f957 +Author: kaspersky +Date: Wed Aug 6 22:06:15 2014 +0300 + + gitignore: more stuff to gitignore + + Signed-off-by: kaspersky + +commit 7fc6a5fbcee8b148ad389cbef22461f56882b6e0 +Author: Eduardo Silva +Date: Mon Aug 4 21:50:01 2014 -0600 + + Epoll: initialize unitilialized static epoll event + + Signed-off-by: Eduardo Silva + +commit 2b6326c97f3cb1a6117e738729820b6d0d27fade +Merge: 4b6145c 53e0ace +Author: Eduardo Silva +Date: Sun Aug 3 14:25:00 2014 -0600 + + Merge pull request #161 from txt-file/patch-1 + + identi.ca + +commit 53e0ace55e247cab7b4ebd99f63cb527a7d7f1fd +Author: txt.file +Date: Sun Aug 3 21:51:55 2014 +0200 + + README.md: removed identi.ca link + + The link gives only an error message. + +commit 3c2c1fa4edf5860e03a5c606d4cce75319783e9f +Author: kaspersky +Date: Sun Aug 3 22:32:13 2014 +0300 + + Libmonkey: Move python extension module to appropriate location. + + Signed-off-by: kaspersky + +commit 5f6f56d6cdc3993bedc0e426b71e83d292f90118 +Author: kaspersky +Date: Sun Aug 3 21:27:23 2014 +0300 + + Libmonkey: Check for python dependencies when building the python extension + + Signed-off-by: kaspersky + +commit a74b20803d8c5a8f780add67450b319ee832ca61 +Author: kaspersky +Date: Sun Aug 3 21:04:30 2014 +0300 + + Libmonkey: Remove inappropriate test + + Currently, monkey doesn't support multiple contexts at once, + so keeping a test which always fails isn't useful. + + Signed-off-by: kaspersky + +commit 7a72619218e4b0debb04b97b89d46265ad1fa47f +Merge: 06d5ccc 4b6145c +Author: kaspersky +Date: Sun Aug 3 20:56:17 2014 +0300 + + Merge branch 'master' of https://github.com/monkey/monkey into ldpreload + +commit 06d5cccc0129f01118cdffd4f1d9c0e7a0b84aef +Author: kaspersky +Date: Sun Aug 3 20:55:05 2014 +0300 + + Libmonkey: Add python docstrings to monkey module + + Signed-off-by: kaspersky + +commit 4b6145cc9b68e0a210db88d79b5d01f1207060d3 +Author: Eduardo Silva +Date: Fri Aug 1 20:14:14 2014 -0600 + + String: performance improvement converting uint64_t to string (4x) + + Based on the trick given by A. Alexandrescu on Facebook Engineering + blog, this patch replace the old mk_str_itop() with the faster + algorithm proposed. + + More details about the implementation here: + + https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920 + + Signed-off-by: Eduardo Silva + +commit 8f86e733e09427fa52e9e8258dca32431a845ac6 +Author: kaspersky +Date: Fri Aug 1 20:36:26 2014 +0300 + + Libmonkey: Fix configuration free crash in library after recent upstream changes + + Signed-off-by: kaspersky + +commit 4197d76aeba2d33a89c7df229005c22d66c73cbf +Author: kaspersky +Date: Fri Aug 1 20:34:05 2014 +0300 + + Libmonkey: Fix libmonkey.h path in run-tests.sh + + Signed-off-by: kaspersky + +commit 82c5b0d5144ab3acd522da5a01db0cb55e0098a6 +Author: kaspersky +Date: Fri Aug 1 17:14:34 2014 +0300 + + Libmonkey: Update run-tests.sh script for new include location + + Signed-off-by: kaspersky + +commit e5d0d3dcd8c010820bde691df1e9cee4307adf65 +Author: kaspersky +Date: Fri Aug 1 00:57:49 2014 +0300 + + Libmonkey: Fix mk_info new include location + + Signed-off-by: kaspersky + +commit ddbe93feb59beabfa418d2a7dcb3052747e09913 +Author: kaspersky +Date: Fri Aug 1 00:51:42 2014 +0300 + + Libmonkey: Move mk_stats.h to right location + + Signed-off-by: kaspersky + +commit d0b2ffe0219cd40ff26a93d0f48e8f47f4b71bc1 +Merge: ca3dbc7 41d018e +Author: kaspersky +Date: Fri Aug 1 00:47:05 2014 +0300 + + Merge with upstream + +commit ca3dbc7979ea62392a5a99d13a76ded49c9f8240 +Author: kaspersky +Date: Thu Jul 31 20:41:43 2014 +0300 + + Libmonkey: Trigger python bindings generation from configure + + Signed-off-by: kaspersky + +commit 41d018e45f10d12c708968e3f7038eb765ff46f1 +Author: Eduardo Silva +Date: Thu Jul 31 10:59:05 2014 -0600 + + Signal: if write fails, print error + + Signed-off-by: Eduardo Silva + +commit 793a38f16c9afd5c19ed6364dc77e9ac13a78a27 +Author: Eduardo Silva +Date: Thu Jul 31 10:57:29 2014 -0600 + + Request: fix debug messages when TRACE is enabled + + Signed-off-by: Eduardo Silva + +commit 80e722b242f8033a80310f5414a85fa7b2a5aec9 +Author: Eduardo Silva +Date: Wed Jul 30 21:58:09 2014 -0600 + + Dirlisting: make bootstrap theme the default one + + Signed-off-by: Eduardo Silva + +commit 7abe5d435172343282154266a59fd81d161d5d83 +Author: Eduardo Silva +Date: Wed Jul 30 21:57:50 2014 -0600 + + Dirlisting: new Bootstrap theme + + Signed-off-by: Eduardo Silva + +commit c1e0a2b90f4ebe6d99a1ed7cff1562883714eab3 +Author: Eduardo Silva +Date: Wed Jul 30 21:13:41 2014 -0600 + + Core: new 'one-shot' option to serve a directory without setup. + + This patch implements a new optional argument when start Monkey to + start serving a directory as a specific virtual host. This is only + useful when doing fast things locally mostly for testing. + + $ monkey -o /var/www/ + + Signed-off-by: Eduardo Silva + +commit 1e0d7224ac26b4b36bc4db127719887b8d096fa6 +Author: kaspersky +Date: Thu Jul 31 02:02:48 2014 +0300 + + Libmonkey: Implement worker-info bindings and test + + Signed-off-by: kaspersky + +commit 0f7bd7bd08b7f57482a2179594d34a7d4739df01 +Author: Eduardo Silva +Date: Tue Jul 29 09:06:00 2014 -0600 + + Help: fix text formatting + + Signed-off-by: Eduardo Silva + +commit f5b17aa60c57de1bc2fa75e614fe7e8ab521d79e +Author: Eduardo Silva +Date: Mon Jul 28 23:13:06 2014 -0600 + + Scheduler: optimization when timing out connections + + This patch adds a good improvement on performance when the event poll + system start checking for candidates to timed out connections. It adds + two main lists: + + - sched->status_queue: Open socket connections list that have not sent any data + - cs_incomplete: Client requests list that still have some pending data + + When the timer triggers the timeout check, now the Scheduler will look + over those two global lists at thread level, avoiding to check connections + that are in a good state. + + This performance improvement is faced when having several active connections + in the server. + + Signed-off-by: Eduardo Silva + +commit 3f8fa573563d3d15aad7fbc19224bb07087ed338 +Author: Eduardo Silva +Date: Mon Jul 28 20:44:41 2014 -0600 + + Epoll: use TimerFD interface to perform scheduler timeouts checks + + This patchs makes the scheduler and it epoll event loop to check + for timeout connections through the timerfd Linux interface. + + It improve performance of the polling event loop as the previous + version did a check after every epoll_wait(). + + Signed-off-by: Eduardo Silva + +commit 06ce79936423c34ef472e7d21bafaec99a7946b9 +Author: Eduardo Silva +Date: Mon Jul 28 15:30:55 2014 -0600 + + Virtual Host: validate dummy files (Fix #155) + + Signed-off-by: Eduardo Silva + +commit 9a1b8c354b170bab41466f04b8e6e77b98438a67 +Author: Vladimir Cernov +Date: Mon Jul 28 01:18:43 2014 +0300 + + Libmonkey: Port library test suite to python + + Signed-off-by: Vladimir Cernov + +commit 806bd166ebeaf8488a98d995cb7b4f502d5a3c11 +Author: Vladimir Cernov +Date: Mon Jul 28 01:17:53 2014 +0300 + + Libmonkey: Minor bugfixes to monkey.pyx + + Signed-off-by: Vladimir Cernov + +commit c2268adfed6f781b389715bbb205dc23ad10ffaa +Author: Nithin Saji +Date: Sun Jul 27 23:56:42 2014 +0530 + + LTT: update new header path + +commit e031e5d17851ba1f75be79b656066566d7596460 +Author: Eduardo Silva +Date: Sat Jul 26 20:52:44 2014 -0600 + + Plugin: remove dummy trace msg + + Signed-off-by: Eduardo Silva + +commit c67696609c3a73287a93f4a3480aae6eb4e6fc0a +Author: Eduardo Silva +Date: Sat Jul 26 20:08:17 2014 -0600 + + HTTP: Pipelining fix #145 and improvements. + + This patch fix a problem where Pipelining requests were not being + processed correctly and also do some improvements about how they are + handled internally. + + Signed-off-by: Eduardo Silva + +commit 2675f1a53299be72c03594cc498b295f14b69367 +Author: Vladimir Cernov +Date: Sun Jul 27 04:58:18 2014 +0300 + + Libmonkey: Implement examples for python also + + Signed-off-by: Vladimir Cernov + +commit 9f15f444f5ee25eeeffc34aa063ec0f2825f8fa9 +Author: Vladimir Cernov +Date: Sun Jul 27 04:55:24 2014 +0300 + + Libmonkey: Fixed segmentation fault in python bindings + + Signed-off-by: Vladimir Cernov + +commit 292c8f6dd3fb97ded34b1241ea97c2cd7b71c8aa +Author: Eduardo Silva +Date: Tue Jul 22 11:36:22 2014 -0600 + + Core: on exit, wait for threads. + + This path makes Monkey workers Joinable, upon exit it joins the + threads before to exit. Safe exit. + + Signed-off-by: Eduardo Silva + +commit 644f1b48740dcb6db55cd79af1191643dbf197b6 +Author: Eduardo Silva +Date: Tue Jul 22 10:26:00 2014 -0600 + + Core: zero leaks on exit without load + + Signed-off-by: Eduardo Silva + +commit 6296f0aadc172c67db7cdeb2be74ea1fb63ab96c +Author: Eduardo Silva +Date: Tue Jul 22 08:44:25 2014 -0600 + + Plugin: start releasing worker resources on exit + + Signed-off-by: Eduardo Silva + +commit 85265408ad5251b8a43052f6c9994f1570915dbf +Author: Eduardo Silva +Date: Tue Jul 22 08:25:56 2014 -0600 + + Proxy Reverse: fix mk_ptr usage + + Signed-off-by: Eduardo Silva + +commit 31b82584f9adfa6173a70b9581448ee3c683d3a2 +Author: Eduardo Silva +Date: Mon Jul 21 23:20:52 2014 -0600 + + Plugins: fix mk_ptr_XYZ() calls + + Signed-off-by: Eduardo Silva + +commit 11d9e17d707fcdf1a20fbb94edb0dcb127c53fbf +Author: Eduardo Silva +Date: Mon Jul 21 23:13:45 2014 -0600 + + Mimetype: remove old SAFE_FREE macro + + Signed-off-by: Eduardo Silva + +commit 6ddc5dbaac55a19469e2ab6ec78915e9f0fdcaf0 +Author: Eduardo Silva +Date: Mon Jul 21 23:11:44 2014 -0600 + + Memory: rename mk_ptr_XYZ() functions + + Signed-off-by: Eduardo Silva + +commit 32877c2bfbf615e0d0d1486f47d017abbb450222 +Author: Eduardo Silva +Date: Mon Jul 21 23:08:03 2014 -0600 + + Configure: cleanup + + Signed-off-by: Eduardo Silva + +commit 33ac7891f7e309c24f769d4e7bd0c22834fd92bb +Author: Eduardo Silva +Date: Mon Jul 21 22:58:49 2014 -0600 + + Mimetype: release default entry on exit + + Signed-off-by: Eduardo Silva + +commit 82fe17e1821f6931cb641ac6e65cdfc4284026c9 +Author: Eduardo Silva +Date: Mon Jul 21 22:27:22 2014 -0600 + + Core: release resources on exit, the saga continue + + this patch makes to release many resources from the core subsystems + such as epoll_states, vhost fdt, clock, buffers cache, etc. + + This is still work in process and the pending areas are: + + - Global scheduler + - Plugins -> per worker exit + - Plugin Events + - Plugins shared libraries + + Signed-off-by: Eduardo Silva + +commit 0f38f5e3ac52e172a87822e9151933d6d6823474 +Author: Eduardo Silva +Date: Mon Jul 21 20:40:26 2014 -0600 + + Core: minor memory releases on server exit + + Signed-off-by: Eduardo Silva + +commit c48ca4eb6e6c535e2c0061fea0ef70135e03ed69 +Author: Eduardo Silva +Date: Mon Jul 21 20:32:02 2014 -0600 + + Core: SAFE_FREE is now the default and not longer optional + + Signed-off-by: Eduardo Silva + +commit bac02a04f8e84f2fd282b33be7ab996bfbf12d33 +Author: Eduardo Silva +Date: Mon Jul 21 19:36:43 2014 -0600 + + Core: on SAFE_FREE, release list of mime types + + Signed-off-by: Eduardo Silva + +commit 56a67aa3cfe7e059c40a9a424ff3abbee111a016 +Author: Eduardo Silva +Date: Mon Jul 21 10:37:51 2014 -0600 + + Debian: adjust rules for packaging + + Signed-off-by: Eduardo Silva + +commit 4c5037cc43f30bf9b6d8ab958043410b4d6a0773 +Author: Eduardo Silva +Date: Mon Jul 21 10:27:47 2014 -0600 + + Configure: install headers to new path + + Signed-off-by: Eduardo Silva + +commit e92f318066ad5e69834b0e4b241ac81f03b7a947 +Author: Eduardo Silva +Date: Sun Jul 20 23:32:55 2014 -0600 + + Debian: prepare for v1.6.0 + + Signed-off-by: Eduardo Silva + +commit e10ca4560c07cc6f6efb1a919bcfbd0ed21f1c0f +Author: Eduardo Silva +Date: Fri Jul 18 15:35:58 2014 -0600 + + Debian: bump to 1.5.2 + + Signed-off-by: Eduardo Silva + + Conflicts: + debian/changelog + +commit 4d6bf1e10a5b65a73ec96fdf790c8d16d8ca7ff1 +Author: Eduardo Silva +Date: Sun Jul 20 23:01:59 2014 -0600 + + README: tweaks + + Signed-off-by: Eduardo Silva + +commit 10465318965aab16527fae5933568f72887b2887 +Author: Eduardo Silva +Date: Sun Jul 20 22:58:05 2014 -0600 + + README: move to Markdown mode + + Signed-off-by: Eduardo Silva + +commit 7de944bc3cb145200645fa73b0008b5bfdbcee24 +Author: Vladimir Cernov +Date: Mon Jul 21 07:46:48 2014 +0300 + + Libmonkey: Implement library callbacks in cython + + Signed-off-by: Vladimir Cernov + +commit b62a54a08376ebac22210c2a07f610913cf0d859 +Author: Eduardo Silva +Date: Sun Jul 20 21:42:26 2014 -0600 + + Configure: adjust main Makefile + + Signed-off-by: Eduardo Silva + +commit 67b66c8a6aa388fa43e746a7fe4e282b670322ca +Author: Eduardo Silva +Date: Sun Jul 20 21:22:48 2014 -0600 + + Header: add missing monkey.h + + Signed-off-by: Eduardo Silva + +commit 72551048ceb109bcb3407864a5257736d19457f4 +Author: Eduardo Silva +Date: Sun Jul 20 21:21:55 2014 -0600 + + Structure: add missing headers + + Signed-off-by: Eduardo Silva + +commit 8f41cb714ced0679f99b7b5d5e2ff8d2ffcb689a +Author: Eduardo Silva +Date: Sun Jul 20 20:55:25 2014 -0600 + + API: fix included headers + + Signed-off-by: Eduardo Silva + +commit 8da3e0570d07962952c4a63ad7ec352f8111e789 +Author: Eduardo Silva +Date: Sun Jul 20 20:48:08 2014 -0600 + + Proxy Reverse: fix API header + + Signed-off-by: Eduardo Silva + +commit 075795ac0747ff2f97f4bb75bcbb35a4efb49460 +Author: Eduardo Silva +Date: Sun Jul 20 20:37:46 2014 -0600 + + Configure: build path fixes + + Signed-off-by: Eduardo Silva + +commit 6a045c7eff74ef6b132fd51ad5f51afb95ae9c80 +Merge: 3cb9c1c ec7f216 +Author: Eduardo Silva +Date: Sun Jul 20 15:49:01 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 3cb9c1cf7da3f98423e9d568b738a2a49b16d087 +Author: Eduardo Silva +Date: Sat Jul 19 10:37:35 2014 -0600 + + HTTP: on using API sendfile, check EAGAIN + + Some plugins may not be too efficient to buffer outgoing data + and when implementing the sendfile callback on some cases it will + need to re-call the routine until the Kernel enqueue the data. + + Signed-off-by: Eduardo Silva + +commit f28b6255ab6410df02b8cde5c51de1e20c896bf6 +Author: Eduardo Silva +Date: Fri Jul 18 16:46:55 2014 -0600 + + HTTP: If-Modified-Since now allow clients from the future. + + Before this patch the server did not respect a conditional + If-Modified-Since if the value was higher than the system server + date. This patch makes this pass, not a bug but make it more + friendly with Checker tools. + + This patch also fix a QA script involved. + + Signed-off-by: Eduardo Silva + +commit db6949f5c43e420f5c38cad72fd6f8d42a8b483a +Author: Eduardo Silva +Date: Fri Jul 18 15:24:21 2014 -0600 + + Signal: restore handler for SIGPIPE. + + This problem was introduced on commit 84fa79eb. Without the SIGPIPE handler + the server will stop working when the Kernel trigger a SIGPIPE because of a + remote socket disconnection. + + Signed-off-by: Eduardo Silva + +commit 460df48d8abbecf02c17f192f298ec8fd910db23 +Author: Eduardo Silva +Date: Thu Jul 17 23:22:23 2014 -0600 + + Core: change name in banner + + Signed-off-by: Eduardo Silva + +commit f410faadae298fa53994d0e42cb19d4e9165c61e +Author: Eduardo Silva +Date: Sun Jul 13 11:53:49 2014 -0600 + + Mimetype: add SVG types (fix #153) + + Signed-off-by: Eduardo Silva + +commit 23dc017c67e8b09e2ca6a512e783f040bf118310 +Author: Eduardo Silva +Date: Sun Jul 20 15:48:02 2014 -0600 + + Structure: adjust configure script and mklib + + Signed-off-by: Eduardo Silva + +commit ec7f216dd2e03c974152f0e009b05b152c4f3bd2 +Author: Eduardo Silva +Date: Sat Jul 19 10:37:35 2014 -0600 + + HTTP: on using API sendfile, check EAGAIN + + Some plugins may not be too efficient to buffer outgoing data + and when implementing the sendfile callback on some cases it will + need to re-call the routine until the Kernel enqueue the data. + + Signed-off-by: Eduardo Silva + +commit c24e8a7344dd63375f55be4902c61fd3879f614f +Author: Eduardo Silva +Date: Fri Jul 18 16:46:55 2014 -0600 + + HTTP: If-Modified-Since now allow clients from the future. + + Before this patch the server did not respect a conditional + If-Modified-Since if the value was higher than the system server + date. This patch makes this pass, not a bug but make it more + friendly with Checker tools. + + This patch also fix a QA script involved. + + Signed-off-by: Eduardo Silva + +commit 67fe5023e7364106258816987c918108b8bac979 +Author: Eduardo Silva +Date: Fri Jul 18 15:24:21 2014 -0600 + + Signal: restore handler for SIGPIPE. + + This problem was introduced on commit 84fa79eb. Without the SIGPIPE handler + the server will stop working when the Kernel trigger a SIGPIPE because of a + remote socket disconnection. + + Signed-off-by: Eduardo Silva + +commit f23158d22398bffb0c7961312ca8225c84ee46d2 +Author: Eduardo Silva +Date: Thu Jul 17 23:22:23 2014 -0600 + + Core: change name in banner + + Signed-off-by: Eduardo Silva + +commit e5d9a21c5460df45e6d22e6eb8084623602f9b8e +Author: Vladimir Cernov +Date: Mon Jul 14 20:46:41 2014 +0300 + + Libmonkey: Implement python bindings for configuration + + Signed-off-by: Vladimir Cernov + +commit ed9f1f600702949bd68f992a2a658de82204da32 +Author: Eduardo Silva +Date: Sun Jul 13 11:53:49 2014 -0600 + + Mimetype: add SVG types (fix #153) + + Signed-off-by: Eduardo Silva + +commit 9d1ed470588d1ace4098c8b68d8059feea39a594 +Author: Eduardo Silva +Date: Sun Jul 13 11:47:24 2014 -0600 + + Structure: move headers to different location + + Signed-off-by: Eduardo Silva + +commit 0b80fd51f89ed7664297e6a45d9eafcf6280181d +Author: Eduardo Silva +Date: Mon Jul 7 12:12:41 2014 -0600 + + Configure: options to set PolarSSL specifics. + + This patch add 3 options to the configure script: + + --polarssl-headers Path to PolarSSL headers + --polarssl-library Path to PolarSSL library + --polarssl-debug-level Set PolarSSL debug level (not implemented) + + the first two aims to make things easier when using a custom or + compiled from scratch version of PolarSSL library. + + Signed-off-by: Eduardo Silva + +commit 0d22025603d23e15c9a6422d00b7b343bd2ddd90 +Author: Vladimir Cernov +Date: Mon Jul 7 01:03:08 2014 +0300 + + Libmonkey: Implement start and stop server python bindings + + Signed-off-by: Vladimir Cernov + +commit 5df26f337df3ad9f6378eb0a1c2188c05b1bb845 +Author: Vladimir Cernov +Date: Mon Jul 7 00:59:24 2014 +0300 + + Libmonkey: Fix stats configure for ldpreload + + Signed-off-by: Vladimir Cernov + +commit 53290a9464bcaebbbfcbf7426194d6ebef5e4d25 +Author: Vladimir Cernov +Date: Sun Jun 29 22:34:32 2014 +0300 + + Libmonkey: Add selectively compiling support for stats + + Signed-off-by: Vladimir Cernov + +commit ca5f6306807d7aabddd31576c9ec46e9beb15f20 +Author: Vladimir Cernov +Date: Sun Jun 29 20:49:17 2014 +0300 + + Libmonkey: Remove commented lines in mk_lib.c + + Signed-off-by: Vladimir Cernov + +commit b6a7ac0d254ef7be451dd037d47920a3585887f8 +Author: Vladimir Cernov +Date: Sun Jun 29 02:43:01 2014 +0300 + + Libmonkey: rework stats using LD_PRELOAD mechanism + + Signed-off-by: Vladimir Cernov + +commit e1b9177e1797a2de0185b125b28425869e10199b +Author: Vladimir Cernov +Date: Wed Jun 25 20:41:19 2014 +0300 + + Libmonkey: Reduce number of fields in stats data structure + + Signed-off-by: Vladimir Cernov + +commit a3205fefcc59a3ec06217d81d50c1721bf769642 +Author: Vladimir Cernov +Date: Wed Jun 25 20:32:30 2014 +0300 + + Libmonkey: enable kernel features in mklib_init + + Signed-off-by: Vladimir Cernov + +commit b245a7b7bea66ce84204137f5fff3e74aa0b582a +Author: Vladimir Cernov +Date: Sat Jun 21 16:19:57 2014 +0300 + + Libmonkey: Add configure option for enabling worker statistics + + Use ./configure --stats + + Signed-off-by: Vladimir Cernov + +commit 91566a7bb954ccbb384b2027e649cc86a41480d4 +Author: Vladimir Cernov +Date: Fri Jun 20 15:15:23 2014 +0300 + + gitignore: Add more stuff to gitignore + + Signed-off-by: Vladimir Cernov + +commit 6e6374f0eb8296ee42377c5c7358aa41d2521861 +Author: Vladimir Cernov +Date: Fri Jun 20 15:12:53 2014 +0300 + + Libmonkey: Compile and run library test suite from a bin/ directory + + Signed-off-by: Vladimir Cernov + +commit 989526d72e2044337935327c09bdb584f14502c8 +Author: Vladimir Cernov +Date: Fri Jun 20 14:57:34 2014 +0300 + + Libmonkey: Add library configuration retrieving functionality + + Also write a test for it. + + Signed-off-by: Vladimir Cernov + +commit 9c3b83de4c92e17f13c7fc51111748e6f6a63dfd +Author: Vladimir Cernov +Date: Fri Jun 20 02:42:49 2014 +0300 + + Libmonkey: Cosmetic fix to mimetype test + + Signed-off-by: Vladimir Cernov + +commit afbf12c7f3d2ab02eda15d64506f619c80412395 +Author: Vladimir Cernov +Date: Mon Jun 16 00:04:29 2014 +0300 + + Libmonkey: Trace mk_conn_read and mk_conn_write + + Signed-off-by: Vladimir Cernov + +commit 7aa33a64faef50c2f34dff47377a5be868fd336b +Author: Vladimir Cernov +Date: Sun Jun 15 20:32:10 2014 +0300 + + Libmonkey: Add counters to more functions + + mk_http_init, mk_plugin_event_read, + mk_plugin_event_write, mk_header_send + + Signed-off-by: Vladimir Cernov + +commit 95f483a874a1746500faa16ffdbefd22f16bdc61 +Author: Vladimir Cernov +Date: Sun Jun 15 19:54:35 2014 +0300 + + Libmonkey: Trace mk_plugin_stage_run, mk_http_range_parse and mk_sched_remove_client + + Signed-off-by: Vladimir Cernov + +commit 8df48c3a3e90bd59f2b83d101c9156d265ba4bde +Author: Vladimir Cernov +Date: Sun Jun 15 19:21:31 2014 +0300 + + Libmonkey: Add routing for printing worker stats + + Signed-off-by: Vladimir Cernov + +commit c4c70c1466a8bb4a272dc890a6f9f7d5e0036ab9 +Author: Vladimir Cernov +Date: Sun Jun 15 18:32:22 2014 +0300 + + Libmonkey: Add STATS_COUNTER_INIT_NO_SCHED + + Avoid redundant calls to pthread_getspecific + + Signed-off-by: Vladimir Cernov + +commit b383962ffc2d8905552657c1fd1856ee4d20da17 +Author: Vladimir Cernov +Date: Sun Jun 15 15:26:28 2014 +0300 + + Libmonkey: Add mk_sched_get_connection to stats + + Signed-off-by: Vladimir Cernov + +commit eb5235601a719ecccea9165780936259e1b25d27 +Author: Vladimir Cernov +Date: Sun Jun 8 18:13:26 2014 +0300 + + Libmonkey: Implement simple stat counters + + Signed-off-by: Vladimir Cernov + +commit 1a57d6a2d1dd8002acfe511f12deef97cdd6f897 +Author: Vladimir Cernov +Date: Sun Jun 8 00:00:38 2014 +0300 + + Libmonkey: Add option to select tests to run-tests.sh + + Signed-off-by: Vladimir Cernov + +commit 43da338886ccc8cbe2fbc7415de8b3a0f6493804 +Author: Vladimir Cernov +Date: Sat Jun 7 23:51:11 2014 +0300 + + Libmonkey: Add new test for worker info + + Signed-off-by: Vladimir Cernov + +commit 24b4c7eb8f30adcab0181787765caeffa30ad710 +Author: Vladimir Cernov +Date: Sat Jun 7 23:18:55 2014 +0300 + + Libmonkey: Fix warning in md5_check.h + + Signed-off-by: Vladimir Cernov + +commit 928cfc6e4c418528dcf0258a796eebe3ec2582d6 +Author: Vladimir Cernov +Date: Sat Jun 7 23:16:57 2014 +0300 + + Libmonkey: Add accepted_connections to mklib_worker_info + + Signed-off-by: Vladimir Cernov + +commit 8060135ec5507d1d2a2d998d301ce06c9333d0a3 +Author: Vladimir Cernov +Date: Sun Jun 1 20:45:17 2014 +0300 + + Scheduler: Close connection after MK_PLUGIN_STAGE_10 + + Signed-off-by: Vladimir Cernov + +commit cf078f7ab53f0fdce55562b91f7f651df8301b8b +Author: Vladimir Cernov +Date: Sat May 31 01:20:28 2014 +0300 + + Libmonkey: fix run-tests.sh + +commit 77c4b30bdb36550e7e7bf7d3eb9fe01f940e5f89 +Author: Felipe Reyes +Date: Tue Jun 24 22:34:43 2014 +0200 + + Update FSF address in a couple of headers + + The headers were using the old FSF address. + +commit 53504ed659b58b20f97de5286f6627039452fc01 +Merge: 57d2cda 4f3bd16 +Author: Eduardo Silva +Date: Sun Jun 22 23:45:18 2014 -0600 + + Merge branch 'fixwarning' of https://github.com/kaspersky/monkey + +commit 57d2cdad0b3acc9036dc39edad27a01bc10bcefd +Merge: 4df84b8 dbcaf87 +Author: Eduardo Silva +Date: Sun Jun 22 23:44:59 2014 -0600 + + Merge branch 'fixconfigure' of https://github.com/kaspersky/monkey + +commit 4df84b84f6000b436df042c808b3530e260d2e21 +Author: Felipe Reyes +Date: Sun Jun 22 23:32:14 2014 +0200 + + Fix date in changelog of spec file + + The day of the week was Thursday when it should be Tuesday, also the + email's domain of the author of that same changelog entry was fixed. + +commit 4f3bd16e92916bfece41173d3efd8b00968398e2 +Author: Vladimir Cernov +Date: Sun Jun 22 23:38:29 2014 +0300 + + Scheduler: Fix warning for implicit declaration + + Add declaration of mk_sched_check_capacity in mk_scheduler.h + + Signed-off-by: Vladimir Cernov + +commit dbcaf87889c8941dfe4bb8caf5e20bb5eb849a3b +Author: Vladimir Cernov +Date: Sun Jun 22 23:32:49 2014 +0300 + + configure: Fix compilation (".lo" objects) + + Signed-off-by: Vladimir Cernov + +commit 53af4faac9859a4c860b377ce1933c13fc7316a2 +Merge: 33334a6 b3a41d6 +Author: Eduardo Silva +Date: Fri Jun 20 11:04:30 2014 -0600 + + Merge branch 'lineindentfix' of https://github.com/kaspersky/monkey + +commit b3a41d60c7694c87586d75a3cbaf5ce9ab6d76c0 +Author: Vladimir Cernov +Date: Fri Jun 20 15:34:05 2014 +0300 + + Plugins: fix indentation of 2 lines in mk_plugin.c + + Signed-off-by: Vladimir Cernov + +commit 33334a6bdeed850ca412eb3f53bf80ddd80c5329 +Author: Eduardo Silva +Date: Thu Jun 12 20:20:55 2014 -0600 + + wip configure + + Signed-off-by: Eduardo Silva + +commit c7646b792d270401b82eac67c6c46d456de8ec18 +Author: Eduardo Silva +Date: Mon Jun 9 23:26:22 2014 -0600 + + WIP: overcapacity + + Signed-off-by: Eduardo Silva + +commit acad4a9d60bb552b25be6d5b00e817795fbebd8b +Merge: 93368c4 46a2552 +Author: Eduardo Silva +Date: Mon Jun 9 21:56:52 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 93368c4f6245eab247a8e7558ec9943772a15afe +Author: Eduardo Silva +Date: Mon Jun 9 16:24:08 2014 -0600 + + Core: fix user switch when running as root + + Previous this patch the core was using real user id as reference + to perform user switch but when restoring back this is not allowed + by the Kernel, the right way to do it is through the effective user ID. + + Signed-off-by: Eduardo Silva + +commit 7cf4d7f26ece9030179d3761931e625313e5f26a +Author: Eduardo Silva +Date: Mon Jun 9 15:53:41 2014 -0600 + + Core: switch user after Bind port. + + When running in newer systems with Kernel >= 3.9 and the SO_REUSEPORT + option is used, the server was switching to the unpriviledge user before + to bind the TCP port, this was generating problems when the port was <= 1024. + + Signed-off-by: Eduardo Silva + +commit 46a2552ddfaf9f7a4f77cc97e7df57cdf0b25abd +Merge: 06c02a4 dad05cd +Author: Eduardo Silva +Date: Mon Jun 9 10:01:44 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 06c02a4efd3f939008acbbdcfd91840851f85cf1 +Author: Eduardo Silva +Date: Mon Jun 9 10:01:31 2014 -0600 + + Configure: update banner + + Signed-off-by: Eduardo Silva + +commit dad05cd82200d92e81c134c6e1ffd11e2eb75786 +Author: Vladimir Cernov +Date: Sat May 31 00:31:43 2014 +0300 + + Libmonkey: fix mimes configuration file name + +commit b30bfcb8ee0e151443d93483cfbcf3d70535077f +Merge: 6bde0ec 5014aae +Author: Eduardo Silva +Date: Thu May 29 09:10:57 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 6bde0ec0f322614c685a66693e8a713a3d071126 +Author: Eduardo Silva +Date: Thu May 29 09:03:26 2014 -0600 + + Debian: bump version to 1.5.0-2 + + Signed-off-by: Eduardo Silva + +commit 29e93616d8ad05121af843fbdba5fe699cd98426 +Author: Eduardo Silva +Date: Thu May 29 08:54:01 2014 -0600 + + Debian: fix PidFile path + + Signed-off-by: Eduardo Silva + +commit 5014aaebe48c4a1ca1151f22bbaae0e46126b9c5 +Merge: b2e0eda 5e43e08 +Author: Eduardo Silva +Date: Wed May 28 21:54:46 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit b2e0eda8459ae99a3f2409add2dd95fb1acd1659 +Author: Eduardo Silva +Date: Wed May 28 21:54:37 2014 -0600 + + Config: allow empty sections, just warn them + + Signed-off-by: Eduardo Silva + +commit 5e43e08fde033ca62d1a79d6261985e6c69801f5 +Author: Eduardo Silva +Date: Mon May 26 15:52:18 2014 -0600 + + Development of v1.6 begins :) + + Signed-off-by: Eduardo Silva + +commit dd861f49dce2c78f13a45b82cb15f7ac5935a8cd +Author: Eduardo Silva +Date: Sun May 25 17:12:44 2014 -0600 + + Update ChangeLog for v1.5.0 + + Signed-off-by: Eduardo Silva + +commit 2b0f84634272a3b695587dfb9b21a2ba792b98eb +Author: Eduardo Silva +Date: Sun May 25 17:12:28 2014 -0600 + + Debian: drop dependency of old packages + + Signed-off-by: Eduardo Silva + +commit 9bf5eaf420f80bd130bc47168926d5bb48f0acee +Author: Eduardo Silva +Date: Sun May 25 15:31:32 2014 -0600 + + Configure: new argument to set PidFile in default monkey.conf + + Signed-off-by: Eduardo Silva + +commit 1bd7c17e0ec88b9bd20c29f68759952f5cf02446 +Author: Eduardo Silva +Date: Sat May 24 21:48:19 2014 -0600 + + Configure: bypass OpenEmbedded/Yocto arguments + + Signed-off-by: Eduardo Silva + +commit b3f21be68bca3f91857a49ceba4ed03245103462 +Author: Eduardo Silva +Date: Sat May 24 21:09:52 2014 -0600 + + HTML: set release date + + Signed-off-by: Eduardo Silva + +commit a479b9cb852ee686d3ef2ecae8fe1d6d9a9f2fba +Author: Eduardo Silva +Date: Sat May 24 16:39:49 2014 -0600 + + HTML: codename 'Emperor Tamarin' + + Signed-off-by: Eduardo Silva + +commit c9314b429091cec6b25c726cb209b9554d02a8a3 +Author: Eduardo Silva +Date: Sat May 24 15:58:38 2014 -0600 + + Proxy Reverse: do not remove FD from event pool on hangup + + Signed-off-by: Eduardo Silva + +commit 5aed3d31417d5b0efdd190570720647a679fcd85 +Author: Eduardo Silva +Date: Thu May 22 11:59:57 2014 -0600 + + HTML: prepare home page for next version + + Signed-off-by: Eduardo Silva + +commit 5f2c9addc7a3e3e9bf40a78b6558eaf7ea950ce4 +Author: Eduardo Silva +Date: Thu May 22 11:40:57 2014 -0600 + + FastCGI: do not remove the FD event on hangup (Monkey already did) + + Signed-off-by: Eduardo Silva + +commit 96b03a487b6731331f0092a98704f2c686b02241 +Author: Eduardo Silva +Date: Thu May 22 11:28:50 2014 -0600 + + Connection: on close, remove FD from Scheduler first + + when a hangup or connection close event is raised, the core + was invoking plugins callback directly and at the end the Scheduler + for removal procedure. + + This behavior ended up in a problem as the core is not aware about + what a plugin is doing after a callback, the plugin may "open" a + new connection (new FD) and the Kernel "may" assign the previous FD + closed number again, ending in a new close from the caller, e.g: + + - Plugin request to hangup a connection. + - Core receive the event and invoke callbacks for closing stuff. + - Plugin after cleanup decides to create a new FD. + - The Kernel assign the same FD number than the recently closed. + - Core retakes the control and let the Scheduler close everything + related to the original FD. + - The Core is closing "the NEW FD" messing up everything. + + After this patch the behavior is: + + - Plugin request to hangup a connection. + - Core receive the close event, invoke the Scheduler. + - The Scheduler cleanup all references for this FD, also it make + sure to remove event notifications from the epoll(7) loop. + - The Core invoke callbacks for closing stuff. + - Everything gets clean properly. + + Signed-off-by: Eduardo Silva + +commit 5ab55cb77e27a0159a8323822897dc3910959cc8 +Author: Eduardo Silva +Date: Wed May 21 21:59:11 2014 -0600 + + Plugin: do not re-set event list + + Signed-off-by: Eduardo Silva + +commit 83bf013de38df051bbdf20de6cfc604cca20411d +Author: Eduardo Silva +Date: Wed May 21 21:15:54 2014 -0600 + + Utils: fix return value check on libc_error() stuff + + Signed-off-by: Eduardo Silva + +commit 15f72c1ee5e0afad20232bdf0fcecab8d62a5d89 +Author: Eduardo Silva +Date: Tue May 20 11:22:19 2014 -0600 + + Mandril: check decoded URI (fix #92) + + Signed-off-by: Eduardo Silva + +commit f929f3e6dca9a0ff2e08dcd286346ef7e436c139 +Author: Eduardo Silva +Date: Mon May 19 11:00:16 2014 -0600 + + Doc: update Contributing file (lines length) + + Signed-off-by: Eduardo Silva + +commit 1c9538ed901643a03af601115f88c37f98bbf066 +Author: Eduardo Silva +Date: Mon May 19 10:55:50 2014 -0600 + + Debian: structure changes + + From now all plugins that do not depends on external dependencies are + distributed from the principal Monkey package. The only plugin that remains + as a separate package is monkey-polarssl. + + Signed-off-by: Eduardo Silva + +commit 2635bbb3d2b3dfb36835aee01a0b04b1c686ecb3 +Merge: 5f998e1 547b701 +Author: Eduardo Silva +Date: Tue May 13 08:56:27 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 5f998e189e293ab854e892012bd91b7710591734 +Author: Savita TS +Date: Tue May 13 18:58:25 2014 +0530 + + Signals: Removed unused variable 'old' in mk_signal_thread_sigpipe_safe() + + Removed the variable 'sigset_t old' in line 71 from function, 'void mk_signal_thread_sigpipe_safe()'. This patch removes the following warning caused during 'make': + + ------------------ WARNING --------------------- + mk_signals.c: In function ‘mk_signal_thread_sigpipe_safe’: + mk_signals.c:71:19: warning: unused variable ‘old’ [-Wunused-variable] + ------------------ WARNING --------------------- + + Signed-off-by: Savita TS + +commit 58fe3faf2fb919a5a2ac7fd68b3770a3c781b149 +Author: Eduardo Silva +Date: Mon May 12 00:17:43 2014 -0600 + + Virtual Host: add Redirect support (Fix #132). + + This patch implements a basic HTTP redirect functionality at + Virtual Host level, when the Redirect key is set on the Virtual + Host configuration file, for every incoming request the server + will perform a HTTP redirect. e.g: + + [SERVER] + Redirect http://monkey-project.com + + Signed-off-by: Eduardo Silva + +commit 547b701b2f69a6c6a89ff2887488dd8c6a73ee88 +Merge: 868d751 38f823e +Author: Eduardo Silva +Date: Tue May 13 08:54:08 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit 868d751d2cdfa2a00ad386b0085efd69f498c87c +Author: Eduardo Silva +Date: Mon May 12 00:17:43 2014 -0600 + + Virtual Host: add Redirect support (Fix #132). + + This patch implements a basic HTTP redirect functionality at + Virtual Host level, when the Redirect key is set on the Virtual + Host configuration file, for every incoming request the server + will perform a HTTP redirect. e.g: + + [SERVER] + Redirect http://monkey-project.com + + Signed-off-by: Eduardo Silva + +commit 3df0f7ebc6fce3976edd7fc6fbabb8f7619748c7 +Author: Savita TS +Date: Tue May 13 19:05:17 2014 +0530 + + Socket: Added a variable to accept return value of read() in 'mk_socket_tcp_autocorking()' + + Added a variable to accept the return value of read() in line 266 in function 'mk_socket_tcp_autocorking()'. This patch removes the following warning that arises during 'make' : + + --------------- WARNING -------------------- + mk_socket.c: In function ‘mk_socket_tcp_autocorking’: + mk_socket.c:265:9: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result] + --------------- WARNING -------------------- + + Signed-off-by: Savita TS + +commit b08cdddb2e4383ac96689a4a3739713c570e3bb2 +Author: Savita TS +Date: Tue May 13 18:58:25 2014 +0530 + + Signals: Removed unused variable 'old' in mk_signal_thread_sigpipe_safe() + + Removed the variable 'sigset_t old' in line 71 from function, 'void mk_signal_thread_sigpipe_safe()'. This patch removes the following warning caused during 'make': + + ------------------ WARNING --------------------- + mk_signals.c: In function ‘mk_signal_thread_sigpipe_safe’: + mk_signals.c:71:19: warning: unused variable ‘old’ [-Wunused-variable] + ------------------ WARNING --------------------- + + Signed-off-by: Savita TS + +commit 38f823e329a6a757a255f981a073edda7bad53c8 +Author: Eduardo Silva +Date: Mon May 12 00:17:43 2014 -0600 + + Virtual Host: add Redirect support (Fix #132). + + This patch implements a basic HTTP redirect functionality at + Virtual Host level, when the Redirect key is set on the Virtual + Host configuration file, for every incoming request the server + will perform a HTTP redirect. e.g: + + [SERVER] + Redirect http://monkey-project.com + + Signed-off-by: Eduardo Silva + +commit 133c62d5635bd3c4181b3cf1fa8fc11640d3f684 +Author: Eduardo Silva +Date: Fri May 9 14:50:54 2014 -0600 + + Doc: update INSTALL + + Signed-off-by: Eduardo Silva + +commit 84fa79eb42617d57207bba784157f5b48ce6c25d +Author: Eduardo Silva +Date: Fri May 9 10:40:49 2014 -0600 + + License: core and plugins are now under the Apache License v2.0 + + Signed-off-by: Eduardo Silva + +commit 50d34fca7dc3ff6af4e2de492ab06c5e6d136b83 +Author: Eduardo Silva +Date: Sun May 4 19:58:35 2014 -0600 + + CGI: make sure the Interpreter can be used, otherwise use status 500 + + Signed-off-by: Eduardo Silva + +commit d63286e36abce81f1e6aca261e1534d4e96edeb7 +Author: Eduardo Silva +Date: Sat May 3 17:18:33 2014 -0600 + + CI: enable IRC notifications + + Signed-off-by: Eduardo Silva + +commit 0698068328e660270fc3d419bb8fc0142f398893 +Author: Eduardo Silva +Date: Sat May 3 17:00:41 2014 -0600 + + CI: disable PolarSSL due to test box problem + + Signed-off-by: Eduardo Silva + +commit 7882a48badc0fd22fc425d84deb673cfcda5744a +Author: Eduardo Silva +Date: Sat May 3 16:54:43 2014 -0600 + + CI: add PolarSSL dependency and compile SSL Plugin + + Signed-off-by: Eduardo Silva + +commit 60296a159ab9f805d25daf8736b880b790503428 +Author: Eduardo Silva +Date: Sat May 3 16:43:54 2014 -0600 + + CI: add Travis integration + + Signed-off-by: Eduardo Silva + +commit df6f67ceff090c5202107060aba87212ff99ce0e +Author: Eduardo Silva +Date: Fri May 2 21:29:31 2014 -0600 + + Auth: move mk_passwd code into tools/ for clean build + + Signed-off-by: Eduardo Silva + +commit a4225df6ff7e065ce9ee1a76846fef939106eb8b +Author: Eduardo Silva +Date: Fri May 2 14:33:17 2014 -0600 + + Auth: make mk_passwd work without Monkey internals. + + This patch adds a few workarounds to make mk_passwd avoid Monkey + internals about memory allocations and string lines dependencies. + + Signed-off-by: Eduardo Silva + +commit 4a4ae564079574fcf7ed81ac07808d9025f33c7b +Author: Eduardo Silva +Date: Wed Apr 30 22:18:59 2014 -0600 + + Request: optimize initialization of session_request + + Signed-off-by: Eduardo Silva + +commit 2371f385c9b89208a8724821d8988142599c1a79 +Author: Eduardo Silva +Date: Tue Apr 29 16:42:12 2014 -0600 + + Lib: fix parameters for mk_socket_server() call + + Signed-off-by: Eduardo Silva + +commit f1876018eb32cf3c1cf7cdf77e34fea203fdbad0 +Author: Eduardo Silva +Date: Tue Apr 29 16:35:30 2014 -0600 + + Debian: minor updates + + Signed-off-by: Eduardo Silva + +commit 409c5fb0e9636052acd4a41013694372739a1ba0 +Author: Eduardo Silva +Date: Mon Apr 28 21:12:28 2014 -0600 + + Doc: CONTRIBUTING.md: specify number of chars per line + + Signed-off-by: Eduardo Silva + +commit 8b97b01ef591186929b6d59dffef2988b4808526 +Author: Vladimir Cernov +Date: Tue Apr 29 00:00:36 2014 +0300 + + Auth: Rewrite mk_passwd in C (close #131). + + This patch drops the mk_passwd python script from auth plugin, by adding an + equivalent C implementation. + + The C implementation makes use of Monkey functions, whenever possible, so it + links with Monkey objects. + + In order to make the linking possible, some minor modifications had to be made + to the configure script, monkey.c and mk_config.c source files. + + Signed-off-by: Vladimir Cernov + +commit 9e8444445daa2a2ad12d774250ec1bbe924e8362 +Author: Eduardo Silva +Date: Mon Apr 28 10:12:43 2014 -0600 + + Socket: fix array index. + + Signed-off-by: Eduardo Silva + +commit b4ef860e3f2edd1de6d0626c19a56730e7104428 +Author: Eduardo Silva +Date: Mon Apr 28 10:05:48 2014 -0600 + + PolarSSL: Enable REUSEPORT feature + + Signed-off-by: Eduardo Silva + +commit e2ede773d0341f65e7be99887c699f8af206d6ee +Author: Sonny Karlsson +Date: Fri Apr 25 04:29:44 2014 +0200 + + PolarSSL: Enable session cache. + + Sets session cache on ssl context. + Moves pk_context to local thread context to allow use of polarssl + compiled without threading support. + + Signed-off-by: Sonny Karlsson + +commit c51124d1ab2e1900b4eee4a9ef8adab58c59295b +Author: Sonny Karlsson +Date: Fri Apr 25 04:28:26 2014 +0200 + + PolarSSL: Fixes error where connection isn't terminated on error. + + Signed-off-by: Sonny Karlsson + +commit 3b22521b6fed4d1f13a62f898a8b379168bde97e +Author: Sonny Karlsson +Date: Fri Apr 25 04:00:40 2014 +0200 + + PolarSSL: Drops polarssl v1.1 support. + + Signed-off-by: Sonny Karlsson + +commit c8dba9b191784af72c82e4884520e4919b706661 +Author: Eduardo Silva +Date: Sat Apr 26 23:21:52 2014 -0600 + + Scheduler: enable TCP_DEFER_ACCEPT on REUSEPORT mode + + Signed-off-by: Eduardo Silva + +commit 0da162a6cae7c7c5616afda06b18973c9fcb643d +Author: Eduardo Silva +Date: Sat Apr 26 23:06:54 2014 -0600 + + Cheetah: on status command, print new Kernel features + + Signed-off-by: Eduardo Silva + +commit a94fa2e04f8b4508e62f4c92950c951986c1b430 +Author: Eduardo Silva +Date: Sat Apr 26 23:05:09 2014 -0600 + + Plugin API: export mk_kernel_features_print + + Signed-off-by: Eduardo Silva + +commit 9a6ad8a67a09e72d96ca7b2d740569f39a1494dd +Author: Eduardo Silva +Date: Sat Apr 26 22:40:37 2014 -0600 + + HTTP/Server: use new server_cork_flag() interface + + Signed-off-by: Eduardo Silva + +commit 7aed9dd5f4685a5481209e898a905918e1fb7759 +Author: Eduardo Silva +Date: Sat Apr 26 22:36:11 2014 -0600 + + Config: check kernel_features flag for REUSEPORT + + Signed-off-by: Eduardo Silva + +commit de083846ecece14949b66575851b66b411efd54f +Author: Eduardo Silva +Date: Sat Apr 26 22:31:49 2014 -0600 + + Kernel: remove unused variable + + Signed-off-by: Eduardo Silva + +commit 9d7a8cda6b967abd24e34b0369dfcae1ded7885a +Author: Eduardo Silva +Date: Sat Apr 26 22:24:05 2014 -0600 + + Kernel: new features interfaces and core flags + + Signed-off-by: Eduardo Silva + +commit fcfba4903f61b33e01124bbc8a60ea47f4d94b0a +Author: Eduardo Silva +Date: Sat Apr 26 10:19:11 2014 -0600 + + Scheduler: Little improvements over REUSEPORT implementation. + + Signed-off-by: Eduardo Silva + +commit d1da249a0b5e8f5765ea8031919fb32e93c57cb8 +Author: Eduardo Silva +Date: Thu Apr 24 22:57:43 2014 -0600 + + Scheduler: new REUSEPORT balancing method/architecture. + + Starting from Linux Kernel 3.9, there is a new TCP/UDP socket option which allows + to bind same port and address from multiples threads (or any instance under the + same process context). + + This patch implements the SO_REUSEPORT TCP Flag if the running Kernel is >= 3.9, + so on that mode each working thread create it own socket that bind the same address, + with this implementation we reduce the number of system calls involved when a new + connection arrives, avoid lookup the lowest loaded thread and also we allow the + Kernel to perform a better Scheduling on SMP systems that requires to scale. + + If the detected Kernel is lower than 3.9, it will use the old Fair Balancing + mechanism. + + Signed-off-by: Eduardo Silva + +commit 27878547891bdac7456fbae2c60942434d40e065 +Author: Eduardo Silva +Date: Thu Apr 24 19:51:57 2014 -0600 + + Config: fix typo in mk_kernel_runver + + Signed-off-by: Eduardo Silva + +commit 17df1070b417cca6d13ee3e863c3680830d27960 +Author: Eduardo Silva +Date: Thu Apr 24 09:24:44 2014 -0600 + + Socket: TCP Auto Corking only on Linux >= 3.14.0 + + Signed-off-by: Eduardo Silva + +commit 697341887751ac74f0e477754b18229e7c05d952 +Author: Eduardo Silva +Date: Wed Apr 23 23:51:30 2014 -0600 + + Socket: enable TCP_FASTOPEN only on Kernel >= 3.7.0 + + Signed-off-by: Eduardo Silva + +commit 2c38ddb3178aefbe9122702309d2bfa183a11ac4 +Author: Eduardo Silva +Date: Wed Apr 23 23:36:22 2014 -0600 + + Kernel: new interface to query Linux Kernel version. + + This patch implements two things: + + 1. Macro MK_KERNEL_VERSION() to return an unique representative integer + of the Linux Kernel version given the 3 common values. + 2. Function mk_kernel_version() that returns the Kernel version from + the running system. + + Signed-off-by: Eduardo Silva + +commit 9b6f016df7d68f7a8fbd67b7f0b1aaf4eb597248 +Merge: ccd9d24 30c050b +Author: Eduardo Silva +Date: Tue Apr 15 09:27:33 2014 -0600 + + Merge pull request #128 from tssavita/patch1_epoll + + Epoll: Reporting when event EPOLLRDHUP occurs for an fd + +commit 30c050b50f9940d9743c7b711fd10310764e3d04 +Author: Savita TS +Date: Tue Apr 15 17:21:56 2014 +0530 + + Reporting when event EPOLLRDHUP occurs in a file descriptor registered in an epoll instance + +commit ccd9d24e94e8cc5a0ca4053c1e9983edfe27dbfa +Merge: 06fb6c9 d253f45 +Author: Eduardo Silva +Date: Tue Apr 8 10:42:57 2014 -0600 + + Merge pull request #127 from tssavita/http-conditionals + + HTTP: Removing unnecessary conditionals from src/mk_http.c + +commit d253f454ef2e0f313ebbcdd40bd45b36b6253516 +Author: Savita TS +Date: Tue Apr 8 17:54:38 2014 +0530 + + Removing unnecessary conditionals from src/mk_http.c + +commit 06fb6c9f8968fbc358551f571febc20a57a4f336 +Merge: ba0fb33 635c130 +Author: Eduardo Silva +Date: Sun Apr 6 08:05:48 2014 -0600 + + Merge pull request #125 from TamerTas/master + + HTTP: Fix comments' grammar and punctuation in mk_http.c + +commit 635c1304dd803e611e673521f6b3f389de6438e9 +Author: TamerTas +Date: Sun Apr 6 14:25:29 2014 +0300 + + HTTP: Fix comments' grammar and punctuation in mk_http.c + +commit ba0fb3326560c2d8ba0af7fabfe6bcdf4c0d60ca +Author: Eduardo Silva +Date: Wed Apr 2 23:31:17 2014 -0600 + + Socket: handle new Kernel 3.14 tcp_autocorking feature. + + the server use the TCP_CORK feature to instruct the Kernel to + wait for some data before dispatch it on the socket buffer. This + is a common approach when sending HTTP response headers and then + a content body (file data). + + The Linux Kernel 3.14 introduce a new feature called 'tcp autocorking', + it basically do TCP_CORK by default based on specific conditions of + each socket status. This is a good approach to let the Kernel to decide + when it can be used and also it avoid user space to invoke two system + calls to enable/disable the TCP_CORK. + + This patch makes the Server to validate if the new feature exists on the + running Kernel and if is enabled, it will disable all manual corking done, + for more details about how it works at Kernel level refer to the following + patch: + + http://goo.gl/AMFIuI + + Note: on an older Kernel it will continue working as usual. + + Signed-off-by: Eduardo Silva + +commit 1b486a5d0930d13b042d2e4128455a3e8bd9f022 +Merge: 698f2a5 3946861 +Author: Eduardo Silva +Date: Wed Apr 2 13:32:47 2014 -0600 + + Merge pull request #115 from kaspersky/master + + Monkey configuration: add program options for configuration paths + +commit 698f2a554845659645835f6b978004f98ec7c708 +Merge: 1b16611 7ddf7f9 +Author: Eduardo Silva +Date: Wed Apr 2 13:32:10 2014 -0600 + + Merge pull request #123 from kaspersky/systemd + + Systemd: add unit file monkey.service + +commit 7ddf7f99126487a94064e559edfd570c7e92b745 +Author: Vladimir Cernov +Date: Mon Mar 31 23:40:46 2014 +0300 + + Systemd: add unit file monkey.service + + This patch adds a unit file for systemd init system, as described in issue #39. + The installation of the unit file is triggered by the "--systemddir" passed to configure script, in the following way: + $ ./configure # no systemd unit file deployed + $ ./configure --systemddir # Unit file systemd.service is created with default installation path "/lib/systemd/system" + $ ./configure --systemddir=CUSTOM_PATH # Unit file systemd.service is created with installation path "CUSTOM_PATH" + + The unit file is deployed is deployed using "make install" command, so you should also specify "--prefix" option for configure. + + I tested the patch on archlinux and fedora (systemd init system) deploying the unit file in different system paths. The following commands were successful: + $ service monkey start + $ systemctl start monkey.service + + I also tested on ubuntu (upstart init system), ensuring nothing is broken. + + Signed-off-by: Vladimir Cernov + +commit 1b16611c40d763160a41646cabd0173a08d5ca00 +Merge: d289b9d e74ff9f +Author: Eduardo Silva +Date: Tue Apr 1 10:41:45 2014 -0600 + + Merge pull request #122 from tssavita/sched_plugin + + Scheduler-Plugin: Moving and renaming function mk_sched_worker_info() + +commit e74ff9f8f96726a4ef4db63032680fb2ca3cbf90 +Author: Savita TS +Date: Tue Apr 1 21:53:47 2014 +0530 + + Scheduler: Moving and renaming function mk_sched_worker_info() to mk_plugin_sched_get_thread_conf + +commit d289b9d1e307e7ec8b865cfd2cb8d2cb6fd4b520 +Merge: adc4ccc c253b36 +Author: Eduardo Silva +Date: Mon Mar 31 11:03:14 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit adc4ccc42780ff96e03257cb625d7441f556d7b0 +Author: Eduardo Silva +Date: Mon Mar 31 11:00:58 2014 -0600 + + Memory: upgrade Jemalloc to 3.6.0 + + Signed-off-by: Eduardo Silva + +commit c253b3675fe90361fef91139127db7c76f55f32d +Author: Eduardo Silva +Date: Sat Mar 29 11:22:53 2014 -0600 + + Epoll: when adding a new FD, return status value + + Signed-off-by: Eduardo Silva + +commit 3400e110bc3c5f6e24fce0ef1f3c0e77cd9d745f +Author: Eduardo Silva +Date: Thu Mar 27 22:28:36 2014 -0600 + + Vhost: skip files ending in '~' (editor backups) + + Signed-off-by: Eduardo Silva + +commit 11d7459f9c719433244d0a5d7fd2bd7b61c77b0d +Merge: f5ce9bf 0f51130 +Author: Eduardo Silva +Date: Thu Mar 27 21:14:20 2014 -0600 + + Merge pull request #120 from tssavita/iov_patch2 + + IOV: store buffer type from char changed to void in function 'void _mk_iov_set_free' + +commit 0f511308bd443f72b5bc7b451870a4e363ac8029 +Author: Savita TS +Date: Fri Mar 28 04:33:51 2014 +0530 + + IOV: store buffer type changed to void in function '_mk_iov_set_free' + +commit f5ce9bfcb83e53ee6d043b52c918bc33272d00b9 +Author: Eduardo Silva +Date: Mon Mar 24 22:38:35 2014 -0600 + + IOV: store buffer using void data type instead of char + + Signed-off-by: Eduardo Silva + +commit 3946861b5b5b4e0755b47c39d0f1fbcc87995542 +Author: Vladimir Cernov +Date: Wed Mar 19 23:50:27 2014 +0200 + + Monkey configuration: add program options for configuration paths + + This patch solves the issue #36. + + 4 additional program arguments were added for specifying different + configuration files and directories: + + -m, --mimes-conf-file # path to monkey.mime + -P, --plugins-conf-dir # path to plugins configuration directory + -l, --plugin-load-conf-file # path to plugins.load file + -S, --sites-conf-dir # path to sites directory + + Each option has a default value. + + Monkey will try to interpret the options by prepending their values + to default configuration directory. If the obtained path does not + exist, the options will be treated as absolute paths. + + I tested using ./configure --prefix=path --plugdir=--path2 and + default build. I was able to load different configuration files + from custom locations with custom names, overriding the default + names which were hardcoded in Monkey. + + The patch also contains an unrelated fix to: + + bin/monkey --confdir # was not working, while provided by --help + + Signed-off-by: Vladimir Cernov + +commit 2d5e48d7697dd6b1ea3aaed48406d74e5d3ab097 +Author: Eduardo Silva +Date: Mon Mar 17 23:13:14 2014 -0600 + + Epoll: Fix not catched peer close after events modifications (EPOLLRDHUP) + + If a socket created on the event loop did some events modifications and + the peer closed the connection, the core did not trap this event. This + patch re-enable the EPOLLRDHUP flag. + + Signed-off-by: Eduardo Silva + +commit 102b45e247b4b46d7499f34d8e160f2a22d33eee +Author: Eduardo Silva +Date: Sat Mar 15 15:51:55 2014 -0600 + + Configure: fix broken plugins path on previous contributor patch + + Signed-off-by: Eduardo Silva + +commit 42a3a8e95d02c14e5f2396e0932ec6b51e634b05 +Author: Eduardo Silva +Date: Mon Mar 10 13:22:05 2014 -0600 + + Doc: update CONTRIBUTING with 'Commit Changes' info + + Signed-off-by: Eduardo Silva + +commit cffdbc9ed802025a4f2b7a0894388f5ccb517b36 +Merge: f0e78d7 5458096 +Author: Eduardo Silva +Date: Mon Mar 10 13:00:20 2014 -0600 + + Merge pull request #109 from kaspersky/master + + Libmonkey: fix build and add test for mimetype + +commit 545809698864309c9c49dc4874f7cdae4596082a +Author: Vladimir Cernov +Date: Mon Mar 10 20:08:50 2014 +0200 + + Libmonkey: fix build and add test for mimetype + +commit f0e78d7f1e8e482035ded9e3199f2d575791c2f3 +Author: Eduardo Silva +Date: Sun Mar 9 21:31:48 2014 -0600 + + Doc: Add CONTRIBUTING.md file + + Signed-off-by: Eduardo Silva + +commit c17f98155104412e01e455874f63c81b04269944 +Merge: b11236b 2eb580c +Author: Eduardo Silva +Date: Sat Mar 8 16:02:29 2014 -0600 + + Merge pull request #103 from matematik7/master + + Linux Trace: fix compile issue + +commit 2eb580ce3ba890540461d9afc25e28204e5588f2 +Author: matematik7 +Date: Sat Mar 8 22:29:35 2014 +0100 + + Linux Trace: Fix compile issue + +commit b11236bedd56672b56fc3aa235428455e6041071 +Author: Eduardo Silva +Date: Wed Mar 5 13:34:59 2014 -0600 + + Debian: bump to v1.5.o (development) + + Signed-off-by: Eduardo Silva + +commit fab1e41130f6ca76add03df8ed3f51b1325fcd24 +Author: Eduardo Silva +Date: Wed Mar 5 11:46:26 2014 -0600 + + Lib: upgrade test lib version + + Signed-off-by: Eduardo Silva + +commit a3a99b141d0508ef33593e10e4df52a3abdcf04d +Author: Eduardo Silva +Date: Sun Mar 2 23:22:07 2014 -0600 + + Epoll: testing new MK_EPOLL_HANGUP mode + + Signed-off-by: Eduardo Silva + +commit a123d949d03906cfc9f27a5489dc3baa96b5338d +Author: Eduardo Silva +Date: Thu Feb 6 11:31:41 2014 -0600 + + Plugins: use new mk_ptr_t data type + + Signed-off-by: Eduardo Silva + +commit b79465eeaf8ed06727b01fc8359edd9850a5b115 +Author: Eduardo Silva +Date: Thu Feb 6 11:30:01 2014 -0600 + + Core: use new mk_ptr_t data type + + Signed-off-by: Eduardo Silva + +commit b353825456fb522bf335ac831570e543e9e2dcf6 +Author: Eduardo Silva +Date: Thu Feb 6 11:26:49 2014 -0600 + + Memory: rename datatype mk_pointer to mk_ptr_t + + Signed-off-by: Eduardo Silva + +commit d77504ab34a4e8633bf643497c75cab2ae7c5843 +Author: Eduardo Silva +Date: Thu Feb 6 11:24:20 2014 -0600 + + Development of v1.5 begins :) + + Signed-off-by: Eduardo Silva + +commit 726b3e8bcb7b14b2adc9ea6e3b2e67c7de25c032 +Author: Eduardo Silva +Date: Tue Feb 4 08:04:22 2014 -0600 + + Update ChangeLog for v1.4.0 + + Signed-off-by: Eduardo Silva + +commit f3638d9d6b7f781d0ad5dd87e04ee03c84271d90 +Author: Eduardo Silva +Date: Tue Feb 4 08:04:22 2014 -0600 + + Monkey v1.4.0 + + Signed-off-by: Eduardo Silva + +commit 90e358af00312cce155c0bd5039522fc9739a1e4 +Author: Eduardo Silva +Date: Tue Feb 4 08:04:16 2014 -0600 + + HTML: update home page + + Signed-off-by: Eduardo Silva + +commit f35e15c8b7e153fe71db51f29643a0016c427984 +Author: Eduardo Silva +Date: Tue Feb 4 08:02:04 2014 -0600 + + Proxy Reverse: fix config file + + Signed-off-by: Eduardo Silva + +commit 35b00ab23b081b363c840b4457b3eee3a34373e0 +Author: Eduardo Silva +Date: Mon Feb 3 22:51:57 2014 -0600 + + Debian: update rules for v1.4.0 + + Signed-off-by: Eduardo Silva + +commit a8ac7e28cb2aaea6da2086632e383835777b80fb +Merge: a31d354 dc4bc59 +Author: Eduardo Silva +Date: Wed Jan 29 08:09:22 2014 -0600 + + Merge branch 'master' of github.com:monkey/monkey + +commit a31d354f0bc22f4801a7927953c393ae2eb93bf5 +Author: Eduardo Silva +Date: Wed Jan 29 08:03:12 2014 -0600 + + Lib: fix missing vhost header and API usage (#99) + + Signed-off-by: Eduardo Silva + +commit dc4bc593202d008ec6e7531005be167211fc8ff0 +Author: Eduardo Silva +Date: Wed Jan 29 01:18:51 2014 -0600 + + Jemalloc: upgrade commit to fix compiler warnings + + Signed-off-by: Eduardo Silva + +commit c28781f3874325a0d3d54f054461804ae81af46b +Merge: 9b43aa6 9304105 +Author: Eduardo Silva +Date: Tue Jan 28 10:49:47 2014 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 9b43aa61e36a465409317f1759816695a00f019c +Author: Eduardo Silva +Date: Tue Jan 28 10:49:22 2014 -0600 + + HTML: update index page for v1.4, codename Spider Monkey + + Signed-off-by: Eduardo Silva + +commit 930410506d352377017b3465a75af62e503ae382 +Author: Eduardo Silva +Date: Mon Jan 27 20:45:31 2014 -0600 + + Macro: rename MAX_PATH to MK_MAX_PATH + + Signed-off-by: Eduardo Silva + +commit 4c5ad82cd04cbc9bfdcdd97bbdc491ab1ca8a61c +Author: Eduardo Silva +Date: Mon Jan 27 15:30:03 2014 -0600 + + Doc: Update kernel requirements + + Signed-off-by: Eduardo Silva + +commit 7268167c2a022495d0395108480802adb33ece74 +Author: Eduardo Silva +Date: Mon Jan 27 15:26:13 2014 -0600 + + Configure: update copyright + + Signed-off-by: Eduardo Silva + +commit 2522c5fd50f387ea83b79e0a35f69b74d9daf63a +Author: Eduardo Silva +Date: Mon Jan 27 12:50:04 2014 -0600 + + Conf: make FDT configurable + + Signed-off-by: Eduardo Silva + +commit a365d457d3fe6026b25aeb0524d8a34852994bd0 +Author: Eduardo Silva +Date: Mon Jan 27 11:10:12 2014 -0600 + + Jemalloc: back to original 3.5.0 + + Signed-off-by: Eduardo Silva + +commit 80942638c24e837c33e43dffde28364d910ed2f2 +Author: Eduardo Silva +Date: Fri Jan 24 10:10:30 2014 -0600 + + Scheduler: optimize access to thread specific data with __thread + + Signed-off-by: Eduardo Silva + +commit aeb004b31b5b710561acd5782372d805aeba84c0 +Author: Eduardo Silva +Date: Thu Jan 23 22:32:20 2014 -0600 + + Virtual Host: reduce hashed string on FDT. + + Signed-off-by: Eduardo Silva + +commit 4efbc11bafeb56fbe2b4f0f6925671630ce84125 +Author: Eduardo Silva +Date: Thu Jan 23 21:53:37 2014 -0600 + + Virtual Host: File Descriptor Table (FDT). + + The File Descriptor Table (FDT) aims to provide a mechanism to share + open file descriptors at Virtual Host level with the goal of to reduce the + number of open file descriptors and reduce the calls to open(2) and close(2). + + The FDT is implemented in the following way: + + - For each worker thread, maintain a list matching the global Virtual Host + list and for each entry create a Hash Table (HT) of 64 entries, and each + HT entry maintain a sub-array of 8 chains. + + - When a request for a static file arrives, use the new Virtual Host open/close + wrappers, from the given parsed and processed URI generate a hash value and + try to see if it exists in the HT, if it don't exist, just open the file + directly and register the data into the chain for a possible future reuse. + + If the hash exists in some HT/Chain, obtain the opened file descriptor and + increment the readers counter. + + - When the Monkey core do not longer needs the file descriptor, instruct the + Virtual Host 'close' wrapper to perform the cleanup. If the resource/hash + exists in the HT/Chain, decrement the readers counter, if counter reach + zero, just perform an explicit close(2) as nobody is using it, if readers + is greater than zero just return as the file descriptor is in use. + + If the resource do not exists in the HT, do a direct close(2). + + The good thing of this implementation is that exists at worker level, so there + is no race conditions and is lock-free. Also collisions are reduced to zero + using HashTable Chaining. The hashing algorithm in use MurmurHash 2. + + This implementation reduce the overhead under high concurrency sharing the file + descriptor resources and making it more scalable. + + Signed-off-by: Eduardo Silva + +commit 6d666da1a8c1d91a67348c935a657080731fdc18 +Author: Eduardo Silva +Date: Thu Jan 23 00:22:52 2014 -0600 + + Core: fix compiler warnings + + Signed-off-by: Eduardo Silva + +commit 3d70f08ee3c7c2a34207512a88d67c568f136635 +Author: Eduardo Silva +Date: Thu Jan 23 00:11:34 2014 -0600 + + Deps: update Jemalloc commit + + Signed-off-by: Eduardo Silva + +commit 732226720b26b4b534dec8db466f44523760d51a +Author: Eduardo Silva +Date: Thu Jan 23 00:05:11 2014 -0600 + + Memory: upgrade Jemalloc to 3.5.0 + + Signed-off-by: Eduardo Silva + +commit 10ce73fb71e0b711b87234498af0f363c706374c +Author: Eduardo Silva +Date: Wed Jan 22 14:09:36 2014 -0600 + + Core: move vhost structs to new mk_vhost.h + + Signed-off-by: Eduardo Silva + +commit af0b80de1568bf2977f971827756c29296dcbf63 +Author: Eduardo Silva +Date: Wed Jan 22 14:04:09 2014 -0600 + + Core: separate virtual host logic from config: new mk_vhost.c + + Signed-off-by: Eduardo Silva + +commit 4564a587c5c00c9259567d043d74cde1226c6e95 +Author: Eduardo Silva +Date: Wed Jan 22 11:18:31 2014 -0600 + + Core: deprecate perror(), use mk_libc_xxx() wrappers + + Signed-off-by: Eduardo Silva + +commit e47643e347714e14a08babc667db92df7505e052 +Author: Eduardo Silva +Date: Wed Jan 22 11:13:13 2014 -0600 + + Error Handling: add caller name + + Signed-off-by: Eduardo Silva + +commit b2aacccc4fcb8ea465543c4a16ffd1ab22f49069 +Author: Eduardo Silva +Date: Wed Jan 22 11:04:11 2014 -0600 + + Error Handling: new macros mk_libc_error() and mk_libc_warning() + + This patch adds two new functions and proper macros to handle common + 'errno' errors and format them to stdout. + + The new static inline functions are located in src/include/utils.h: + + mk_utils_libc_error(char *file, int line); + mk_utils_libc_warning(char *file, int line); + + the wrappers (based on macros) to be use are: + + mk_libc_error(); + mk_libc_warning(); + + when used the following information is formatted to stdout: errno number, + errno message, file and line. + + Signed-off-by: Eduardo Silva + +commit 2c52f3dc2adfdfe0c619b9122143563b6101f867 +Author: Eduardo Silva +Date: Sat Jan 18 10:22:13 2014 -0600 + + Events: remove unnecessary handlers + + Signed-off-by: Eduardo Silva + +commit c9c4f0c681732c304db2779b4357a9432d40507f +Author: Eduardo Silva +Date: Fri Jan 17 08:45:33 2014 -0600 + + Plugin API: export epoll_state calls + + Signed-off-by: Eduardo Silva + +commit 0340926daccf555acf44f94a8ec1c5d62970ea7c +Author: Eduardo Silva +Date: Thu Jan 16 12:01:11 2014 -0600 + + Trace: color tweaks and reduce va_args arguments + + Signed-off-by: Eduardo Silva + +commit 23c2d87a9ac82fa9ede3a8b49a62dbf72b796880 +Author: Eduardo Silva +Date: Tue Jan 7 11:21:29 2014 -0600 + + Mimetypes: add debian package entry + + Signed-off-by: Eduardo Silva + +commit 102f65a9a6baafbd480d100e6007186d044523fd +Author: Eduardo Silva +Date: Thu Jan 2 09:19:22 2014 -0600 + + Cheetah: use memory wrapper instead of direct malloc/free calls + + Signed-off-by: Eduardo Silva + +commit 91d0e5484f0bf852c8b2330ef726a0b62df87cca +Author: Eduardo Silva +Date: Thu Jan 2 09:17:52 2014 -0600 + + CGI: use memory wrapper on requests handler + + Signed-off-by: Eduardo Silva + +commit 0fb9c91056ae5c9162f7a88fb46f46ebd8344959 +Author: Eduardo Silva +Date: Thu Jan 2 09:16:43 2014 -0600 + + CGI: use API memory wrapper instead of direct free() + + Signed-off-by: Eduardo Silva + +commit c22b71489455e3a6bfbcaf4b0d430de89354fcd6 +Author: Eduardo Silva +Date: Thu Jan 2 09:14:07 2014 -0600 + + Config: fail on zero keys just if a section exists + + Signed-off-by: Eduardo Silva + +commit 56574e396cc86a883129b0054fc65d5f9c128b3c +Author: Eduardo Silva +Date: Thu Jan 2 09:11:29 2014 -0600 + + Config: add empty file on plugins dir + + Signed-off-by: Eduardo Silva + +commit b3cfab8134615ba2bce82cad99d398eceff04ed0 +Author: Eduardo Silva +Date: Thu Jan 2 09:10:20 2014 -0600 + + Core: minor config checks and CGI api fix + + Signed-off-by: Eduardo Silva + +commit 2d2cd856584ec4dc73a58e9424f7168ea3f53f34 +Author: Eduardo Silva +Date: Tue Dec 31 16:13:14 2013 -0600 + + Mimetype: if cannot read config file, abort properly + + Signed-off-by: Eduardo Silva + +commit c8d2a558997294014f9a20ad5dca8f152a843aae +Author: Eduardo Silva +Date: Sun Dec 29 15:20:44 2013 -0600 + + License: moves from GPLv2 to LGPLv2.1 + + Signed-off-by: Eduardo Silva + +commit 7719a5b7447f83eb53fd06a7f5881cd0d764eb81 +Merge: fee4cb0 624ce82 +Author: Eduardo Silva +Date: Thu Dec 26 11:54:47 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit fee4cb0282d9db9419837a3112f9cd4480a3389d +Author: Eduardo Silva +Date: Thu Dec 26 11:54:08 2013 -0600 + + Logger: plugin moves from MANDATORY to OPTIONAL + + Signed-off-by: Eduardo Silva + +commit 624ce82fb08788c49be99926156886879d4a64fa +Author: Eduardo Silva +Date: Mon Dec 23 21:43:17 2013 -0600 + + Background: print server info to STDOUT before to close it + + Signed-off-by: Eduardo Silva + +commit 77adad4e3fbe7dd821f80a44186f25c2f9d9ccd9 +Author: Eduardo Silva +Date: Sun Dec 22 21:04:47 2013 -0600 + + RPM: update SPEC file for incoming v1.4.0 + + Signed-off-by: Eduardo Silva + +commit e21dfccb22f517592fa2fedc11b746c6211e540f +Merge: ed0d928 fd8c3d9 +Author: Eduardo Silva +Date: Wed Dec 18 22:27:30 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit ed0d928ffc665f131ddd66d1fbbde7d47baac26d +Author: Eduardo Silva +Date: Wed Dec 18 22:22:13 2013 -0600 + + Scheduler: Workaround for ULONG_MAX bug. + + This is a workaround for a specific Bug that we still not find the + root cause for it. The conditions are: + + - for some reason closed_connections > active_connections + - when performing (active_connections - closed_connections it will + return UMAX_LONG, which is OK but *not* for our case + + - if cur (current connections) is greater than worker capacity it will + fail all new incoming connections, and as it may have ULONG_MAX that + would case a very very bad behavior + + The temporal workaround is to when facing that we are over capacity, + check if we have a ULONG_MAX value in 'cur', on that moment signal + our workers so they can start performing a synchronization of their + counters. + + The patch adds a signal channel for each worker so every epoll loop + will monitor that channel, on receive the 0xDEADBEEF value, it will + perform a synchronization of counters based on scheduler busy queue. + + Signed-off-by: Eduardo Silva + +commit fd8c3d9ad368658f02c31d8d468e10a5e850a533 +Author: Eduardo Silva +Date: Sat Dec 14 10:27:47 2013 -0600 + + Core: pack and optimize structures + + Signed-off-by: Eduardo Silva + +commit c3835e9aa40fc61f7a51e1f86a1fb9f051cc6967 +Author: Eduardo Silva +Date: Sat Dec 7 10:09:56 2013 -0600 + + Logger: fix HTTP macros name + + Signed-off-by: Eduardo Silva + +commit 350a0022cf2237d5aeded680f5462eb2fc020711 +Author: Eduardo Silva +Date: Sat Dec 7 10:09:21 2013 -0600 + + Dirlisting: fix HTTP macros name + + Signed-off-by: Eduardo Silva + +commit c4f122c1027e02b71584e09926daaa97b9092102 +Author: Eduardo Silva +Date: Sat Dec 7 10:08:13 2013 -0600 + + CGI: rename HTTP macros + + Signed-off-by: Eduardo Silva + +commit c76789b7f6d8419a5df1fbb743de797b12126a85 +Author: Eduardo Silva +Date: Sat Dec 7 10:06:40 2013 -0600 + + HTTP: prefix HTTP macros with MK_ + + Signed-off-by: Eduardo Silva + +commit abcc45eeb757b85a3ef4a354c7557db37e0ee660 +Author: Eduardo Silva +Date: Sat Dec 7 01:21:26 2013 -0600 + + Memory: improvements to avoid third party components crash when using direct malloc + + Signed-off-by: Eduardo Silva + +commit 893d8329d792c94f81c36761d374be3c7227c045 +Merge: 3fd2271 53ec2cc +Author: Eduardo Silva +Date: Sat Dec 7 00:09:26 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 3fd227144d1ec421826a7a80a7fc57ca4218ed85 +Author: Eduardo Silva +Date: Sat Dec 7 00:08:56 2013 -0600 + + Plugin: do not register event if worker scheduler context is NULL + + Signed-off-by: Eduardo Silva + +commit 53ec2cca2dee6f6ee4735c3ba781d2268e551e9f +Author: Eduardo Silva +Date: Mon Dec 2 10:51:20 2013 -0600 + + Auth: use Monkey memory allocator API + + Signed-off-by: Eduardo Silva + +commit f94f3986e01ec23404ec67025ed981573b142735 +Author: Eduardo Silva +Date: Sat Nov 30 22:04:02 2013 -0600 + + FastCGI: change memory allocators + + Signed-off-by: Eduardo Silva + +commit 70bce6abfed4793fa0c45192ce657c8cf9be74d9 +Author: Eduardo Silva +Date: Sat Nov 30 16:48:27 2013 -0600 + + Configure: to enable libc memory allocator use --malloc-libc + + Signed-off-by: Eduardo Silva + +commit 3234b8237fd509268110c7bb6dac3487f53aab12 +Author: Eduardo Silva +Date: Fri Nov 29 10:48:56 2013 -0600 + + SSL: use Monkey memory handling calls + + Signed-off-by: Eduardo Silva + +commit 400891bfca3cf813431c7344e3083475f9b16249 +Author: Eduardo Silva +Date: Thu Nov 28 23:56:15 2013 -0600 + + Configuration: add support to change the main configuration file. + + This patch adds a new option '-s' to specify an alternative configuration + file to the default monkey.conf. This is useful in case someone wanted + to run multiple instances of the server without copying the whole + configuration directory. + + Signed-off-by: Eduardo Silva + +commit 54c58c37c5fda4afe379831decf1cec930bd6435 +Merge: d9ad8bd dddf9f0 +Author: Eduardo Silva +Date: Thu Nov 28 11:37:19 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit d9ad8bdbc36f3847005ea56d801c3b0c5cd3e680 +Author: Eduardo Silva +Date: Thu Nov 28 11:25:33 2013 -0600 + + Epoll: replace Epoll state TLS implementation with direct __thread + + the epoll estate interface aims to hold information about every + socket that resides in an event loop, mostly to track events status. + + The list per worker is implemented through Thread Local Storage (TLS), + this patch makes some performance improvements deprecating the usage + of pthread_setspecific() and pthread_getspecific() functions by using + the compiler aware TLS __thread feature. + + With this patch each worker event loop optimize as follows: + + +--------------------------+ + | average costs | + +----------------------+------------+-------------+--------+ + | function | pre-patch | post-patch | gain | + +----------------------+------------+-------------+--------+ + | mk_epoll_state_set() | 4.15 | 3.45 | 0.70 | + +----------------------+------------+-------------+--------+ + | mk_epoll_state_get() | 2.82 | 1.90 | 0.91 | + +----------------------+------------+-------------+--------+ + | 1.60 | + +--------+ + + Signed-off-by: Eduardo Silva + +commit dddf9f0228f05cc5e088f16b668976897f8b2e06 +Author: Eduardo Silva +Date: Tue Nov 26 10:02:36 2013 -0600 + + Linux Trace: rename provider header file + + Signed-off-by: Eduardo Silva + +commit 6b89900c2576ab787d5fb69dedcc6bd63a38fc93 +Author: Eduardo Silva +Date: Tue Nov 26 09:57:09 2013 -0600 + + Linux Trace: register events for the Scheduler + + Signed-off-by: Eduardo Silva + +commit e6ddbeb1f94744ddac389d0036a28be38eb6f02e +Author: Eduardo Silva +Date: Tue Nov 26 09:03:18 2013 -0600 + + Proxy Reverse: format C code according to Monkey programming style + + Signed-off-by: Eduardo Silva + +commit 2001f52571115c62f39b200301ffdd6a915b0c98 +Author: Eduardo Silva +Date: Tue Nov 26 08:51:48 2013 -0600 + + Proxy Reverse: tweak conf and documentation + + Signed-off-by: Eduardo Silva + +commit a22b0640da93a5698aab0e2c88d64545de481704 +Author: Eduardo Silva +Date: Tue Nov 26 08:42:54 2013 -0600 + + Proxy Reverse: move OPTIONAL to EXPERIMENTAL + + Signed-off-by: Eduardo Silva + +commit 944a82db1d6943f63ed10de23b9464b84d5a83a2 +Author: Eduardo Silva +Date: Tue Nov 26 08:42:21 2013 -0600 + + Proxy Reverse: set plugin as experimental + + Signed-off-by: Eduardo Silva + +commit 6649f2b7718ce893aa95dcf2bb161f643fb0d7eb +Author: Nikola Nikov +Date: Tue Nov 26 08:41:33 2013 -0600 + + Proxy Reverse: initial merge of plugin + + Signed-off-by: Eduardo Silva + +commit d90cb4420976a0d2341ce72c2d011720d25c967f +Author: Eduardo Silva +Date: Tue Nov 26 08:39:05 2013 -0600 + + API: expose mk_string_split_free in the API + + Signed-off-by: Eduardo Silva + +commit 1a24bf587410b51ada45c578ef19441ead50543d +Author: Eduardo Silva +Date: Mon Nov 25 22:43:35 2013 -0600 + + Jemalloc: do not run autoconf, configure script added + + Signed-off-by: Eduardo Silva + +commit 75e6b213a8574ec7c0818e71a8f362c17fc1a8f0 +Author: Lauri Kasanen +Date: Mon Nov 25 20:42:18 2013 +0200 + + lib: Fix a bug introduced in 2a281ae932b30e0f40a925429437ca4304b6b954 + + The jemalloc commit changed a wrong line, this wouldn't even compile. + +commit 77a6683acfc7fa4601527dc4f2dc0bb836d5abce +Author: Eduardo Silva +Date: Mon Nov 25 10:46:17 2013 -0600 + + Linux Trace: fix conditional macro + + Signed-off-by: Eduardo Silva + +commit e2eddd1e7eff2a36d62cdb5ab673aa01720e4cb3 +Author: Eduardo Silva +Date: Mon Nov 25 01:37:29 2013 -0600 + + Jemalloc: add support for JEMALLOC_OPTS and fix libmath linker + + Signed-off-by: Eduardo Silva + +commit 41a1dd4cc370b2951ac80c9dda4c10f88720a00c +Author: Eduardo Silva +Date: Mon Nov 25 00:25:31 2013 -0600 + + Doc: Remove TODO file + + Signed-off-by: Eduardo Silva + +commit 9028a390e09ebc46c7beb5559bf09c449426820b +Author: Eduardo Silva +Date: Mon Nov 25 00:19:06 2013 -0600 + + Jemalloc: run autoconf before configure script + + Signed-off-by: Eduardo Silva + +commit 84105d4b48821bd414d7a9b887bb471a47e8641e +Author: Eduardo Silva +Date: Mon Nov 25 00:18:28 2013 -0600 + + Jemalloc: add missing test header file + + Signed-off-by: Eduardo Silva + +commit 462e2bc98ca984d54b19c7e16109d25712d61912 +Author: Eduardo Silva +Date: Mon Nov 25 00:10:33 2013 -0600 + + Jemalloc: upgrade to v3.4.1-d6df91438a1cf25ea248c3897da463c51709c580 + + Signed-off-by: Eduardo Silva + +commit e750ea0768181766332c8d1df66bcc47e610871b +Author: Eduardo Silva +Date: Sun Nov 24 23:41:46 2013 -0600 + + CGI: replace strdup() by API str_dup + + Signed-off-by: Eduardo Silva + +commit 2a281ae932b30e0f40a925429437ca4304b6b954 +Author: Eduardo Silva +Date: Sun Nov 24 23:39:26 2013 -0600 + + Memory: new default (optional) jemalloc memory allocator + + Signed-off-by: Eduardo Silva + +commit e8d06ea1492b3fda90754db49f9a906cd4e0e7c9 +Merge: 98a9864 5bcef00 +Author: Eduardo Silva +Date: Sat Nov 23 14:50:35 2013 -0600 + + Merge branch 'lttng' + +commit 5bcef00dab6e7001ec157320fd06b0eb2e413c52 +Author: Eduardo Silva +Date: Sat Nov 23 14:49:35 2013 -0600 + + Linux Trace: banner to stdout + + Signed-off-by: Eduardo Silva + +commit 9c4097f3e549fff8d0e1674fcb76a75c4081bb82 +Author: Eduardo Silva +Date: Sat Nov 23 14:36:45 2013 -0600 + + Linux Trace: Initial traces for epoll and epoll_state interfaces + + Signed-off-by: Eduardo Silva + +commit 6eb3555ce7e2e669cb9411a74e78e99c889a401a +Author: Eduardo Silva +Date: Sat Nov 23 11:36:54 2013 -0600 + + Linux Trace: initial test + + Signed-off-by: Eduardo Silva + +commit 98a986419a0856f4464644d8c9f293e43962b581 +Author: Lauri Kasanen +Date: Wed Nov 20 18:19:14 2013 +0200 + + Another go at fixing the ghost issue + +commit c5a859c667d3a29951a132cb42dee79882ad0d34 +Author: Lauri Kasanen +Date: Wed Nov 20 17:18:30 2013 +0200 + + dirlisting: handle dirhtml_init failure + +commit eb6425b869a0f0058872d32f8ac1fd9d2625f78e +Author: Sonny Karlsson +Date: Mon Oct 21 23:13:13 2013 +0200 + + polarssl: Add support for polarssl-1.3.*. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit b03bf69168414f911980a67aa6364f87b4eff519 +Merge: 1acfbbe 801e6b7 +Author: Eduardo Silva +Date: Tue Oct 29 22:14:06 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 1acfbbedd705433d144bc499e5122981fba2907b +Author: Eduardo Silva +Date: Tue Oct 29 22:13:36 2013 -0600 + + Plugin: on finish request, validate existent session + + Signed-off-by: Eduardo Silva + +commit 801e6b7e39f0489d00ab7c81aa3eb94f26072200 +Author: Lauri Kasanen +Date: Sun Oct 20 18:21:30 2013 +0300 + + conn: Handle ghost connections from interrupted benchmarks, etc + +commit a47352dcce9429c9d3b59348d988fca42a4b763f +Author: Lauri Kasanen +Date: Sun Oct 20 16:12:44 2013 +0300 + + utils: Constify the un-changing colors in mk_print + +commit f96547689bce3bf7c3cf3f498ed70559b7391aae +Author: Lauri Kasanen +Date: Sun Oct 20 16:09:42 2013 +0300 + + logger: Remove unused var + +commit dd096fdb71cf35f240d7d85ef782c0c2b898138e +Author: Lauri Kasanen +Date: Sun Oct 20 15:48:07 2013 +0300 + + logger: Print the reason for log file failure + +commit 95779ab605f3482edde2b9547b4e542317a72bf4 +Author: Lauri Kasanen +Date: Sun Oct 20 15:43:05 2013 +0300 + + cgi: Must return close_conx on error without sent data + +commit 7de62a5d03ce1fcfcac37ab86ca52a61b902206b +Author: Lauri Kasanen +Date: Sat Oct 19 12:20:19 2013 +0300 + + logger: tm_mon is from 0 to 11 + +commit 379f2f9f9bc71cfaa119606eef6b14bc3077845b +Author: Eduardo Silva +Date: Thu Oct 17 17:38:22 2013 -0600 + + Development of Monkey v1.4 begins + + Signed-off-by: Eduardo Silva + +commit a3a3b44eabba6ea9741d5db7521246daf6f3337b +Author: Lauri Kasanen +Date: Thu Oct 17 17:58:19 2013 +0300 + + logger: Include the URL in unknown errors + +commit 65f01c0433bb3cc6e2b09c1237c374ba2949827e +Author: Lauri Kasanen +Date: Thu Oct 17 15:29:32 2013 +0300 + + logger: Move err_str to the above block so it stays available + +commit f07989e94160d6f591e262f72099017da1f64520 +Author: Lauri Kasanen +Date: Thu Oct 17 14:19:49 2013 +0300 + + Logger: handle unexpected errors too. + + Otherwise, the error log will have double lines, like these: + 1.2.3.4 - [14/Oct/2013 23:59:40 +0200] 2.3.4.5 - [14/Oct/2013 23:59:40 +0200] 5.4.3.2 + +commit 8c79733cfe3b5a903ad339d7274dc9bd8682ed86 +Author: Lauri Kasanen +Date: Thu Oct 17 14:02:33 2013 +0300 + + signal: strsignal requires GNU_SOURCE + +commit 07fec9e26a9130a3a45da96df2c2e1888eb0ab62 +Author: Eduardo Silva +Date: Tue Oct 15 10:25:17 2013 -0600 + + Monkey 1.3.0 + +commit 33b9fdbea4ac6d8ef7e4eecd263d96af7b024227 +Author: Eduardo Silva +Date: Tue Oct 15 10:24:50 2013 -0600 + + HTML: update index page + + Signed-off-by: Eduardo Silva + +commit 8d29d5b9712de8fad67fb489c39dd41e84308354 +Author: Eduardo Silva +Date: Tue Oct 15 08:58:45 2013 -0600 + + Debian: update changelog + + Signed-off-by: Eduardo Silva + +commit 5d65b57499f8022be6f026a04d316c73f62cccb9 +Author: Eduardo Silva +Date: Thu Oct 3 19:30:04 2013 -0600 + + API: Expose mimetype_lookup() + + Signed-off-by: Eduardo Silva + +commit 846e4423a3df7cba25923d4086faf274ddb02518 +Author: Eduardo Silva +Date: Thu Oct 3 08:43:36 2013 -0600 + + Red-Black-Tree: remove unused augmented function + + Signed-off-by: Eduardo Silva + +commit 3fdcce481927307245b0cfe440a2609faba3a724 +Author: Eduardo Silva +Date: Thu Oct 3 08:37:08 2013 -0600 + + Socket: on IP format error, use errno code number + + Signed-off-by: Eduardo Silva + +commit 9f854866d923df6042f859c167538f4e4b3a4acf +Author: Eduardo Silva +Date: Thu Oct 3 08:33:31 2013 -0600 + + Mimetype: fix linking to global linked list head + + Signed-off-by: Eduardo Silva + +commit edbcc31f4c894a1a2cc726457d77730cd1317b4a +Author: Eduardo Silva +Date: Thu Oct 3 08:20:16 2013 -0600 + + Move roadmap to v1.4 + + Signed-off-by: Eduardo Silva + +commit 6bb72aa98f7933b423b71a55cb37e576d1514cb9 +Author: Eduardo Silva +Date: Wed Oct 2 14:55:40 2013 -0600 + + Configure: add new htdocs/ files + + Signed-off-by: Eduardo Silva + +commit 117f2c5025830f2a98a9ccf0b51acc85a7b94b84 +Author: Eduardo Silva +Date: Wed Oct 2 14:49:01 2013 -0600 + + Mimetype: use also linked list and adapt mk_lib + + Signed-off-by: Eduardo Silva + +commit 67f638c49910e1636121df93f867ad2ed58395ee +Author: Eduardo Silva +Date: Wed Oct 2 14:06:51 2013 -0600 + + Debian: update changelog + + Signed-off-by: Eduardo Silva + +commit 96b5d8ac4c00a481fadf53dedf34cb86eb353e70 +Author: Eduardo Silva +Date: Wed Oct 2 00:28:33 2013 -0600 + + HTML: little style changes + + Signed-off-by: Eduardo Silva + +commit 89c92d3b62ab3579fe2cff7efbc0ac11ccef2d03 +Author: Eduardo Silva +Date: Tue Oct 1 14:59:08 2013 -0600 + + HTML: image logo scaled + + Signed-off-by: Eduardo Silva + +commit 04eb1c876bac3a405b7fea20f8eb0ae61cd1c692 +Author: Eduardo Silva +Date: Tue Oct 1 14:31:19 2013 -0600 + + Core: upgrade red-black-tree implementation to the latest on Linux Kernel + + Signed-off-by: Eduardo Silva + +commit 9ae25f5d5576c6e5cb1f068057b4ad6fb302908c +Author: Eduardo Silva +Date: Mon Sep 30 23:20:23 2013 -0600 + + HTML: refactor index page with Bootstrap 3 + + Signed-off-by: Eduardo Silva + +commit 5410b8fd6c8feb2a799bfec0117fff6010538650 +Author: Eduardo Silva +Date: Mon Sep 30 09:32:27 2013 -0600 + + Mimetype: replace bsearch by red-black-tree (50% improvement) + + The mime types lookup algorithm was using a qsort()ed array plus a + binary search with two main arrays: a top ten list (common) and another + one for the rest. + + Even the solution was optimal for some cases, it have a huge dependency + of a righ configuration of the top ten list, and considering the support + of virtual host and different types of content we need a more generic + solution that scale and optimize for all cases. + + This patch deprecate the top-ten list and replace the binary search by a + red-black-tree solution, looking at the results after a benchmark we can + see the following: + + +-----------+-----------------+--------+ + | bsearch | red-black-tree | gain | + +---------------------+-----------+-----------------+--------+ + | mk_mimetype_find | 11.54 | 5.82 | ~50% | + +---------------------+-----------+-----------------+--------+ + + More graphical details here: + + http://edsiper.linuxchile.cl/mimetype_performance_improvement_001.png + + Signed-off-by: Eduardo Silva + +commit defb83d92ec9da697c532ec23c06323476975c78 +Author: Eduardo Silva +Date: Sun Sep 22 10:14:42 2013 -0600 + + Core: initialize clock before load plugins. + + Some plugins could use the core clock API or buffer cache to perform + some timing operations (or format strings), before this patch the plugin + would crash as the clock was not initialized before spawn it. + + This patch moves the sequential initialization before to load the plugins. + + Signed-off-by: Eduardo Silva + +commit 58d0806619fdc16e96fd1accba8b9f06d0ec8656 +Author: Nil Croustillac +Date: Thu Aug 1 11:00:39 2013 +0200 + + HTTP: add support for OPTIONS method + + Signed-off-by: Nil Croustillac + Signed-off-by: Eduardo Silva + +commit 216b8c8682b6ef31b5ef47cf0ecb7a295a61922b +Author: Eduardo Silva +Date: Sat Aug 31 20:57:14 2013 -0600 + + Core: on segfault... abort + + Signed-off-by: Eduardo Silva + +commit 12ac9fa3207c5f635e0f463c6d10a6ae7f53667e +Author: Eduardo Silva +Date: Mon Aug 26 23:08:44 2013 -0600 + + Event: verbose message on error when waking up connection + + Signed-off-by: Eduardo Silva + +commit 7ff71743097c04e2af7c95bcb8ef85a65dce79c8 +Author: Eduardo Silva +Date: Mon Aug 26 22:10:30 2013 -0600 + + Event: move event check to plugin logic + + Signed-off-by: Eduardo Silva + +commit f0085c4e177905c8f5338e4c819cab84481fd5e5 +Author: Eduardo Silva +Date: Mon Aug 26 21:52:29 2013 -0600 + + Event: check that socket is alive before trigger hooks. + + When the events take place in the worker epoll queue, the timeout + routine can remove and inactivate a client session, but sometimes + a write event reporeted by the same epoll_wait() loop can be queued + and can cause some inconsistences. + + For safety this patch makes the read and write event connection hooks + to validate the epoll state before to proceed. + + Signed-off-by: Eduardo Silva + +commit 98baeef078bfcd266c7c76f973bc4e0acbfe2a19 +Author: Eduardo Silva +Date: Sat Aug 24 18:57:25 2013 -0600 + + Event: if wakeup fails, do not stop the server, just warn and return -1 + + Signed-off-by: Eduardo Silva + +commit 303ef6d3470c006bd2a64f1387d454e9bd780bdf +Author: Eduardo Silva +Date: Sat Aug 24 10:45:01 2013 -0600 + + Core: new argument '-b' to print build information to stdout + + Signed-off-by: Eduardo Silva + +commit 765a16452d67971acfe76810212ba35519f7ec7f +Author: Valentin Ochs +Date: Sun Jul 21 19:06:43 2013 +0200 + + configure: check_generic returns false on warnings, links against needed libraries, gets documentation. + + configure: pthread test runs one function from pthread.h + + Signed-off-by: Valentin Ochs + Signed-off-by: Sonny Karlsson + +commit 5cdd50d72ed45291d8e980fe34b84cbaaeb50297 +Author: Valentin Ochs +Date: Sun Jul 21 19:06:42 2013 +0200 + + configure: Use tab for indentation consistently + + Signed-off-by: Valentin Ochs + Signed-off-by: Sonny Karlsson + +commit 9aa8693670e1a81bb6ccbf442144fe3d488cc349 +Author: Valentin Ochs +Date: Sun Jul 21 19:06:41 2013 +0200 + + configure: Use generic function to check for headers and functions + + Signed-off-by: Valentin Ochs + Signed-off-by: Sonny Karlsson + +commit 2eefc13c6c3c8c330e7dd2ffc0484c07e1675a72 +Author: Valentin Ochs +Date: Fri Jul 19 20:18:36 2013 -0600 + + configure: auto-check for backtrace support + + Signed-off-by: Eduardo Silva + +commit 88ca15385f0058f1e0dd77bc8064eca69c95ed79 +Author: Eduardo Silva +Date: Fri Jul 19 19:16:19 2013 -0600 + + signal: do not use sys_siglist array anymore + + Signed-off-by: Eduardo Silva + +commit 49a46c4fd6fa2963adf93b0ea2785a1b517d33df +Author: Eduardo Silva +Date: Fri Jul 19 19:05:25 2013 -0600 + + core: add support for 'musl' C library, use --musl-mode + + Signed-off-by: Eduardo Silva + +commit 4b3b67c492ab304179becf6ba748f309b9afcba9 +Author: Eduardo Silva +Date: Fri Jul 19 18:50:03 2013 -0600 + + FastCGI: use IOV_MAX instead of UIO_MAXIOV + + Signed-off-by: Eduardo Silva + +commit 45e34971c64fd4865cede108d62cacf1c6df3451 +Author: Sonny Karlsson +Date: Wed Jul 10 17:36:52 2013 +0200 + + mk_utils: Use timegm() instead of mktime(). + + Fix if_modified_since_test01.htt failure in GMT+ zones and + if_modified_since_test04.htt failure in GMT- zones. + + Signed-off-by: Sonny Karlsson + +commit 6d09cfb29399a04d6dd39ccf7de219e64b5a1e05 +Author: Sonny Karlsson +Date: Wed Jul 10 17:40:19 2013 +0200 + + Revert "mk_utils: Properly convert GMT to time_t." + + This reverts commit 63b90609f1863eefb5ab17d6effb69e0efef3b99. + +commit 63b90609f1863eefb5ab17d6effb69e0efef3b99 +Author: Sonny Karlsson +Date: Wed Jul 10 14:11:56 2013 +0200 + + mk_utils: Properly convert GMT to time_t. + + Fix if_modified_since_test01.htt failure in GMT+ zones and + if_modified_since_test04.htt failure in GMT- zones. + + Signed-off-by: Sonny Karlsson + +commit 43cc52f08f237dfda363903e21095b4a0e1a175c +Author: Sonny Karlsson +Date: Wed Jul 10 14:09:47 2013 +0200 + + qa: Add if_modified_since_test04.htt. + + This test together with test01 should guarantee will guarantee that time + conversion is properly performed both on negative and positive GMT + offsets. + + Signed-off-by: Sonny Karlsson + +commit ca073bbd339d0fb4340674451989ac7fc0d9e616 +Author: Sonny Karlsson +Date: Tue Jul 9 22:53:15 2013 +0200 + + fastcgi: Remove unnecessary chunk debug messages. + + Signed-off-by: Sonny Karlsson + +commit 198891679b946193fbd408839b273ed3ea4c1b36 +Author: Sonny Karlsson +Date: Tue Jul 9 16:21:22 2013 +0200 + + mk_connection: Remove unused conn_switch declarations. + + Signed-off-by: Sonny Karlsson + +commit 40d7771c352f3902d8e68c1a5c75b7be0ebe9d67 +Author: Sonny Karlsson +Date: Tue Jul 2 16:27:21 2013 +0200 + + mandril: Add deny_hotlink /path directive. + + Deny any access to /path if referer is another domain. + + Signed-off-by: Sonny Karlsson + +commit 64c4e13c0f61bd007cd7d31d710231230719010d +Author: Sonny Karlsson +Date: Tue Jul 2 16:26:03 2013 +0200 + + mandril: Check URL in stage_30 instead of stage_20. + + Assures that check is done on all pipelined requests. + + Signed-off-by: Sonny Karlsson + +commit 49f5ec670287ec3876b9990accf30d9fde725cf7 +Merge: 4a6cf53 e169b4c +Author: Eduardo Silva +Date: Wed Jun 26 19:39:08 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 4a6cf53c01459f167de6dc027549cfbd9da3e003 +Author: Eduardo Silva +Date: Wed Jun 26 19:38:19 2013 -0600 + + HTTP/Post: do not force content-type (RFC2616 - 7.2.1) + + Signed-off-by: Eduardo Silva + +commit e169b4c08a241c3c3f678bf2d49b4aea18ee698d +Author: Sonny Karlsson +Date: Mon Jun 24 12:06:17 2013 +0200 + + auth: Fix bug 188, add extra space for '\0' termination. + + The buffer was too small to fit a terminator when there were no padding + on the base64 encoded string. + This patch makes base64_decode() terminate the decoded string by + default. + + Signed-off-by: Sonny Karlsson + +commit 1e8944293f9125fce0e802cb1b48d2f3a085b7fd +Author: Sonny Karlsson +Date: Sun Jun 23 13:52:25 2013 +0200 + + auth: Fix missing PLUGIN_TRACE argument. + + Signed-off-by: Sonny Karlsson + +commit 74eff649f0a2b6bf833d39c0ed5e96a11a002814 +Author: Sonny Karlsson +Date: Sun Jun 23 13:42:51 2013 +0200 + + fastcgi: Fix of request error log and signed compare warning. + + Report request errors using PLUGIN_TRACE() instead of mk_info(). + Fix signed compare in fcgi_config.c. + Use PLUGIN_TRACE() for "No chunks to free". + + Signed-off-by: Sonny Karlsson + +commit f13791a0472b5578b397ebdf11184f7d9ed29827 +Author: Lauri Kasanen +Date: Sat Jun 22 16:02:32 2013 +0300 + + Fix a few fcntl mismatches + +commit ec97e15a0bdbc3a2a59dc42e854f3ae79933d440 +Author: Lauri Kasanen +Date: Sat Jun 22 15:54:47 2013 +0300 + + Logger: set the log pipes to close-on-exec + + Likewise no race here, as connections aren't accepted yet. + +commit a94b557dc182524a6c052f844dd1964eb3a3d601 +Author: Lauri Kasanen +Date: Sat Jun 22 15:50:43 2013 +0300 + + liana: Set close-on-exec on new sockets + +commit b2f03a35313c0ea0826e9cd2a4f9b44c77b44a1a +Author: Lauri Kasanen +Date: Sat Jun 22 15:33:54 2013 +0300 + + epoll: Set close-on-exec on the epoll FDs. + + Note that there is no race here, as connections are not accepted until everything is up. + +commit 06fc2bb462241ee1e45e0026ee01cb0fc46831c5 +Author: Lauri Kasanen +Date: Sat Jun 22 15:27:06 2013 +0300 + + utils: Open the PID file with close-on-exec + +commit 945bdca2531a4125b23b44ee75f9dd0632cfea20 +Author: Lauri Kasanen +Date: Sat Jun 22 15:22:46 2013 +0300 + + Logger: open the logs with the close-on-exec flag + +commit eaf79f62c48138fff08f0d1d8cc3bd75517bd76b +Author: Eduardo Silva +Date: Wed Jun 19 19:35:13 2013 -0600 + + QA: add HTTP range tests 04 and 05 + + Signed-off-by: Eduardo Silva + +commit 91628ec15925878f21a4bf0db7e4a7eaabb45ee1 +Author: Eduardo Silva +Date: Wed Jun 19 19:30:28 2013 -0600 + + HTTP: ranges fixes and implement 416 status code (fix #184) + + The ranges parser did not validate properly the maximum offset + allowed, so if a requester set limit offset equal to file size it + continue processing, internally the sendfile(2) did not failed + returning always zero, this condition was not handled and for hence + that connections keeps running without ending, it could lead to a + DoS. + + This patch improves the range headers validation, fix the validation + of mk_http_send_file() routine and when the range is not satisfied, it + will return the status code 416: + + HTTP/1.1 416 Requested Range Not Satisfiable + + Signed-off-by: Eduardo Silva + +commit 493609cbe3d19325f2dbe9d64dfc3d9d27d82764 +Author: Eduardo Silva +Date: Wed Jun 19 15:33:10 2013 -0600 + + mandril: fix rule names + + Signed-off-by: Eduardo Silva + +commit fcb7727b8130673f01adb3bf8c55967c3e100c5e +Author: Sonny Karlsson +Date: Wed Jun 19 15:11:41 2013 +0200 + + auth: Ignore too large user entries. + + Signed-off-by: Sonny Karlsson + +commit 5d5c5fb6d2a8439f44f963924318cef3144e83ae +Author: Sonny Karlsson +Date: Wed Jun 19 15:01:32 2013 +0200 + + auth: Fix buffer overflow when loading user file. + + The third parameter of strncpy(3) was badly calculated. + For each entry in the users file the parameter was the length from start + of file until end of username, when it should be calculated from current + buffer position. + This causes writes outside buffer when the user file is larger than 2 * + sizeof(struct user). + + Signed-off-by: Sonny Karlsson + +commit fffc0f51ce49441a690ff841265017d4cac106a1 +Author: Sonny Karlsson +Date: Wed Jun 19 14:29:16 2013 +0200 + + auth: Fix bug where failed base64_decode() cause segfault. + + Signed-off-by: Sonny Karlsson + +commit 009b2cedb9e9c03a3fcfeef25079427b155ad9c2 +Author: Sonny Karlsson +Date: Wed Jun 19 13:25:16 2013 +0200 + + request: Remove unused session_request member virtual_user. + + Signed-off-by: Sonny Karlsson + +commit 9a68d97358be416376f53d8c6a401258b7c32f76 +Author: Eduardo Silva +Date: Mon Jun 17 21:35:43 2013 -0600 + + Liana/PolarSSL: add listen address to error message + + Signed-off-by: Eduardo Silva + +commit 1c5d24707a3194aa5681b42f7bbce69f011c40b8 +Merge: 37c90d6 4128b9a +Author: Eduardo Silva +Date: Mon Jun 17 17:50:05 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 37c90d66a890ba97d906a777373220a75a9cb85d +Author: Eduardo Silva +Date: Mon Jun 17 17:49:11 2013 -0600 + + monkey.conf: keys description ends with ':' + + Signed-off-by: Eduardo Silva + +commit c14ab3825e73d91becf085e0ca4ec51ff5ba82a7 +Author: Eduardo Silva +Date: Mon Jun 17 17:47:58 2013 -0600 + + PolarSSL: TransportLayer config must exists + + Signed-off-by: Eduardo Silva + +commit 4128b9a19120ae74e7f7621ac29abf0ce1d222fe +Author: Sonny Karlsson +Date: Fri Jun 7 10:27:59 2013 +0200 + + auth: Reject usernames if length does not match. + + Signed-off-by: Sonny Karlsson + +commit e3e7c57796e43512252b36af5cfcc651ef74ff36 +Author: Eduardo Silva +Date: Thu Jun 6 11:38:54 2013 -0600 + + Fix #182: DoS bug on headers parser. + + This patch fix the root cause for a problem described in Ticket #182, + actually if a header is malformed like a Header Key without a value, the + ToC parser used to continue processing the next header line. + + The solution applied is to improve the ToC generator where it adds extra + validations for at least one colon and forcing each header line to contain + a value or empty space, otherwise the server will trigger a Bad Request + response to the client and close the connection. + + Signed-off-by: Eduardo Silva + +commit f073796eb48f55637c96c2f37029b54d9a5892c4 +Merge: 6933315 ae6817d +Author: Eduardo Silva +Date: Thu Jun 6 11:40:23 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit ae6817d2b3a0eb473c5ef2b98ce55a8abf8d4e88 +Author: Lauri Kasanen +Date: Thu Jun 6 17:49:57 2013 +0300 + + utils: Fix a valgrind warning about uninitialized data + +commit fd2ffd31a29c6d63d3de7a09c84a9184f853317b +Author: Lauri Kasanen +Date: Thu Jun 6 17:42:46 2013 +0300 + + Sched: Fix a segfault when iterating timeouts + +commit 9b835d04f1f02872d4e19063fcfca57e9c502526 +Author: Eduardo Silva +Date: Mon Jun 3 19:47:54 2013 -0600 + + auth: add trace messages + + Signed-off-by: Eduardo Silva + +commit ca93a333398ebf05ee235d324484824026ae7ee4 +Author: Eduardo Silva +Date: Fri May 31 23:09:39 2013 -0600 + + Add a roadmap draft for v1.3 + + Signed-off-by: Eduardo Silva + +commit 6933315a67aae991d2a87a4eee736cec042e2225 +Merge: 8b182d3 84eada9 +Author: Eduardo Silva +Date: Mon May 27 08:33:26 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 84eada9f0991929c67798695c5561127aa0b6745 +Author: Eduardo Silva +Date: Sun May 26 21:17:27 2013 -0600 + + Debian: update Monkey version to v1.3 + + Signed-off-by: Eduardo Silva + +commit eb014709ff2c5d6c5156f321e38ac850ce6bbdfa +Author: Eduardo Silva +Date: Sun May 26 21:05:27 2013 -0600 + + Development of Monkey v1.3 begins + + Signed-off-by: Eduardo Silva + +commit 894b9ae667b7a54e22392501f1572c84d89737bd +Author: Eduardo Silva +Date: Sun May 26 20:59:57 2013 -0600 + + Update ChangeLog for v1.2.0 + + Signed-off-by: Eduardo Silva + +commit 0176bede95ebcb8930e45c5a4fac40f0cd8b17cd +Author: Eduardo Silva +Date: Sun May 26 20:59:57 2013 -0600 + + Monkey v1.2.0 + + Signed-off-by: Eduardo Silva + +commit d5369c55e1351cfeec7accf9a01823fffaaf70c6 +Author: Eduardo Silva +Date: Sun May 26 20:59:45 2013 -0600 + + configure: set new macro __MONKEY_GIT__ (devel/release) + + Signed-off-by: Eduardo Silva + +commit 9f32a0c56ab185651dc91a858ac5259f07ed9ad1 +Author: Eduardo Silva +Date: Sun May 26 18:24:08 2013 -0600 + + request: improve security over first HTTP request line. + + The HTTP parser did not evaluate probable invalid return values + for the index() glibc function. This patch force to verify the + value before to move forward with the next parsing instructions. + + Signed-off-by: Eduardo Silva + +commit 2fb4023627071cfbacd0ac7d3774191bb4fe742f +Author: Zeying Xie +Date: Sat May 25 13:53:04 2013 +0800 + + Config: Fix substring length for copy + + Signed-off-by: Zeying Xie + Signed-off-by: Eduardo Silva + +commit f9b2c35fa4cfaceb4f6dbb149a0d5da16c2240a8 +Author: Zeying Xie +Date: Sat May 25 13:50:23 2013 +0800 + + String: validate length of substring first. + + This patch makes to validate the substring string length + to avoid extra memory allocation and release. + + Signed-off-by: Zeying Xie + Signed-off-by: Eduardo Silva + +commit 8ea90d941448212398603e2a29c9dedd024e6686 +Author: Eduardo Silva +Date: Fri May 24 20:13:21 2013 -0600 + + Scheduler: protect from zombie connections + + Signed-off-by: Eduardo Silva + +commit 8b182d3d8cb29ae4eb2085db381898ec5643fcb1 +Author: Eduardo Silva +Date: Mon May 20 12:45:57 2013 -0600 + + Config: fix trace message for error pages + + Signed-off-by: Eduardo Silva + +commit 94e3366912cc2bd8fb278c3fa8a8963041b25c42 +Author: Eduardo Silva +Date: Mon May 20 12:39:17 2013 -0600 + + Debian: add missing 404.html file + + Signed-off-by: Eduardo Silva + +commit 40bd68e22fec0ef075fe9a13a2095ce1a132d121 +Author: Lauri Kasanen +Date: Mon May 20 15:02:07 2013 +0300 + + cgi: Should return NEXT here + +commit 2e1b665ec4ee71d743b3ba53038a510e2aae8417 +Author: Lauri Kasanen +Date: Mon May 20 14:55:45 2013 +0300 + + cgi: Don't call close on self + +commit c0d904b3c666788cd39229cf50e24b0d9758ada8 +Author: Lauri Kasanen +Date: Mon May 20 14:20:43 2013 +0300 + + cgi: Don't access freed memory + +commit c64107ab88ee8446d45485398d5d22b2d2234c39 +Author: Lauri Kasanen +Date: Mon May 20 14:03:30 2013 +0300 + + Set close-on-exec flag on new connections + +commit de122063f92cbc0bfde72ad41fffb978b66ba2d4 +Merge: dac562a 7fa5419 +Author: Lauri Kasanen +Date: Mon May 20 15:23:02 2013 +0300 + + Merge branch 'master' of monkey.io:/srv/git/monkey + +commit 7fa54197d6b3cd470170e5a9fd606e9d1a277236 +Author: Sonny Karlsson +Date: Mon May 20 14:05:47 2013 +0200 + + fastcgi: Remove use of strndup(). + + Signed-off-by: Sonny Karlsson + +commit dac562ad1385e2cc5dda833a13e9be1fa07bcf88 +Author: Lauri Kasanen +Date: Mon May 20 13:53:22 2013 +0300 + + cgi: Make sure stderr is handled + +commit f7347aecdd0c35e99825f0826e08c636d04dfd12 +Author: Lauri Kasanen +Date: Mon May 20 13:46:31 2013 +0300 + + Fix some remaining places from the monkey.h > libmonkey.h rename + + Configure, man pages, and examples were not updated in + fd9c07d6ccc2fe8d37093bb213d375fbbd77cd29 + + Signed-off-by: Lauri Kasanen + +commit 5c77a262bf69380b80937ab15bad4a974ffa74d1 +Author: Sonny Karlsson +Date: Mon May 20 10:27:20 2013 +0200 + + fastcgi: Change event mode of fcgi_fd correctly. + + Prevent fcgi_fd from causing error when write event occur when + receiving. + + Signed-off-by: Sonny Karlsson + +commit cf95a901e99dd80fc174cdd8300b5d14be08953e +Author: Sonny Karlsson +Date: Sun Apr 7 20:07:41 2013 +0200 + + plugin: Invoke stage_40 in http_request_end(). + + Fix a bug where stage_40 is never invoked if plugin ends request outside + of stage_* callbacks. + + Bug discovered by mchubby + (github.com/ksonny/fastcgi-monkey-plugin/issues/1). + + Signed-off-by: Sonny Karlsson + +commit 20853846056a327c47cbf6693f3580b198593882 +Author: Zeying Xie +Date: Sun May 19 22:25:47 2013 +0800 + + Cheetah: Add a funtion to strip leading and trailing whitespace of input command line + + Signed-off-by: Zeying Xie + Signed-off-by: Eduardo Silva + +commit df51b9ee3a4aab57abc01716cdcd82cb72c0d834 +Author: Zeying Xie +Date: Thu Apr 25 14:34:13 2013 +0800 + + Config: remove unnecessary semicolon(;) + + Signed-off-by: Zeying Xie + Signed-off-by: Eduardo Silva + +commit 6dfecb2c6bc1577d5cd121ab711d338bef2c4fd3 +Author: Eduardo Silva +Date: Fri May 17 18:02:26 2013 -0600 + + Debian: dropped libmonkey-dev and fixes in monkey-dev + + Signed-off-by: Eduardo Silva + +commit fd9c07d6ccc2fe8d37093bb213d375fbbd77cd29 +Author: Eduardo Silva +Date: Wed May 15 21:45:21 2013 -0600 + + Debian: new libmonkey-dev and library naming improvements + + Signed-off-by: Eduardo Silva + +commit ebec48b762776d951953eeaf8bf95f3dfac25514 +Author: Eduardo Silva +Date: Wed May 15 16:48:51 2013 -0600 + + Debian: libmonkey now distributes libmonkey.so symbolic link + + Signed-off-by: Eduardo Silva + +commit a8ff795e6d068858ca237f7b0a629a49e6d184d3 +Author: Lauri Kasanen +Date: Sun Dec 16 17:10:11 2012 +0200 + + cgi: Fix behavior with high-performance CGI + + cgit is too fast for epoll, causing epoll to send a hangup event + even though there are still several kilobytes left to read. + + With this change, cgit can correctly send huge files on monkey. + +commit 0ca081c82d6e3c8a4b498c338dcb7ae0d199160d +Author: Lauri Kasanen +Date: Wed May 15 17:59:26 2013 +0300 + + cgi: Fix a crash due to uninitialized list + +commit be7bc69fd5c92f24a1cab5cd14125bf4361d05eb +Author: Lauri Kasanen +Date: Tue May 14 12:15:34 2013 +0300 + + cgi: Make sure all mk_pointers are handled with length + +commit c91eb32fbb59a8376f49dcf088bb646e9b2e5724 +Author: Denis Mone +Date: Wed Apr 10 16:08:32 2013 +0300 + + Follow on Bug #172: content_type fixes. + + There is a problem with the sr data structure the + sr->content_type.data field contains the content_type + value as well as the content_length value.This in combination + with the SHORTLEN value(64) leads wrong characters being copied + to the content_type ENV variable. + + Signed-off-by: Eduardo Silva + +commit c6f86d70cc02277aa73335a5d72a847478b3968a +Author: Lauri Kasanen +Date: Mon Dec 17 18:14:15 2012 +0200 + + cgi: More swrite error checks + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit f2433e07d695bdb81b4724a7aaafd93e75965deb +Author: Eduardo Silva +Date: Fri May 10 21:18:12 2013 -0600 + + Debian: new libmonkey package (still require some fixes) + + Signed-off-by: Eduardo Silva + +commit 126a172f2428ae4a63003304aa143b1d2d62204d +Author: Eduardo Silva +Date: Fri May 3 21:56:24 2013 -0600 + + Debian: monkey-dev now distribute Monkey headers + + Signed-off-by: Eduardo Silva + +commit 8abf65df12ad9d4b810a68dfbdd346b46d7c0fad +Author: Eduardo Silva +Date: Tue Apr 30 20:27:42 2013 -0600 + + Debian: few Lintian cleanups + + Signed-off-by: Eduardo Silva + +commit ed229dc7333162328bc3d5ee61b3fed4a3e3ba3e +Author: Eduardo Silva +Date: Tue Apr 30 20:15:58 2013 -0600 + + Debian: add monkey-mandril package + + Signed-off-by: Eduardo Silva + +commit 968879437194bb51d6fc15538dcd72dfbc1d5683 +Author: Eduardo Silva +Date: Tue Apr 30 20:06:26 2013 -0600 + + Debian: add monkey-dirlisting plugin + + Signed-off-by: Eduardo Silva + +commit fb071fe12611de2a5440346e340d746e26a1bb93 +Author: Eduardo Silva +Date: Tue Apr 30 20:01:45 2013 -0600 + + Debian: add monkey-auth package + + Signed-off-by: Eduardo Silva + +commit d8cc0fe51c715c23a6fcf3c0b9240d15a0c0887f +Author: Eduardo Silva +Date: Mon Apr 29 21:29:07 2013 -0600 + + Debian: new monkey-cheetah plugin + + Signed-off-by: Eduardo Silva + +commit 40f3f462a30f20a063116cc14261b7f6987ff61c +Author: Eduardo Silva +Date: Mon Apr 29 20:48:09 2013 -0600 + + Debian: new monkey-logger plugin + + Signed-off-by: Eduardo Silva + +commit 84221c7ed8205a862df9c730b222605119a77913 +Author: Eduardo Silva +Date: Mon Apr 29 20:37:16 2013 -0600 + + Logger: exit properly if config file cannot be found + + Signed-off-by: Eduardo Silva + +commit b6b08ae2217e777c53bb28a62c60a7779b27d981 +Author: Eduardo Silva +Date: Mon Apr 29 20:23:03 2013 -0600 + + Debian: cleanup most of Lintian errors and warnings + + Signed-off-by: Eduardo Silva + +commit 32afbfe931094ea450af8b55ebcee4e3a9a9eae7 +Author: Eduardo Silva +Date: Mon Apr 29 18:44:45 2013 -0600 + + Debian: new monkey-liana + + Signed-off-by: Eduardo Silva + +commit aeb58c3dc18bf4c3a1d696e36b6768e7e1adff3d +Author: Eduardo Silva +Date: Mon Apr 29 18:41:28 2013 -0600 + + Debian: new monkey-cgi and monkey-fastcgi packages + + Signed-off-by: Eduardo Silva + +commit de3533d990eb7412715651570967059a374db950 +Author: Eduardo Silva +Date: Mon Apr 29 18:37:04 2013 -0600 + + Debian: make monkey-polarssl depends on monkey + + Signed-off-by: Eduardo Silva + +commit fd1e3276bc04e2f611373eec9ee6c88b19fc0037 +Author: Eduardo Silva +Date: Mon Apr 29 18:33:40 2013 -0600 + + FastCGI: plugin is now OPTIONAL + + Signed-off-by: Eduardo Silva + +commit 7ab566607c0e01d199ba931916d51fa59c3912a7 +Author: Eduardo Silva +Date: Mon Apr 29 18:33:20 2013 -0600 + + Debian: new monkey-polarssl and enable fastcgi + + Signed-off-by: Eduardo Silva + +commit 253a247f74204ac7f0e5c771b4e37d60bfb7336f +Author: Eduardo Silva +Date: Mon Apr 29 16:47:48 2013 -0600 + + Debian: update package version to v1.2.0 + + Signed-off-by: Eduardo Silva + +commit 0a4a9d98db477bf70154cb9dbeae60a2b1ba1200 +Author: Vincent Cheng +Date: Sat Apr 20 01:29:33 2013 -0700 + + Debian: install all plugins made available in the debian/tmp/ build tree + + Signed-off-by: Eduardo Silva + +commit ce89b5d81bf6ac305bece9021884c9b7f5a7910d +Merge: b354b03 d857e52 +Author: Eduardo Silva +Date: Fri Apr 19 07:40:23 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit b354b03baea8b0bb0237609d43888c4dedd140ad +Author: Vincent Cheng +Date: Wed Apr 17 01:18:35 2013 -0700 + + Debian: include polarssl plugin, remove reference to matrixssl in d/control + + Signed-off-by: Eduardo Silva + +commit 14ba00892735c44742519e5e6b15ff3b846dad58 +Author: Vincent Cheng +Date: Mon Apr 15 02:21:17 2013 -0700 + + Debian: add watch file + + Signed-off-by: Eduardo Silva + +commit f173c8a78bdd4ef8f6d1f25eb03ea2d0d887eb99 +Author: Vincent Cheng +Date: Mon Apr 15 02:11:26 2013 -0700 + + Debian: update Format: field in d/copyright with DEP-5's successor + + Signed-off-by: Eduardo Silva + +commit c0b801dc98db2165f73278a9ebb5cf6ed6b9f2a6 +Author: Vincent Cheng +Date: Mon Apr 15 02:09:02 2013 -0700 + + Debian: set -e is generally preferred (IIRC it's mentioned somewhere in Policy) + + Signed-off-by: Eduardo Silva + +commit 30c797ecae404006a3a4505995eaad69dc0c33c7 +Author: Vincent Cheng +Date: Mon Apr 15 02:08:30 2013 -0700 + + Debian: clean up rules file and take advantage of override targets provided by dh >= 7 + + Signed-off-by: Eduardo Silva + +commit 525131518d4228fb62c5e9bb03ed80cc39419bb7 +Author: Vincent Cheng +Date: Mon Apr 15 02:06:52 2013 -0700 + + Debian: remove redundant README file + + Signed-off-by: Eduardo Silva + +commit d857e52237c82173e47584b98efa46d87cea61cc +Author: swpd +Date: Tue Apr 16 01:10:31 2013 +0800 + + Logger: fix type mismatch + + Signed-off-by: swpd + Signed-off-by: Eduardo Silva + +commit 1a4d0880bd8ad4d86571c38966b94718b218e5e3 +Author: swpd +Date: Sat Apr 13 00:37:51 2013 +0800 + + Macro: remove semicolon(;) behind the MK_NET_HOSTMAX macro + + Signed-off-by: swpd + Signed-off-by: Eduardo Silva + +commit 1053f3be5c28f536537ca008579ed65284a8e745 +Author: swpd +Date: Wed Apr 10 23:27:16 2013 +0800 + + HTTP: remove double inclusion in mk_http.h + + Signed-off-by: Eduardo Silva + +commit d1413bbfec6a2ede6de97bfb369c9369cbd98f89 +Author: Lauri Kasanen +Date: Tue Apr 9 10:18:22 2013 +0300 + + dirlisting: Fix off-by-one + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ec0f09ba3b4c5264c64b91664a24f90833f3ff46 +Author: Bjorn Lindgren +Date: Mon Apr 8 09:31:30 2013 +0200 + + Lib: fix minor memory leak + + Signed-off-by: Bjorn Lindgren + Signed-off-by: Eduardo Silva + +commit e400659ccdcbd884f893f95e8a53e6a6bb887e67 +Author: Eduardo Silva +Date: Sat Apr 6 14:35:09 2013 -0600 + + Dirlisting: file name entry is a static buffer now + + Signed-off-by: Eduardo Silva + +commit f9c7f9a36787fc0e3e817750b454a8d755a06856 +Author: Eduardo Silva +Date: Fri Apr 5 14:17:33 2013 -0600 + + Core: fix minor data type mismatch + + Signed-off-by: Eduardo Silva + +commit 6b94536861568359a23da5b23740ada4df621104 +Merge: c22fd25 3724f56 +Author: Eduardo Silva +Date: Fri Apr 5 14:04:58 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit c22fd25c0c33ebfb8a23d12b97c85244524428e5 +Author: Eduardo Silva +Date: Fri Apr 5 14:02:28 2013 -0600 + + HTTP/API: Fix #161: restrict and validate return of MK_PLUGIN_RET_END. + + This patch fix issue #161 where a plugin on stage_30 returns + MK_PLUGIN_RET_END without do nothing. + + From now a STAGE_30 plugin when sending MK_PLUGIN_RET_END requires + that response HTTP headers have been sent, otherwise it will fail + with a mk_bug() from the plugin caller. + + If the intention is to close the connection, use MK_PLUGIN_RET_CLOSE_CONX + instead. + + Signed-off-by: Eduardo Silva + +commit 3724f56a1f5d4cd52970738f6766f4ea426c80b0 +Merge: 927b887 e26011f +Author: Eduardo Silva +Date: Mon Apr 1 09:45:10 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 927b8870ebef817d25a8e0c6909c5cad4c386980 +Author: Denis Mone +Date: Thu Mar 28 20:34:37 2013 +0200 + + Fixed bug #172. The problem was that the CONTENT_TYPE enviromental variable had to be set to application/x-www-form-urlencoded for the POST array to be accesed.Because the SHORTLEN value was not big enough the value copied on CONTENT_TYPE was application/x-www-form. + + Signed-off-by: Eduardo Silva + +commit b2a18cd9a5aea7f04d52009768a5f5848bbb01e6 +Author: Eduardo Silva +Date: Wed Mar 27 04:20:44 2013 -0600 + + PolarSSL: align configuration file indentation level + + Signed-off-by: Eduardo Silva + +commit e26011f4449ff534b2c21bd2d9ca35ecb5de66a8 +Author: Eduardo Silva +Date: Mon Mar 25 22:30:21 2013 -0600 + + PolarSSL: Fix makefile to link polarssl library properly + + Signed-off-by: Eduardo Silva + +commit ee5c1dbe656d93c031a584e2c38663a501e3ba6c +Merge: 1aa1a71 844b042 +Author: Eduardo Silva +Date: Sat Mar 16 12:10:54 2013 -0600 + + Merge fix for #174 + +commit 844b0429ce3e64535a10b5cd7f144ff39bae4b7b +Author: Eduardo Silva +Date: Sat Mar 16 12:07:05 2013 -0600 + + CGI: Fix #174 / unhandled global rules + + This patch Trac #174 problem, where the global rules for CGI + were not handled by the plugin. Now the plugin is able to run CGI + based scripts using rules from plugins/conf/cgi/cgi.conf. + + Tested with simple Perl and PHP scripts. + + Signed-off-by: Eduardo Silva + +commit 1aa1a711da6bc36a901514474ad9e24e803132c5 +Author: Eduardo Silva +Date: Fri Mar 15 15:45:42 2013 -0600 + + Configure: Fix #117: remove strip instructions + + Signed-off-by: Eduardo Silva + +commit 90363a114804d38330091977e15478b134e83543 +Merge: 0dd4dfb 3a14258 +Author: Eduardo Silva +Date: Fri Mar 15 07:27:28 2013 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 3a14258510e016b15b2c28c1ce434a9c91a3d8e7 +Author: Sonny Karlsson +Date: Tue Mar 12 22:32:27 2013 +0100 + + mconf: List polarssl as https transport layer. + + Signed-off-by: Sonny Karlsson + +commit c9ce51ea18da423d1fee026ef16fa78226da3b5d +Author: Sonny Karlsson +Date: Fri Mar 8 18:48:03 2013 +0100 + + polarssl: Add support for TCP_FASTOPEN. + + Signed-off-by: Sonny Karlsson + +commit 76211481835ca0e5e2a01bd9b49f53a32cef694b +Author: Sonny Karlsson +Date: Fri Mar 8 17:41:40 2013 +0100 + + polarssl: Fix assert failure on exit. + + Return NULL if local contexts is requested outside worker threads. + Allows close calls from main process on exit. + + Signed-off-by: Sonny Karlsson + +commit 7d137885ee9611f3e2a5a0ce8b4741320835845b +Author: Sonny Karlsson +Date: Fri Mar 8 17:14:46 2013 +0100 + + polarssl: Use DHM parameters from RFC5114 if available. + + Uses built-in parameters and removes warnings if polarssl version > + 1.2.0. + + Signed-off-by: Sonny Karlsson + +commit 4573786c2f704385ae02f833c5c4a7a4faecb34e +Author: Sonny Karlsson +Date: Fri Mar 8 17:07:39 2013 +0100 + + polarssl: Use dummy error_strerror() if not available. + + Includes a dummy version of error_strerror() if POLARSSL_ERROR_C is + undefined and version <1.2.5. + + Signed-off-by: Sonny Karlsson + +commit 364f63a107be7d298ea8ead1fc12c29b87c4c2a1 +Author: Sonny Karlsson +Date: Fri Mar 8 16:57:12 2013 +0100 + + polarssl: Use global entropy context. + + Move entropy from thread context to global context. + + Signed-off-by: Sonny Karlsson + +commit d7147c3ee56e6d83760c1b0f6167f2bf21916ebf +Author: Sonny Karlsson +Date: Tue Feb 5 15:08:48 2013 +0100 + + polarssl: Reset session in context_unset. + + Signed-off-by: Sonny Karlsson + +commit df144491b6cae55b4a906d57dea62cf0b39a7dbb +Author: Sonny Karlsson +Date: Tue Feb 5 15:08:26 2013 +0100 + + polarssl: Rename polar_context_unset to context_unset. + + Signed-off-by: Sonny Karlsson + +commit 594120113bfaf432acbed4bef02b828a0e4c73b7 +Author: Sonny Karlsson +Date: Fri Mar 8 21:22:53 2013 +0100 + + polarssl: Don't return -1 from sendfile on EAGAIN. + + If no data is sent, but EAGAIN is set, return 0 instead of the usual -1. + This is a workaround as EAGAIN isn't checked when sendfile is used in + core. + + Signed-off-by: Sonny Karlsson + +commit 0dd4dfb6baeceb62e317bd4813773657f8e3b8e0 +Author: Eduardo Silva +Date: Mon Mar 11 20:20:37 2013 -0600 + + Mimetype: remove lower case lookup + + Signed-off-by: Eduardo Silva + +commit 2bb5178ed74300a9b4e95b2cc1f960dde5b01dc9 +Author: Lauri Kasanen +Date: Mon Mar 11 20:31:45 2013 +0200 + + lib: Move the workers check to the right place, fixes crash + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 73a011168e8c2c13e45dad0a4a705e6fa89d345b +Author: Eduardo Silva +Date: Mon Mar 11 12:56:39 2013 -0600 + + Configure: add #LIBDIR# parser + + Signed-off-by: Eduardo Silva + +commit 82ab60f4f3ad1d23230c680a330ba62507eca48f +Author: Eduardo Silva +Date: Thu Mar 7 08:23:23 2013 -0600 + + Lib: if config->workers is zero, set value based on number of CPU cores + + If the config->workers is zero, the number of worker threads is + determinated based on the number of CPU cores. + + Signed-off-by: Eduardo Silva + +commit 0198689376cad221b15129808196f2c2d21d08b4 +Author: Eduardo Silva +Date: Mon Feb 18 07:11:03 2013 -0600 + + Lib: add missing errno.h header and fix a mimetype point type + + Signed-off-by: Eduardo Silva + +commit 62a9f2a08bb788f664402ffaf4cf2d4cff8f929a +Author: Eduardo Silva +Date: Mon Feb 18 07:04:42 2013 -0600 + + CGI: implement global CGI match rules + + Signed-off-by: Eduardo Silva + +commit 5a6696bf90a9b563c1a7c22752ac171102b13462 +Author: Eduardo Silva +Date: Sat Feb 16 16:54:11 2013 -0600 + + TCP: Add support for Linux TCP_FASTOPEN (aka TFO) + + Recent Linux Kernels implements a new TCP feature + called TCP_FASTOPEN. This feature reduces the TCP + handshake roundtrip improving performance for new + connections. For more details refer to the following + articles: + + - http://lwn.net/Articles/508865/ + - http://kernelnewbies.org/Linux_3.7#head-cd32b65674184083465d349ad6d772c828fbbd8b + + Requirements: + + - the client side must be running Kernel >= 3.6. + - the server side must be running Kernel >= 3.7. + - Besides the Kernel version, the client and the server + must request to use TCP_FASTOPEN/MSG_FASTOPEN in their + respective calls. + - the tcp_fastopen flag must be enabled: + + # echo 1 > /proc/sys/net/ipv4/tcp_fastopen + + The good thing of this feature is that no matters if + the client implements TFO or not, the server will work + anyways. + + This patch enable TCP_FASTOPEN by default in Liana plugin + and also export a new function mk_socket_set_tcp_fastopen() + for generic purposes. + + Signed-off-by: Eduardo Silva + +commit fbc2a6b2c8828e6bbc1ae5a5c099905abc1c4263 +Author: Eduardo Silva +Date: Sat Feb 16 13:50:47 2013 -0600 + + Liana_SSL: deprecate plugin based on MatrixSSL + + According to: + + http://lists.monkey-project.com/pipermail/monkey/2013-February/001785.html + + Liana provides the networking layer to Monkey and its _SSL version the + networking layer with SSL encryption capabilities. The first version of + this plugin was built on top of MatrixSSL library but this last one is not + well maintained and there is no community involved on that product, what + that means ? that nobody cares about it and integrate in a Linux + distribution is a pain so we cannot be stuck on that anymore. Jonathan + (zeus) from our community was doing a good job packaging the latest version + in our repository, but MatrixSSL continue be a problem. + + After review some open sourced SSL options, I found that PolarSSL is the + best one that fit our needs. Because of: + + - open source + - well maintained in Linux distributions + - lightweight so it fill well in embedded Linux environments + - years of work supported by a community + + Besides that, there is a concern about how that library can impact Duda I/O + (web services framework that runs on top of Monkey). Because the web + services created by people can be closed... what happen if the service + links to PolarSSL through Duda LGPL code ? answer: nothing. As PolarSSL + works under Monkey and Monkey under Duda, there is no problem in linking + or licensing issues, this have been confirmed by PolarSSL team after talk + to their lawyer, so we are pretty good. + + Sonny Karlsson have provided yesterday a new plugin named PolarSSL (good + job!), so everything is ok for the next step. + + Signed-off-by: Eduardo Silva + +commit 056b7fc2ebd889fa9e4d41db427301d31b57d34c +Author: Eduardo Silva +Date: Sat Feb 16 13:45:20 2013 -0600 + + Palm: deprecate plugin. Its not you, its me. + + Signed-off-by: Eduardo Silva + +commit e5f9bc8a4576c2e6870c5143cf2aaf958ae00bac +Author: Eduardo Silva +Date: Fri Feb 15 21:18:16 2013 -0600 + + Plugin: export red-black tree interfaces + + Signed-off-by: Eduardo Silva + +commit d6b00238a1c68a1428c4da370978f7a7ed5e5bdf +Author: Eduardo Silva +Date: Fri Feb 15 16:48:44 2013 -0600 + + Scheduler: use red-black tree algorithm to handle connection nodes + + This patch replace the linear query over the busy queue to lookup + connection nodes by a red-black tree algorithm. This represents + a huge improvement in performance under a high load. + + Signed-off-by: Eduardo Silva + +commit 0665af623c3f6b74e268566bce81b9fcc16500d5 +Author: Eduardo Silva +Date: Thu Feb 14 23:33:46 2013 -0600 + + Epoll: remove instance field from epoll state nodes and code cleanups + + Signed-off-by: Eduardo Silva + +commit f64be99085b28f425ca81f7429396b967a244108 +Author: Eduardo Silva +Date: Thu Feb 14 12:02:50 2013 -0600 + + Configure: link to mk_rbtree.o object + + Signed-off-by: Eduardo Silva + +commit d4460fd3c810e017292a27b42b9f9e95c4b6cd0b +Merge: ca69bc6 fed3d42 +Author: Eduardo Silva +Date: Thu Feb 14 12:02:06 2013 -0600 + + Merge commit 'fed3d4224cdbf2fed51c272dde6138df14916aad' into red-black-tree + +commit fed3d4224cdbf2fed51c272dde6138df14916aad +Author: Eduardo Silva +Date: Thu Feb 14 11:53:46 2013 -0600 + + Epoll: define behavior mask as unsigned int + + previous this patch the behavior mask for each file descriptor + state was defined as signed int, but EPOLLET value can take the + highest value available and this can lead to some problems when + mapping inside a signed value. + + This patch makes the behavior mask be defined as unsigned int. + + Signed-off-by: Eduardo Silva + +commit 73f14a893bc1c1844f0afce1b53029cfc4f1b43c +Author: Curtis Hall +Date: Mon Feb 11 14:18:54 2013 -0600 + + Added CONFIGURATION title to INSTALL + + Signed-off-by: Eduardo Silva + +commit ca69bc66ecba9827efbee88fd9fc1fe9e8cf140c +Author: Eduardo Silva +Date: Sun Feb 10 16:31:22 2013 -0600 + + Core: add mk_rbtree.c and mk_rbtree.h + + Signed-off-by: Eduardo Silva + +commit e6bb1fb52f00ce7180a992a462da99a7abf0a906 +Author: Eduardo Silva +Date: Sun Feb 10 16:30:55 2013 -0600 + + Core: initial implementation of red-black tree + + Signed-off-by: Eduardo Silva + +commit 831645824fc48ab97e59da06f63e94090a07c758 +Author: Neil Haran +Date: Wed Feb 6 14:20:06 2013 -0600 + + Plugin: fix offset of data content when sending out data + + Signed-off-by: Eduardo Silva + +commit b402b91f20f55570625e0fe0651bf481bd95ddd4 +Author: Sonny Karlsson +Date: Wed Feb 6 19:34:52 2013 +0100 + + fastcgi: Update plugin to v0.2. + + commit 03aec5b6d3a364625aa31c3bfef8605d0bdd44f9 + Author: Sonny Karlsson + Date: Wed Feb 6 19:23:06 2013 +0100 + + fastcgi: Set version. + + commit 064822ac4a913cf067db34c374492243e9079981 + Author: Sonny Karlsson + Date: Wed Feb 6 19:21:24 2013 +0100 + + fastcgi: Set HTTPS in cgi environment. + + commit 58585d06c37a5a1f1ca008b5bbba0bb1b64f877a + Author: Sonny Karlsson + Date: Wed Feb 6 19:13:28 2013 +0100 + + fastcgi: Compatibility with SSL transport. + + Use mk_api->socket* on client socket and unistd functions on fastcgi + socket. + + commit e8549387c228c45bc128844deaa27d97fc64cc3d + Author: Sonny Karlsson + Date: Mon Jan 28 13:20:12 2013 +0100 + + fastcgi: Fix conditional close of fastcgi connection. + + commit f5ebf5edc5062446313b99f6886cad8620df5b06 + Author: Sonny Karlsson + Date: Sun Jan 27 16:54:43 2013 +0100 + + fastcgi: Update minimal libfcgi config example. + + commit ce56895c132c8b9769e9fd365b6662a2d8b47596 + Author: Sonny Karlsson + Date: Sun Jan 27 17:10:16 2013 +0100 + + fastcgi: Indicate which variables are required in config. + + commit 46875aafb63897d75fc2398db381679d28d27ffb + Author: Sonny Karlsson + Date: Sun Jan 27 17:08:57 2013 +0100 + + fastcgi: Auto-generate LocationName if none given. + + commit 427a513223fc7fe5b70cc8657b147f6e86c5f48b + Author: Sonny Karlsson + Date: Fri Jan 11 11:57:03 2013 +0100 + + fastcgi: Let default for MaxConnections be 1. + + commit 6738f4baff43f4f8455b4606dc1f811e729d2802 + Author: Sonny Karlsson + Date: Fri Jan 11 11:52:57 2013 +0100 + + fastcgi: Fixup of trace and debug messages. + + Fix format warning in printf. + + Check return from event_add. + + Check return of fcgi_fd state change. + + Remove some redundant trace messages. + + commit 3f5015ad04c60f286fa1bc998bb13bb334b9e841 + Author: Sonny Karlsson + Date: Mon Jan 7 12:23:25 2013 +0100 + + fastcgi: Add inet_ntop include in fcgi_env. + + commit f3caaa99dee45405a3e4c993fd987287d6505971 + Author: Sonny Karlsson + Date: Fri Jan 11 11:41:46 2013 +0100 + + fastcgi: Don't set CONTENT_LENGTH unless needed. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit cd07b9cd073e915f632929f6f4b5a9d0ff967a16 +Author: Sonny Karlsson +Date: Fri Jan 18 08:50:13 2013 +0100 + + polarssl: Add HTTPS plugin. + + Adds HTTPS support using PolarSSL v1.*. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 2942ec90beb9353cb45eff1ed26c0b67d74b3ac5 +Author: Sonny Karlsson +Date: Sun Feb 3 12:48:02 2013 +0100 + + configure: Fix replacement of variables in Makefiles. + + Handle CFLAGS/LDFLAGS/DEFS containing '/' characters. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit f6f18f4665c12a00e98923770bf9a4f9c6034ec1 +Author: Sonny Karlsson +Date: Fri Feb 1 10:06:11 2013 +0100 + + iov: Reset total_len in mk_iov_free_marked. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 4edf9a89ffbdc75e25fe424cf1f301ebb7986ae7 +Author: Sonny Karlsson +Date: Thu Jan 31 20:34:34 2013 +0100 + + socket: Use close from transport plugin. + + sched: Replace close call with mk_socket_close. + + server: Replace close call with mk_socket_close. + + lib: Replace close with mk_socket_close. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit eb250bf432bf9654e56380ef3c56dbf327b23e7f +Author: Eduardo Silva +Date: Sun Feb 3 20:55:05 2013 -0600 + + Plugin: fix return value for http_request_end() on mk_conn_close() call + + Signed-off-by: Eduardo Silva + +commit a08cf6b4bc9eb1be6b4767dc917cf68fc09279eb +Author: Eduardo Silva +Date: Sat Feb 2 23:24:50 2013 -0600 + + Epoll: epoll states array size now its equal to worker capacity + + Signed-off-by: Eduardo Silva + +commit 3ee55869f6ab1c27f28a191716ec170606324180 +Author: Eduardo Silva +Date: Fri Feb 1 07:19:23 2013 -0600 + + Configure: use --strip-program argument for install command + + Signed-off-by: Eduardo Silva + +commit c8b8e3ae1ae0c84ae513e06e1f7ec9dd3f386e18 +Author: Eduardo Silva +Date: Thu Jan 31 21:45:21 2013 -0600 + + README: update + + Signed-off-by: Eduardo Silva + +commit 573c43eeabff347a566a6d57bf7648ce9b941e5e +Author: Eduardo Silva +Date: Thu Jan 31 21:31:08 2013 -0600 + + HTTP: fix protocol version + + Signed-off-by: Eduardo Silva + +commit abf99c6a96c5111d269657681d25f3fc41686a3f +Author: Eduardo Silva +Date: Thu Jan 31 21:27:49 2013 -0600 + + Core: new -w flag to specify number of workers from command line + + Signed-off-by: Eduardo Silva + +commit 601f9be93184ba3f74e3293122e95706b192a8ad +Author: Eduardo Silva +Date: Thu Jan 31 13:10:00 2013 -0600 + + Utils: check that gmt cache is being used properly + + If the gmtcache is invoked from a process context, this will end + in a segfault. This patch adds an mk_unlikely() validation to the + value returned by pthread_getspecific(). So if it was called from + an unexpected process context it will end up in a mk_bug(). + + Signed-off-by: Eduardo Silva + +commit c35886f58c7f2a0d8af42e4b467bd3f0c3267dd7 +Author: Eduardo Silva +Date: Tue Jan 29 15:31:21 2013 -0600 + + Mimetype: do all extension cmp in lower case mode + + Signed-off-by: Eduardo Silva + +commit 2754611600726f7baaa130d2c57578becfc22e1b +Author: Eduardo Silva +Date: Mon Jan 28 23:08:21 2013 -0600 + + Memory: do not reset pointer when is setting data. not required + + Signed-off-by: Eduardo Silva + +commit 6bf0f0c95f435e66aef06043b086dc570eeeb1aa +Author: Eduardo Silva +Date: Mon Jan 28 18:53:10 2013 -0600 + + List: comment code for entry_first() and entry_last() (Fixed) + + Signed-off-by: Eduardo Silva + +commit 4f2f9445249eb0572df33b007c55e02a5a3a485a +Author: Eduardo Silva +Date: Mon Jan 28 18:51:41 2013 -0600 + + Revert "List: comment code for entry_first() and entry_last()" + + This reverts commit 5e9971d539b80d87f00c3a41f45cd6fb1b3fea22. + +commit 5e9971d539b80d87f00c3a41f45cd6fb1b3fea22 +Author: Eduardo Silva +Date: Mon Jan 28 18:38:25 2013 -0600 + + List: comment code for entry_first() and entry_last() + + Signed-off-by: Eduardo Silva + +commit 83003497f1794c955a5d522e824deff541044400 +Author: Eduardo Silva +Date: Mon Jan 28 08:05:38 2013 -0600 + + utils: stacktrace add padding zeros to pointer addr + + Signed-off-by: Eduardo Silva + +commit 9b8380de08fdf0f5d4c11972d2ec8049b017b4bf +Author: Sonny Karlsson +Date: Fri Jan 18 09:24:54 2013 +0100 + + utils: Stacktrace fixup. + + Fix loop condition in stacktrace. + + Use %p for printing pointers in stacktrace. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit ff6ca37841b5747ba80dc7ddf3e6bf255082211e +Author: Eduardo Silva +Date: Sat Jan 26 09:44:25 2013 -0600 + + Help: update banner + + Signed-off-by: Eduardo Silva + +commit b733d39c87b5ca5dbcce170167d5edb18177bf8c +Author: Eduardo Silva +Date: Sat Jan 26 09:42:46 2013 -0600 + + Core: new -p flag to specity TCP port + + Signed-off-by: Eduardo Silva + +commit fcd1c6f9d4183cac4b61cf3f281b964c05211725 +Author: Lauri Kasanen +Date: Sun Dec 16 16:41:01 2012 +0200 + + cgi: Document the request getters + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 7ff63bb2feb3ce519125e23a7049e05bfa7e2ed2 +Author: Lauri Kasanen +Date: Sun Dec 16 14:08:28 2012 +0200 + + dirlisting: Don't allocate unneeded memory, save 104 bytes per entry + + We need pointers, not full structs in toc. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 5d74678e3de2f14dd995e1c2b81c5d3d5b8dd3bd +Author: Lauri Kasanen +Date: Sun Jan 20 19:20:13 2013 +0200 + + configure: Fix a typo (CLFLAGS) and make sure the -O logic always sets the visibility + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 5c688e274c8445c135b5db903a589136d59130c6 +Author: Sonny Karlsson +Date: Tue Jan 22 21:49:13 2013 +0100 + + request: Remove handled_by member from session_request. + + Unused relic from old commit. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit a6bdc1225fd34fac0da4f3af1e39e5b1ee07a1f3 +Author: Sonny Karlsson +Date: Mon Jan 21 17:33:51 2013 +0100 + + config: If Workers is 0, launch one thread per processor. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 1a1d04483290fcf1fc4463366d91e54b96978f1d +Author: Lauri Kasanen +Date: Sun Dec 16 15:11:58 2012 +0200 + + dirlisting/guineo: Compact the theme + + This saves about 270kb (29%) in a dir of about 3k entries, while looking the same. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 9d9faba9e78eab1f7fc71b9e75353c450b4899d2 +Author: Lauri Kasanen +Date: Sun Dec 16 14:55:27 2012 +0200 + + dirlisting: Fix failure in big directories + + Dirlisting is not designed to support event-based working, it is one-shot. + + So in a big directory, writev would return EAGAIN (EWOULDBLOCK) after + having written a partial entry. + + This would then confuse the client in chunked mode (you promise X bytes but + only send less), which closes the connection, leaving you with a partial listing. + + With this patch, dirlisting succeeds in a dir with 23k entries. + Without, it fails in a dir with little over 1k entries. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit cbb879b5c54182744807d2eaed014c7e359e1a2b +Author: Lauri Kasanen +Date: Sun Dec 16 14:20:59 2012 +0200 + + dirlisting: Use case-insensitive sort + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 712d22cf72893e03cea6de9efbc9148c58d8ff9d +Author: Lauri Kasanen +Date: Sun Dec 16 14:19:10 2012 +0200 + + dirlisting: Remove unnecessary variable + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 9e938fee821167daf6ef03bd8ee8d74644b09431 +Author: Lauri Kasanen +Date: Sun Dec 16 14:16:07 2012 +0200 + + dirlisting: Mem-optimize mk_f_list, 112 -> 88 bytes + + The theoretical maximum of the strftime string is somewhere around 18 bytes. + Make it 24 to have some extra, and to be a nicely cacheable multiple. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3a06c0e85f9bb4e1594a35de4db2645ae214d223 +Author: Lauri Kasanen +Date: Sun Dec 16 13:33:21 2012 +0200 + + request: If mk_file_get_info returns -1, size is not set. Found by valgrind + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 622dcd384f998c666d6fc0dc5779436d1127b9f1 +Author: Lauri Kasanen +Date: Sun Jan 20 10:44:35 2013 -0600 + + configure: Conditionally set -O2 + + Signed-off-by: Eduardo Silva + +commit f80af9e2a62bb666c5d21b04eae17dddd2e7f7c3 +Author: Eduardo Silva +Date: Tue Jan 15 21:10:05 2013 -0600 + + lib: do not left stage30 until all content is sent + + If for some reason the send() call returns -1 because the socket + is not yet ready to receive more data (due to non-blocking mode), + the routine should not stop working and should try to send the + information over and over until is fully served. + + This is not an expected behavior in a non-blocking server, but is + a temporal fix until the 'pending buffers' interface is implemented. + + This problem was found due to #170. + + Signed-off-by: Eduardo Silva + +commit 473ba999caf7d87cd815d0f4abe1efc89a994b0d +Author: Eduardo Silva +Date: Tue Jan 15 21:00:40 2013 -0600 + + Headers: Fix #170: sr->headers._extra_rows keeps invalid reference + + Found a specific condition in Monkey core where after send + the headers, if the field sr->headers._extra_rows is set and + then freed, its not marked as NULL. If sub sequent calls + from the Plugin API takes place and this field is validated, + it fails in a segmentation fault. + + This patch set the structure field to NULL after is freed. + + Signed-off-by: Eduardo Silva + +commit 97ba007c7ad14db2863a367c579eac44a9e32aca +Author: Eduardo Silva +Date: Fri Jan 11 16:40:09 2013 -0600 + + Plugin: do not print out error messages if a symbol is not found + + The plugins interface try to load every known symbol from a loaded + plugin, not all plugins implements all of them so when dlerror() + returns NULL, it should not print errors to stdout. + + Signed-off-by: Eduardo Silva + +commit f01ab1d29d7f31a5799194395afb191ac00b091f +Merge: bbcd308 b89c7db +Author: Eduardo Silva +Date: Fri Jan 11 15:38:15 2013 -0600 + + Liana: fix merge + + Signed-off-by: Eduardo Silva + +commit b89c7dbb493da00d27327860f1ddedeb51baea33 +Author: Eduardo Silva +Date: Fri Jan 11 15:34:31 2013 -0600 + + Liana: fix merge problem from coverity branch + +commit 7fc2395bd7e596978e4163c6be39d893017a718c +Author: Lauri Kasanen +Date: Tue Dec 18 14:41:49 2012 +0200 + + palm: getpeername may fail, found by coverity + +commit 0054fc538aa0145b335f22277460b854db9903e7 +Author: Lauri Kasanen +Date: Tue Dec 18 14:39:07 2012 +0200 + + dirlisting: Remove dead code, found by coverity + +commit 804b2dbc067c01e61aec70883aef2aed116f2a5e +Author: Lauri Kasanen +Date: Tue Dec 18 14:29:58 2012 +0200 + + liana, cheetah: Fix fd leaks on error path, found by coverity + +commit d2f6e0b1ebf81773f93d31f88db9cb949cb379e5 +Author: Lauri Kasanen +Date: Tue Dec 18 14:24:27 2012 +0200 + + plugin, iov, auth, request: Remove mem leaks, found by coverity + +commit 5096a2332433b6c4141306711496e22575b9ac33 +Author: Lauri Kasanen +Date: Tue Dec 18 14:16:46 2012 +0200 + + liana: Fix non-looping loops, found by coverity + +commit 51161ddea1669f9412627ef319eaefb166078bb8 +Author: Lauri Kasanen +Date: Tue Dec 18 14:13:21 2012 +0200 + + plugin: Make use of the err variable, found by coverity + +commit 81761182e46d916608d985a7bb7b542de6cee57c +Author: Lauri Kasanen +Date: Tue Dec 18 14:11:41 2012 +0200 + + sched: Remove double close, found by coverity + +commit 42e966e729f2e369df199c4c3d20c325f262b516 +Author: Lauri Kasanen +Date: Sat Dec 15 21:51:03 2012 +0200 + + cgi: Support some non-compliant CGI programs (cgit uses LFLF after headers) + +commit bbcd3082b9bc36678296fd7377fca5d38838c93e +Merge: 652fbf3 9fcc2e8 +Author: Eduardo Silva +Date: Fri Jan 11 15:29:44 2013 -0600 + + Merge branch 'coverity' of https://github.com/clbr/monkey + +commit 652fbf3c0232258263922b036f389948490bb65a +Author: Lauri Kasanen +Date: Tue Dec 18 14:41:49 2012 +0200 + + palm: getpeername may fail, found by coverity + +commit 1b41f2eaa67b9f228062c82be6288b8150ce5d38 +Author: Lauri Kasanen +Date: Tue Dec 18 14:39:07 2012 +0200 + + dirlisting: Remove dead code, found by coverity + +commit 2512bb30c1ea8d55780aad39db8cc6661cdaae27 +Author: Lauri Kasanen +Date: Tue Dec 18 14:29:58 2012 +0200 + + liana, cheetah: Fix fd leaks on error path, found by coverity + +commit 5f8efc9d465fd455c825693dae547ce077b80a51 +Author: Lauri Kasanen +Date: Tue Dec 18 14:24:27 2012 +0200 + + plugin, iov, auth, request: Remove mem leaks, found by coverity + +commit bbe12cbbe3dc98fd3ad45e8b4c79c5e42eaa26da +Author: Lauri Kasanen +Date: Tue Dec 18 14:16:46 2012 +0200 + + liana: Fix non-looping loops, found by coverity + +commit 71db62aaecbae223d159def4608597ac5278c378 +Author: Lauri Kasanen +Date: Tue Dec 18 14:13:21 2012 +0200 + + plugin: Make use of the err variable, found by coverity + +commit 3b419e749e51311e3efd48d8c6942df46a58d973 +Author: Lauri Kasanen +Date: Tue Dec 18 14:11:41 2012 +0200 + + sched: Remove double close, found by coverity + +commit 62029e2df99c9bc349412b081bedf1a2f0b94e3a +Author: Lauri Kasanen +Date: Sat Dec 15 21:51:03 2012 +0200 + + cgi: Support some non-compliant CGI programs (cgit uses LFLF after headers) + +commit ae4eb56a56bebac82806bfcd2255878d5ddb84cd +Author: Eduardo Silva +Date: Fri Jan 11 14:16:06 2013 -0600 + + Configure: new uClib mode through --uclib-mode + + This patch introduce the new parameter to enable uclib compatibility, + once is set it disable some specific GLIBC features. + + Signed-off-by: Eduardo Silva + +commit 3ff524cfbb5cc1eb5e2c3e83ea686d05cbad0cb7 +Author: Eduardo Silva +Date: Fri Jan 11 13:51:17 2013 -0600 + + Configure: new option --no-backtrace + + This patch introduce a new 'configure' script option --no-backtrace. + The backtrace(3) function is part of GNU extensions, mostly available + in glibc, on other C libraries like uClib is not implemented, for hence + we need a mechanism to disable the backtrace feature on demand. + + Signed-off-by: Eduardo Silva + +commit 4d01c9c4b564ef12c396f1b48f0a36690a205e45 +Author: Eduardo Silva +Date: Fri Jan 11 13:33:10 2013 -0600 + + Signals: implement sys_siglist if symbol is not found + + When compiling with old toolchains for some ARM devices and + mostly related to old versions of uClib, the symbol sys_siglist + is not found and make the compilation process to fail. + + This patch introduce a header with the sys_siglist array defined + in the following file: + + src/contrib/uclib/sys_siglist.h + + If the symbol is not found, it includes the header. + + Signed-off-by: Eduardo Silva + +commit 94b3e10b22e6956abc01322ac2bf12fea7db2d11 +Author: Eduardo Silva +Date: Fri Jan 11 13:15:42 2013 -0600 + + Utils: improve stacktrace + + This patch adds a few useful features to the mk_utils_stacktrace() + function. + + - It adds the function name resolution and binary file associated + - The stacktrace is print on any compilation mode + - Function resolution names are only available on --debug mode + - If Monkey compiles with --debug mode, the compiler parameter + -fvisibility=hidden is turned off. + + Signed-off-by: Eduardo Silva + +commit 1da85f5567caa0d2f8e8d46249283bb1659e7912 +Author: Sonny Karlsson +Date: Sat Jan 5 15:33:22 2013 +0100 + + fastcgi: Use pthread_key_t for thread local vars. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit ac57d90a13025e510e12476d8e72c56b675bd6d6 +Author: Eduardo Silva +Date: Sun Dec 23 07:28:56 2012 -0600 + + CGI: Allow to define interpreter and mimetypes for each match + + This patch expand the CGI plugin so now is possible to define + multiple Match rules plus define an optional interpreter and + mime type to assist scripting such as PHP, Python, Lua, etc. + + Signed-off-by: Eduardo Silva + +commit 9fcc2e8a32e26dbc7c2c89aa28d23cfffae6cbbe +Author: Lauri Kasanen +Date: Tue Dec 18 14:41:49 2012 +0200 + + palm: getpeername may fail, found by coverity + +commit e0a39a6d058de6f8572713146d04df8a3c4685e1 +Author: Lauri Kasanen +Date: Tue Dec 18 14:39:07 2012 +0200 + + dirlisting: Remove dead code, found by coverity + +commit e4a73c3c12de66a7940f717742a69d72abf1b0b9 +Author: Lauri Kasanen +Date: Tue Dec 18 14:29:58 2012 +0200 + + liana, cheetah: Fix fd leaks on error path, found by coverity + +commit 72cb7769c9ce12a9b307daf16b95819bab13701f +Author: Lauri Kasanen +Date: Tue Dec 18 14:24:27 2012 +0200 + + plugin, iov, auth, request: Remove mem leaks, found by coverity + +commit e61aedbad8722294eb669eff2a7a26050d7187ca +Author: Lauri Kasanen +Date: Tue Dec 18 14:16:46 2012 +0200 + + liana: Fix non-looping loops, found by coverity + +commit 1d5e904579ccc41bcfaa4e39a2cc66b422cea155 +Author: Lauri Kasanen +Date: Tue Dec 18 14:13:21 2012 +0200 + + plugin: Make use of the err variable, found by coverity + +commit b9dba8467dd9c26fbadde4234116251c2da15c83 +Author: Lauri Kasanen +Date: Tue Dec 18 14:11:41 2012 +0200 + + sched: Remove double close, found by coverity + +commit 79a86b16fe593d6d7e597e54c74861ee9661a9f2 +Author: Lauri Kasanen +Date: Sat Dec 15 21:51:03 2012 +0200 + + cgi: Support some non-compliant CGI programs (cgit uses LFLF after headers) + +commit a44d623f7ef22769b1441ab95701851afd7682d6 +Author: Sonny Karlsson +Date: Fri Nov 30 20:11:44 2012 +0100 + + lib: Add get_request_header. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit c11795dd2946ca8162925bafb20d52d145fb144f +Author: Eduardo Silva +Date: Fri Nov 30 12:42:06 2012 -0600 + + Palm: fix unused variables with void type + + Signed-off-by: Eduardo Silva + +commit b7eb06ec76060a63157431f8db4c007c8ac99493 +Author: Eduardo Silva +Date: Fri Nov 30 12:38:09 2012 -0600 + + Mandril: fix unused variables with void type + + Signed-off-by: Eduardo Silva + +commit 28b0aaa3ac8bc2c0b8876599d3726e9d81b0818a +Author: Eduardo Silva +Date: Fri Nov 30 12:37:08 2012 -0600 + + Logger: fix unused variables with void type + + Signed-off-by: Eduardo Silva + +commit 40f57bb7cd2ae0b1a2bf2ba2306dbf86612a6c51 +Author: Eduardo Silva +Date: Fri Nov 30 12:35:53 2012 -0600 + + Dirlisting: fix unused variables with void type + + Signed-off-by: Eduardo Silva + +commit 8a46a856a1128f3efb584318c9c18fce178f8489 +Author: Eduardo Silva +Date: Fri Nov 30 12:34:44 2012 -0600 + + Auth: fix unused variables with void type + + Signed-off-by: Eduardo Silva + +commit 9100a131a80251c8a2fa91d1386335af6c47c15c +Author: Eduardo Silva +Date: Tue Nov 6 20:27:48 2012 -0600 + + Liana: set confdir variable as unused + + Signed-off-by: Eduardo Silva + +commit d46f2223e0e6ffbd0acac380877aea80eedd6943 +Author: Eduardo Silva +Date: Tue Oct 30 07:49:17 2012 -0600 + + Plugins: Fix license headers from GPL to LGPL + + Signed-off-by: Eduardo Silva + +commit 9e7b283a26b3e5505b647eff4259a9d29cc606f8 +Author: Sonny Karlsson +Date: Thu Aug 30 19:44:35 2012 +0200 + + liana_ssl: Handle multiple SSL records and false start. + + In io_read, handle as many records as possible. Use non-blocking sockets + for IO. Most of the handshake is done in events, may cause troubles. + Tested with Safari, Chrome and Firefox. + + Known problems: + * First request by Chrome browsers fail, one byte is missing every + time, may be a bug in matrixssl. + * Generates occasional socket errors in event_read, may fail + requests. + * SSL closure notifications are sometimes ignored. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 5f6087e3d69f076bb3d4a98d628e18b672f1ce13 +Author: Eduardo Silva +Date: Sat Sep 15 09:50:01 2012 -0600 + + Request: new stage30_blocked flag + + This patch introduces a new flag in the session_request struct + named 'stage30_blocked'. In mk_http_init() when the file is not found, + it triggers the plugin STAGE_30 to look for a plugin handler. In some + cases the plugin would overwrite the real path of the requested file + and make Monkey handle the new path for the static file. At this point + we need to block the extra STAGE_30 calls from mk_http_init(). + + For short.. if a plugin overwrites the real_path, let Monkey handle that + and do not trigger more STAGE_30's. + + int stage30_blocked; + + The default value is MK_FALSE. + + Signed-off-by: Eduardo Silva + +commit d7dd615bf51b0e3c3943fcb76fadfae9dc2c9fe2 +Author: Sonny Karlsson +Date: Mon Sep 10 15:12:25 2012 +0200 + + util: Remove mk_request.h include from header. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit db5f3a06f14a311c934b9153e1bd091be2b051dd +Author: Sonny Karlsson +Date: Mon Sep 3 13:28:03 2012 +0200 + + socket: Remove mk_socket_timeout prototype. + + The associated definition does not exist. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 657423bcfe7f04afc93ced37a178d28fbf602b46 +Author: Eduardo Silva +Date: Thu Sep 6 07:51:08 2012 -0600 + + Logger: Fix #163 - fake consuming when the log file is not accessible + + If the log file cannot be open for writting, we should perform a + 'fake consuming' of the pipe data, otherwise we will get consecutive + epoll notifications as the data is still there. + + This patchs forces to consume the data if the log file cannot be + updated. + + Signed-off-by: Eduardo Silva + +commit 2cc2dc269858f2e2534f6b7cfb023ac6a493e7e9 +Author: Eduardo Silva +Date: Tue Sep 4 13:05:58 2012 -0600 + + API: new sched_worker_info() call + + Signed-off-by: Eduardo Silva + +commit 35cafeb4f2adcf2191c8645b511be4ede756160c +Author: Lauri Kasanen +Date: Fri Aug 24 13:38:02 2012 +0300 + + cgi: Mention PHP in the README + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit c4ad986ab9fc529dae90ed1dc2788bfb215b5921 +Author: Lauri Kasanen +Date: Fri Aug 24 13:34:15 2012 +0300 + + cgi: Don't check for vhosts if none are configured + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 75af537c2c7cf3c6343bc65b9fa0197690737c35 +Author: Lauri Kasanen +Date: Thu Aug 23 16:46:14 2012 +0300 + + examples: Add a Makefile + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 43f59ced23f8d53980eca3682b2ba5848eb452ee +Author: Lauri Kasanen +Date: Thu Aug 23 16:38:23 2012 +0300 + + examples: Remove unused variables, fix two warnings + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 0ae38aeb6ebb3c607d09e8667e6c648a022aeb09 +Merge: 6bb6b94 d509c17 +Author: Eduardo Silva +Date: Sat Aug 18 21:16:38 2012 -0600 + + Merge commit 'd509c17687f99f93b1fba67e48055a73995efd81' + +commit 6bb6b94bd2df4fcc7d5cb659e19cd19e8e57b326 +Merge: a496e6e f3eefe1 +Author: Eduardo Silva +Date: Sat Aug 18 21:16:10 2012 -0600 + + debian: merge + + Signed-off-by: Eduardo Silva + +commit a496e6e5beb58eb4ff588ee22a5808d22f05286d +Merge: be05a00 16c324d +Author: Eduardo Silva +Date: Sat Aug 18 21:15:18 2012 -0600 + + Merge commit '16c324ddec7a33ac92de0a6a4a497b73a30b4d6b' + +commit be05a00b6e7b46ce3dbd61abebbb99e33c8898ed +Merge: f3088d8 8bbb309 +Author: Eduardo Silva +Date: Sat Aug 18 21:15:07 2012 -0600 + + Merge commit '8bbb30982845e7f1e5cb5c999a5256d752056ac8' + +commit f3088d8b3f342a4b51532afcf9e2e3c288282bdb +Merge: e0102ba 3ddbf16 +Author: Eduardo Silva +Date: Sat Aug 18 21:14:44 2012 -0600 + + Configure: merge + + Signed-off-by: Eduardo Silva + +commit d509c17687f99f93b1fba67e48055a73995efd81 +Author: Eduardo Silva +Date: Sat Aug 18 16:43:22 2012 -0600 + + Configure: fix installer on plugins Makefile + + Signed-off-by: Eduardo Silva + +commit b4d950df3c1518d4b979c86136657addd6e0c7a3 +Author: Eduardo Silva +Date: Sat Aug 18 09:20:23 2012 -0600 + + Configure: remove merge comment + + Signed-off-by: Eduardo Silva + +commit f3eefe14ab129397e09928f5ac2ef89360999379 +Author: Eduardo Silva +Date: Sat Aug 18 09:18:20 2012 -0600 + + debian: update rules for v1.1.1 + + Signed-off-by: Eduardo Silva + +commit 16c324ddec7a33ac92de0a6a4a497b73a30b4d6b +Author: Eduardo Silva +Date: Sat Aug 18 08:39:46 2012 -0600 + + Dirlisting: add OPTIONAL file to the repository + + Signed-off-by: Eduardo Silva + +commit 8bbb30982845e7f1e5cb5c999a5256d752056ac8 +Author: Eduardo Silva +Date: Sat Aug 18 08:36:16 2012 -0600 + + Logger: add MANDATORY file to the repository + + Signed-off-by: Eduardo Silva + +commit 3ddbf16925619679b7c019bbf43b762c79a5ea3c +Author: Eduardo Silva +Date: Sat Aug 18 09:16:08 2012 -0600 + + Configure: fix broken builder + + Signed-off-by: Eduardo Silva + +commit e0102badb6201794ae240ad2378fba8fd33d0026 +Author: Sonny Karlsson +Date: Mon Aug 13 20:30:39 2012 +0200 + + configure: Use gnu99 as default C dialect. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 323e1fa8766366b8ece812bafddd7ae9df6358de +Author: Sonny Karlsson +Date: Mon Aug 13 20:07:56 2012 +0200 + + epoll: Remove inline from mk_epoll_state_set declaration. + + Allows calls to function from outside translation unit under C99 + inlining rules. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit c0be18929778c456b38b59854e10e967d1568042 +Author: Sonny Karlsson +Date: Mon Aug 13 20:02:04 2012 +0200 + + scheduler: Remove inline from mk_scheduler_add_client declaration. + + Fixes incompatibilities with C99 inlining rules. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 0ff3e5a20fbe909dc4a0c51f5e8b34c09043c83a +Author: Sonny Karlsson +Date: Mon Aug 13 19:57:17 2012 +0200 + + mk_memory: Make mem_ functions static inline. + + Use static inline for mem_malloc, mem_malloc_z, mem_realloc and + mem_free. This will assure that calls to these functions from monkey + core is inlined. Fixes incompatibilities with C99 inlining rules. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 9cb8335a8f6c50b345800e9842cb64b686cf8d67 +Author: Sonny Karlsson +Date: Tue Aug 14 14:45:36 2012 +0200 + + mimetype: Remove inline from mk_mimetype_lookup declaration. + + Allows calls to function from outside translation unit under C99 + inlining rules. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 416a323905df9b347b20eaea6ef0b15e70c1785e +Author: Eduardo Silva +Date: Fri Aug 17 15:42:32 2012 -0600 + + IOV: iov_add_entry: mk_bug() is back + + Signed-off-by: Eduardo Silva + +commit 5097c86433d4125e3827710bf84200b0525abfbe +Author: Lauri Kasanen +Date: Mon Aug 13 12:50:57 2012 +0300 + + iov, utils: Fix build with trace + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 8da883be5bc80e7510920700a5b02ffedd50849b +Author: Eduardo Silva +Date: Fri Aug 17 15:37:04 2012 -0600 + + IOV: on add_entry, validate with mk_unlikely() directly instead of mk_bug + + Signed-off-by: Eduardo Silva + +commit 5dacea2f8c0f796a7d268beda97541c7c729eec5 +Author: Eduardo Silva +Date: Fri Aug 17 15:05:04 2012 -0600 + + Configure: remove merge comments + + Signed-off-by: Eduardo Silva + +commit 828cdfe961c903d9a23f00601314852659f95cc1 +Author: Sonny Karlsson +Date: Sun Aug 12 15:50:50 2012 +0200 + + configure: Fix accept4() check. + + Builds check.c with -Wimplitic to detect when accept4 is absent. Also + adds _GNU_SOURCE define so accept4 is actually declared. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 7b677516d904780b0dca483a7817076d3e543b62 +Author: Eduardo Silva +Date: Fri Aug 17 15:01:55 2012 -0600 + + Debian: fix cgi stuff 1.1.0-2 + + Signed-off-by: Eduardo Silva + +commit a8210cd4ecf6bc24900d1af3078fda1b2b7803d8 +Author: Eduardo Silva +Date: Fri Aug 17 11:09:34 2012 -0600 + + Monkey v1.2.0 dev + + Signed-off-by: Eduardo Silva + +commit 7a4a3bbf2314df09f21c6be891474f0c7d9c4fad +Merge: fd01402 b827b96 +Author: Eduardo Silva +Date: Fri Aug 17 11:01:53 2012 -0600 + + Merge tag 'v1.1.0' + + Conflicts: + configure + +commit b827b96ff9dcf739004a0e87f72b985132b7061a +Author: Eduardo Silva +Date: Fri Aug 17 10:58:57 2012 -0600 + + Monkey v1.1.0 + + Signed-off-by: Eduardo Silva + +commit c04cd225ca81977d80566e05087f86ea2f876dec +Author: Eduardo Silva +Date: Fri Aug 17 10:16:03 2012 -0600 + + Configure: remove trace message + + Signed-off-by: Eduardo Silva + +commit af7cea3dc41d0bb278aaa6c2eaedbd64e8d209c3 +Author: Eduardo Silva +Date: Fri Aug 17 10:12:37 2012 -0600 + + Configure: fix plugins configuration files path + + Signed-off-by: Eduardo Silva + +commit f45169a8ab9874df74bc6701d6b97cdb240b07f7 +Author: Eduardo Silva +Date: Fri Aug 17 09:59:59 2012 -0600 + + Debian: update changelog to v1.1.0 + + Signed-off-by: Eduardo Silva + +commit d72e0cf49253d30daa70811ae768b189fb089f98 +Author: Eduardo Silva +Date: Fri Aug 17 09:51:26 2012 -0600 + + Configure: improve plugin detection + + The configure script now have a new function called skip_plugin() + which determinate if a plugin must be compiled/included or not + in the build stage, as well the same is used for the Makefile + generation. + + Signed-off-by: Eduardo Silva + +commit bdbe14c4c9dea086d094f67e3143cda02717d7cc +Author: Eduardo Silva +Date: Sun Aug 12 09:52:28 2012 -0600 + + Plugins: Fix usage of INC_EXTRA in Make.comm + + Signed-off-by: Eduardo Silva + +commit 9dd7a634294735da3536e4e8fac50372c26222bd +Author: Eduardo Silva +Date: Sun Aug 12 09:16:15 2012 -0600 + + Auth: enable -fPIC flag in Makefile to fix relocation error + + If -fPIC is not used, the following error is raised by the compiler: + + "relocation R_X86_64_32 against `a local symbol' can not be + used when making a shared object" + + Adding that flag to Makefile.in fixes the issue + + Signed-off-by: Eduardo Silva + +commit ed49c1dc112da8ba2c2839f2d1ad27a7796582fa +Author: Eduardo Silva +Date: Sun Aug 12 09:11:48 2012 -0600 + + Liana_SSL: Use proper prototype for _mkp_init() + + Signed-off-by: Eduardo Silva + +commit 14dd9e004f784e1618e0cb46f939785b4828bd6f +Author: Eduardo Silva +Date: Sun Aug 12 09:10:52 2012 -0600 + + Liana_SSL: define INC_EXTRA for MatrixSSL headers + + Signed-off-by: Eduardo Silva + +commit 789f1a3015cc71a32c8043a5f095728462536ec2 +Author: Eduardo Silva +Date: Sun Aug 12 09:09:22 2012 -0600 + + Plugins: update Make.commons to allow add extra headers through INC_EXTRA var + + Signed-off-by: Eduardo Silva + +commit fd0140287fad32d1ea53d9797a9f08bb815cb2f4 +Author: Sonny Karlsson +Date: Sun Aug 12 13:16:35 2012 +0200 + + fastcgi: Add experimental FastCGI proxy plugin. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 028a523859da450476042a2ee2beacd6620077da +Author: Lauri Kasanen +Date: Wed Aug 8 22:27:59 2012 +0300 + + build: Make sure the lib-objs also get header deps + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 1aa037b55758a661b60477662939483ad3f5f681 +Author: Lauri Kasanen +Date: Wed Aug 8 16:54:42 2012 +0300 + + clock, epoll: Fix gcc warning "no return statement in function returning non-void" + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 4917a2491b0a1aa313830f9ffb41f630ddb4e37b +Author: Lauri Kasanen +Date: Wed Aug 8 16:54:42 2012 +0300 + + clock, epoll: Fix gcc warning "no return statement in function returning non-void" + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 95f374c1346832c28ac9739d2290c0ba960fb7d0 +Author: Lauri Kasanen +Date: Wed Aug 8 17:20:30 2012 +0300 + + mem: Inline pointer_reset, called ~3 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3901ff6e77ae442b2d0d47dc7941b896501f57cb +Author: Lauri Kasanen +Date: Wed Aug 8 17:18:23 2012 +0300 + + sched: Inline get_request_list, called 4-5 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3e08ef527a96c11a9ef70eb7a80e3ccc7b55a728 +Author: Lauri Kasanen +Date: Wed Aug 8 17:13:52 2012 +0300 + + cache: Inline cache_get, called ~4 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 61920a7da546024ec72017fab6531a03b6c747b8 +Author: Lauri Kasanen +Date: Wed Aug 8 17:11:58 2012 +0300 + + sched: Inline sched_get_thread_conf, it's called 4-5 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 6fb56fd85c8005b79b7faaf897f1791fd0b99047 +Author: Lauri Kasanen +Date: Wed Aug 8 17:03:44 2012 +0300 + + iov: Make iov_add_entry inline + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 2f8313fb5d99446937f3f74b1fdf99cd938da9c7 +Author: Lauri Kasanen +Date: Wed Aug 8 17:20:30 2012 +0300 + + mem: Inline pointer_reset, called ~3 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 5179c23cd0ace9914306ff31a260cbe86add9baa +Author: Lauri Kasanen +Date: Wed Aug 8 17:18:23 2012 +0300 + + sched: Inline get_request_list, called 4-5 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a6ee405e9c0421782d610fc6b8d9a13173b498de +Author: Lauri Kasanen +Date: Wed Aug 8 17:13:52 2012 +0300 + + cache: Inline cache_get, called ~4 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit e2416acd1321bb74814c50f5f09eeaf2d13ae73a +Author: Lauri Kasanen +Date: Wed Aug 8 17:11:58 2012 +0300 + + sched: Inline sched_get_thread_conf, it's called 4-5 times per request + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d6472cdb785e9ad9a8b22cb6b26ddc20ace0d24d +Author: Lauri Kasanen +Date: Wed Aug 8 17:03:44 2012 +0300 + + iov: Make iov_add_entry inline + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ba959a090bec37547a6f7a3feb0dd2e0848fec85 +Author: Lauri Kasanen +Date: Tue Aug 7 16:35:09 2012 +0300 + + lib: Bring the bulk of lib over + + Some mime functions get exported, config init & reading is separated, and some functions are + moved around so that they can be ifdef'd out, to create a smaller library. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 633598061bd5a65d5758254d7091efe1a4b7f6e2 +Author: Lauri Kasanen +Date: Tue Aug 7 12:05:47 2012 +0300 + + cheetah: Remove some duplicated code by using worker_spawn + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ea1e5a5d246f1870a3d43814d48fb03e4f288298 +Author: Lauri Kasanen +Date: Tue Jun 12 16:54:41 2012 +0300 + + utils: Fix a small oops from the signed warning removal + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d2363c8fefe33249ae24536cb3233870f871e191 +Author: Lauri Kasanen +Date: Wed Jun 13 18:32:03 2012 +0300 + + auth: Remove one signed-unsigned warning, we know sep is positive at that point + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 4191cf5de6fe0c8304aca24163e0124d21078f79 +Author: Lauri Kasanen +Date: Fri Jun 8 15:25:01 2012 +0300 + + http: Remove one signed-unsigned warning + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 7b169703ecf36fc527874da0e547191518d0c404 +Author: Lauri Kasanen +Date: Sun Jun 17 17:18:46 2012 +0300 + + sched: Mark mk_sched_register_thread as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a5d91c050db3533ad0cb18d207198c3523e152ad +Author: Lauri Kasanen +Date: Sun Aug 5 12:52:28 2012 +0300 + + cgi: Make sure chdir succeeds + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 188d96017789f82b9fe8aaa73579719c085b7367 +Author: Lauri Kasanen +Date: Fri Aug 3 18:29:28 2012 +0300 + + epoll: Make mk_epoll_state_k properly extern + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a5e86fea65e7538f981839d8997082cdcffa667f +Author: Lauri Kasanen +Date: Fri Aug 3 18:27:28 2012 +0300 + + plugin: Remove unneeded typedef + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 21931ff0a4aeb611f4c342c0a33a8c64ddeb0b6f +Author: Lauri Kasanen +Date: Fri Jun 8 15:04:38 2012 +0300 + + request: body_size and body_length can't be negative + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 7b2cb07f040e365b30ed978ea39c18a4123b943f +Author: Lauri Kasanen +Date: Fri Jun 8 15:10:37 2012 +0300 + + utils: Remove one signed-unsigned warning + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit e5575ef707e14830d31c675688605a9d4649b215 +Author: Lauri Kasanen +Date: Fri Jun 8 15:14:08 2012 +0300 + + user: Remove one signed-unsigned warning + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit c701ded506effbe4f5a9aaa3b6eeb20de0800641 +Author: Lauri Kasanen +Date: Fri Aug 3 16:24:30 2012 +0300 + + mime: Mimetype names are const + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 95c3e62558787f8b6f8318c5c999dc8db4cc79c7 +Author: Lauri Kasanen +Date: Fri Jun 8 15:12:38 2012 +0300 + + utils: Remove two signed-unsigned warnings + + Signed-off-by: Lauri Kasanen + +commit f5367ae1c6aacb5cdc0b95c12b5510c5b089cf10 +Author: Eduardo Silva +Date: Mon Aug 6 11:16:35 2012 -0600 + + Core: usage of GCC built-ins: prefetch/[un]likely + + Signed-off-by: Eduardo Silva + +commit 65264d6ced93bbc9de34b2a189a8ae66ed89c252 +Author: Lauri Kasanen +Date: Mon Jun 11 22:10:49 2012 +0300 + + plugin: Remove two unused functions + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 7829f0c442ec0e80ba68c9415243091900676174 +Author: Lauri Kasanen +Date: Wed Jun 6 18:12:21 2012 +0300 + + plugin: The path passed in is const + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a745d25152896a80889112236ed175e121e82091 +Author: Lauri Kasanen +Date: Tue Jul 31 13:32:08 2012 +0300 + + plugin: Mark plg_stagemap as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ec923083f1a13eaaf38a27933e2370d94e7c9a12 +Author: Lauri Kasanen +Date: Tue Jun 12 18:45:03 2012 +0300 + + MKPlugin.h: no need to export mk_api + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 44b887d06ed3f24896043a6712e62bb53e79dff7 +Author: Lauri Kasanen +Date: Fri Jun 8 15:08:52 2012 +0300 + + config: host_alias, worker_capacity and max_load are never negative + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 1cfe4c3dba41420430d8e5f88846bb7ec9a889d2 +Author: Sonny Karlsson +Date: Tue Jul 31 21:04:18 2012 +0200 + + liano: Plug leak of struct addrinfo. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 3996a5495b5916705791ab56275f2c81129d0e44 +Author: Sonny Karlsson +Date: Wed Aug 1 11:54:26 2012 +0200 + + plugin_api: Add http_request_error. + + Allow serving errors outside of _stage_* callbacks. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 515ef47f67e9052d452e464eb99044149df295ef +Author: Lauri Kasanen +Date: Wed Jun 6 18:50:01 2012 +0300 + + utils: Make sure the date_yd date_wd arrays are read-only + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit b0819286dd8a44588dd97f445879b2fed5d17ba9 +Author: Sonny Karlsson +Date: Mon Jul 30 11:44:03 2012 +0200 + + connection: Don't enable TCP_NODELAY in mk_conn_read. + + The option is overridden by TCP_CORK. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit f08a347f6a906f46f084e2c095ebd7c1e061dac8 +Author: Sonny Karlsson +Date: Mon Jul 30 11:40:23 2012 +0200 + + http: Unset cork flag when mk_http_send_file is done. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit 0a7056e452c1d9c408631099cc22b83d6188bf69 +Author: Lauri Kasanen +Date: Fri Jun 8 15:24:25 2012 +0300 + + connection: Remove one signed-unsigned warning + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 0fc969d4e1bbb4af16a964c6476ad8f3101b3889 +Author: Lauri Kasanen +Date: Sun Jun 17 17:11:14 2012 +0300 + + clock: Mark mk_clock_header_set_time as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a7d6ceb1e6520e2cc5b7ef1b154ce768293f3a93 +Author: Lauri Kasanen +Date: Sun Jun 17 17:15:51 2012 +0300 + + signals: Mark signal_handler and signal_exit as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 70e97e83e8e5031d966624ac9325299468cb8fd9 +Author: Lauri Kasanen +Date: Mon Jun 11 22:06:20 2012 +0300 + + header: Remove unused function chunked_line + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3b6f307108adbdd44a4f1e658f48c0315bf1e510 +Author: Lauri Kasanen +Date: Fri Jun 8 14:55:44 2012 +0300 + + user: Constify some read-only variables + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 0774534137dd45df0b69e6dba33d9ba0ce14000b +Author: Lauri Kasanen +Date: Mon Jul 30 19:35:50 2012 +0300 + + string: Fix some signed-unsigned warnings, plus one wrongly declared variable (static > const) + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a4a0f44441955dd7e82ad1470e5cc48e7de7a1ab +Author: Lauri Kasanen +Date: Fri Jun 8 15:21:04 2012 +0300 + + server: Use more appropriate types for mk_server_worker_capacity + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 0dbac768aaf4f9e639e6b9211bc7e3fd53b1454f +Author: Lauri Kasanen +Date: Wed Jun 6 18:08:13 2012 +0300 + + config: Use int8_t, not int, for tri-state options (true, false, error) + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 41265d96e9cffc255c463d1151f84eb6a09113f7 +Author: Eduardo Silva +Date: Sun Jul 29 08:03:15 2012 -0600 + + Header: merge lines in status entries + + Signed-off-by: Eduardo Silva + +commit a204f12bc27f990ad2cd04d37a0de7193f43bdf5 +Author: Lauri Kasanen +Date: Fri Jul 27 17:35:22 2012 +0300 + + dirlisting, palm, logger: Use const mk_pointers where possible + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 4f59c55225a5522dc3ceeed6c4539cf7558f6cdc +Author: Lauri Kasanen +Date: Tue Jun 19 13:26:34 2012 +0300 + + memory, header, request, monkey, http, iov: Add mk_pointer_init macro, mark global mk_pinters const + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit bafb88732a4fa57dcf2e35853e9716721117d510 +Author: Lauri Kasanen +Date: Sun Jun 17 16:51:34 2012 +0300 + + header: Remove unused code + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit c1f0af7bd1d57df4c1bb4739921f6f2bc12897cc +Author: Sonny Karlsson +Date: Sat Jul 28 17:38:28 2012 +0200 + + plugin: Remove sr and cs members from plugin_event struct. + + Remove unused members and change the event_add api function. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit f586a31c85c53185b3fb41dabd7b2bb438f46397 +Author: Lauri Kasanen +Date: Wed Jun 13 18:33:22 2012 +0300 + + cheetah: sysconf returns a long, not size_t; removes one signed-unsigned warning + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 35c4be79bb001831c94690eb7ceda03c6d70ddda +Author: Lauri Kasanen +Date: Wed Jun 13 18:21:27 2012 +0300 + + macros: Add a macro to skip warnings about possibly unused parameters + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit adbb2f08dead908e86de600cef7e4bbfbdfd9b6a +Author: Lauri Kasanen +Date: Sun Jun 17 17:14:48 2012 +0300 + + http: Mark range_set, range_parse as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit bbfe79eeb5f6a7a390340e99fb94c9a6711d0902 +Author: Lauri Kasanen +Date: Sun Jun 17 17:18:27 2012 +0300 + + config: Mark mk_config_entry_add as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 7704bc1f41d9e7238b2d7bec2cf7371279203266 +Author: Lauri Kasanen +Date: Sun Jun 17 17:12:35 2012 +0300 + + http: Mark mk_http_directory_redirect_check as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit c1d7d922f04d10ef9fbef32abe75ade7e9bfd0af +Author: Lauri Kasanen +Date: Tue Jun 19 13:10:36 2012 +0300 + + cache: Remove unused function prototype, struct + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a5c80bc8f782ce6d79f054844bcf9e6efb1aadb8 +Author: Lauri Kasanen +Date: Thu Jul 26 18:26:32 2012 +0300 + + monkey: Update README and add a pkg-config file + + Signed-off-by: Eduardo Silva + +commit 8ad6ebae873705beb928ec32c017d82c1dfa6656 +Author: Lauri Kasanen +Date: Thu Jul 26 23:53:49 2012 +0300 + + plugins: Consolidate common build system parts, remove 63 lines of copy-paste + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 75e49628bfbfeb8116f6c6378329a97150f96142 +Author: Lauri Kasanen +Date: Sun Jun 17 16:57:43 2012 +0300 + + request: Remove unused code + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 12a4a6d7696ac5aa978d718cf83ecd20ee2f195a +Author: Lauri Kasanen +Date: Wed Jun 6 18:44:51 2012 +0300 + + header: Simplify the status_response array init, reorder the struct + + This saves 4 bytes per struct on x64. The size of the library drops 300 bytes due to + the big static array taking less space now. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit c9effedfd11484678775631b878ae2ae849cc136 +Author: Lauri Kasanen +Date: Sun Jun 17 17:09:46 2012 +0300 + + iov: Mark _mk_iov_set_free as static (unused externally, and the _ prefix suggests it's meant to be private) + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3c84846b0501953c322be926bf42200f96f9961a +Author: Eduardo Silva +Date: Thu Jul 26 10:28:32 2012 -0600 + + Palm: initialize missing mk_pointer + + Signed-off-by: Eduardo Silva + +commit ff5eb559922cbbc26cd07a653506fec131dbb27f +Author: Eduardo Silva +Date: Thu Jul 26 10:26:04 2012 -0600 + + Dirlisting: initialize missing mk_pointers + + Signed-off-by: Eduardo Silva + +commit 2184262ec740510ce54cf042254ba248f17b8442 +Author: Eduardo Silva +Date: Thu Jul 26 10:20:01 2012 -0600 + + Logger: fix warnings and missing mk_pointer + + Signed-off-by: Eduardo Silva + +commit 4469aff433d9964238bb61165804fb2c173db052 +Author: Lauri Kasanen +Date: Mon Jun 18 19:23:08 2012 +0300 + + monkey: Properly use extern for the globals + + This drops the size of each plugin by about 2kb (they were getting the global variables + too!), and makes it easier to find unused global variables. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d39662dc100664065dafe78d1522b7dcb2908219 +Author: Lauri Kasanen +Date: Mon Jun 18 19:31:53 2012 +0300 + + mem: Remove unused struct + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 0b3319649f59d7334834192b1c08d9fc23458cb9 +Author: Lauri Kasanen +Date: Mon Jun 18 19:21:45 2012 +0300 + + cache: Remove unused define + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 5acf61cd0343c71a059a0f22e97222f085c2cab3 +Author: Lauri Kasanen +Date: Sun Jun 17 17:20:31 2012 +0300 + + plugin: Mark register_stagemap* as static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a5fd3ec44995f5148b2e5ddad109f3af94e4882d +Author: Lauri Kasanen +Date: Mon Jun 11 22:09:24 2012 +0300 + + sched: Remove one unused thread key and its handling functions + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a4889ef726087deed9733911d8fef4d22f4679f0 +Author: Lauri Kasanen +Date: Fri Jun 8 14:26:54 2012 +0300 + + gitignore: Add lib-objs + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit fae49241eb13fda7b514ffbb043bfa03699801c5 +Author: Lauri Kasanen +Date: Mon May 28 18:19:32 2012 +0300 + + plugin: API must be global (bug) + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 259eb25b96f2f851fe4adc6127e615c0897abf4d +Author: Lauri Kasanen +Date: Fri Jun 8 14:30:42 2012 +0300 + + plugins: LDFLAGS only belongs in the linker command + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit efda62cc2802b7a28de89387c89f855aa5b86f2f +Author: Lauri Kasanen +Date: Wed Jul 18 19:36:16 2012 +0300 + + lib: Add some examples on how to use the library + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit e15778ca68456f3ad159026d5ffc0f405dbf9cc9 +Author: Lauri Kasanen +Date: Wed Jul 18 19:35:32 2012 +0300 + + lib: Add the test suite + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 646222a4a77e9ce4ae86cb3aff9d8776acddf3be +Author: Lauri Kasanen +Date: Wed Jul 18 19:33:53 2012 +0300 + + lib: Add the generated man pages, plus the asciidoc sources + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a796e535776fc662a62b40db45ad6171c5d167a0 +Author: Eduardo Silva +Date: Thu Jul 26 05:52:27 2012 -0600 + + Epoll: remove unused variable + + Signed-off-by: Eduardo Silva + +commit c080d3d6ecf9c4da5e344ef51bc0451092f48dd5 +Author: Sonny Karlsson +Date: Tue Jul 17 21:29:48 2012 +0200 + + http: Check if plugin set status in http_init. + + Checks if header status is set when MK_PLUGIN_RET_CLOSE_CONX is + returned in stage_30 and uses it instead of MK_CLIENT_FORBIDDEN. + + Signed-off-by: Sonny Karlsson + Signed-off-by: Eduardo Silva + +commit dc464102ccafd5a8367e526908dcaa8bafd08ace +Author: Lauri Kasanen +Date: Wed Jul 11 19:03:42 2012 +0300 + + configure: Mark CGI as disabled on android + + Android does not support regex. Using plain string matches is slower, + less flexible, and opens up a security hole. So rather than do that, + just disable cgi on android. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a6c0fd174a202e604bced7a9510c645d5b7c3b41 +Author: Eduardo Silva +Date: Thu Jul 12 15:24:25 2012 -0600 + + epoll: epoll_states are linked in common linked list + + Signed-off-by: Eduardo Silva + +commit 762239e0bf284d7dde8e4fa59646255128e31732 +Author: Lauri Kasanen +Date: Fri Jul 6 14:49:25 2012 +0300 + + cgi: Pass headers through monkey, support chunked encoding + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ddbc9569dc5e54c9f7b4d4fd05d329a02b7b2633 +Author: Sonny Karlsson +Date: Tue Jul 3 18:31:32 2012 +0200 + + configure: Ignore plugins without Makefile. + + Signed-off-by: Eduardo Silva + +commit 954f28b8333e621f5da8698c0f0c48e35f084cb8 +Author: Sonny Karlsson +Date: Tue Jul 3 16:41:40 2012 +0200 + + list: Add parenthesis around macro arguments. + + Signed-off-by: Eduardo Silva + +commit 676d3a2d3491f482937f126c2166599992dd4be3 +Author: Lauri Kasanen +Date: Wed Jul 4 13:21:50 2012 +0300 + + Fully comment the CGI section + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 1f5fb3a2533b433d6768dae24f510034b9b25728 +Author: Lauri Kasanen +Date: Mon Jul 2 16:59:03 2012 +0300 + + cgi: Add support for per-vhost configuration + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 9f1ae9f124f9a7b7c06ec024cc01ce1f0f653ef5 +Author: Lauri Kasanen +Date: Mon Jul 2 16:53:58 2012 +0300 + + cgi: Correct the config example + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 6b3b03373a1752098c2cfcd8d14c2a57e6a1c730 +Author: Eduardo Silva +Date: Sat Jun 30 14:29:58 2012 -0600 + + epoll: event state declarations cleanup + + Signed-off-by: Eduardo Silva + +commit 5d5f8736224cb5f526016af4fd2b50332c025e05 +Author: Eduardo Silva +Date: Sat Jun 30 13:03:35 2012 -0600 + + epoll: New epoll states + + The Monkey API allows third party components to hook file descriptors + into the main worker epoll loop and base on the events it triggers the + proper callbacks through the plugins interface, but Monkey did not + track the epoll mode flags as this was just known by the Kernel. + + This patch introduces the 'epoll states' mechanism which keeps track + of every file descriptor in the epoll loop into a user-space linked + list per worker using thread keys. In addition, this feature is the + base for new epoll modes implemented in the core: MK_EPOLL_SLEEP and + MK_EPOLL_WAKEUP. + + From now the core and plugins can set an epoll file descriptor in + sleep mode (do not trigger events) and wakeup mode to restore events + to the state before the sleep mode. + + Signed-off-by: Eduardo Silva + +commit 36356c55450b4dc78e7d76e716ce1db284b34973 +Author: Eduardo Silva +Date: Fri Jun 29 12:21:12 2012 -0600 + + Plugin: deprecate unused plugin_network_ip struct + + Signed-off-by: Eduardo Silva + +commit 79c098842a175491ed351e3032192e1c3dc5a4dd +Author: Eduardo Silva +Date: Thu Jun 28 22:39:06 2012 -0600 + + epoll: new mode MK_EPOLL_DISABLE + + This new mode instruct the kernel to disable the events in the + file descriptor until the the events are set again. + + This is *not* a remove, just a sleep mode. + + Signed-off-by: Eduardo Silva + +commit 61d04b5eb6fb5666eda60c42433815e211d6b8e8 +Author: Lauri Kasanen +Date: Tue Jun 19 18:58:52 2012 +0300 + + conn: if there is no cs, return 0: otherwise it tries to close a closed FD + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d3acc00c3de1226d3495ede9965747ce7d51eefb +Author: Eduardo Silva +Date: Thu Jun 28 19:58:07 2012 -0600 + + epoll: print errors just in trace mode + + Signed-off-by: Eduardo Silva + +commit 03926427b3fcafaf5d5cba7eb683841e834df1e5 +Author: Lauri Kasanen +Date: Sun Jun 24 11:40:51 2012 +0300 + + cgi: Some cleanups + + Removes unused variable, unneeded argument to do_cgi, some memory leaks, + and one malloc is replaced with a static array. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 6b03a29e2fbab19b19998237031fd7c02395c516 +Author: Lauri Kasanen +Date: Mon Jun 18 12:08:11 2012 +0300 + + cgi: Update to an event model + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 528735a810fae6440f3c2ef4c2c67408a80286af +Author: Lauri Kasanen +Date: Mon Jun 18 14:20:52 2012 +0300 + + plugin: epoll_del is needed here too for stability + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit f08531e48606827f5c30eb6340ec2cff559c463f +Author: Lauri Kasanen +Date: Thu May 24 15:04:48 2012 +0300 + + plugins: Properly control visibility, v2 + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 1b6300a0bca41b415f1fb055a2d9652c07fb8766 +Author: Lauri Kasanen +Date: Mon May 21 19:29:36 2012 +0300 + + includes: Guard global variables with hidden visibility, v3 + + This makes every plugin load faster. Each plugin is also 3-4kb smaller. + + v2: Fix one goof + v3: Change to attributes. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit b29d7301706d5b2172e452244a073a539827714f +Author: Eduardo Silva +Date: Tue Jun 19 07:10:13 2012 -0600 + + Palm: remove bad code in the read routine + + Signed-off-by: Eduardo Silva + +commit 5de725002103bb84ccb00fb9556c04c5f237228c +Author: Eduardo Silva +Date: Mon Jun 18 10:26:00 2012 -0600 + + Mimetype: add JSON mimetype + + Signed-off-by: Eduardo Silva + +commit 605877fb845871d665469a59085fd86d0b63192d +Author: Sonny Karlsson +Date: Sun Jun 17 17:27:21 2012 +0200 + + iov: Fix initial zeroing of offset entries. + + Signed-off-by: Eduardo Silva + +commit b5f057d9072ee29bc97e430198e6967a4c86617e +Author: Eduardo Silva +Date: Fri Jun 15 16:40:01 2012 -0600 + + QA: new host_port_XX.htt scripts + + Signed-off-by: Eduardo Silva + +commit bd4dd78cb5ac28f8651617d556b661534f7d36d6 +Author: Eduardo Silva +Date: Fri Jun 15 15:46:58 2012 -0600 + + Request: fix possible buffer overflow in Host header + + The Host header allow the input of the hostname plus the TCP + port used, e.g: + + GET / HTTP/1.1 + Host: localhost:2001 + + If the port length was higher than 6 bytes, it make monkey crash + due an overflow in the port buffer. + + This patch restrict the port length and also add a validation + to the port value so it just can hold numeric values. + + Signed-off-by: Eduardo Silva + +commit 824ed68cad14f6b2ad72bf46e62d93babebc4770 +Author: Eduardo Silva +Date: Thu Jun 14 14:17:01 2012 -0600 + + cgi: make the plugin OPTIONAL and README updated + + Signed-off-by: Eduardo Silva + +commit cdf94da5cc886b09b1eec7a5b43c3327f58febd0 +Author: Eduardo Silva +Date: Thu Jun 14 14:13:53 2012 -0600 + + cgi: set plugin disabled by default + + Signed-off-by: Eduardo Silva + +commit af633500a3cac9659052c3c344d00baca8bf6a9c +Author: Eduardo Silva +Date: Thu Jun 14 13:35:47 2012 -0600 + + Logger: adapt usage of worker_spawn() + + Signed-off-by: Eduardo Silva + +commit ba96e4aca15685c48b7a5a10d6328c8518f6c0ec +Author: Lauri Kasanen +Date: Thu Jun 14 17:46:04 2012 +0300 + + cgi: Use worker_spawn to conserve thread resources (detached) + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 4ff00e6c16c5848200e3db0a1df731fcec2bcb08 +Author: Lauri Kasanen +Date: Thu Jun 14 17:45:25 2012 +0300 + + utils: Make worker_spawn take the void *argument + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 87f98cec322967afb8f564ae1e172cb203e87507 +Author: Lauri Kasanen +Date: Tue Jun 12 23:41:14 2012 +0300 + + sched: We must call epoll_del here to work around kernel behavior + + If the fd is not removed from the epoll set, it keeps getting notified and then monkey tries + to close it - and since it now refers to some other file, errors ensue. + + This sounds exactly like http://osdir.com/ml/linux-kernel/2009-02/msg10362.html + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 229e717d0d1b9ae52cd50bf4bdb780baea7b4549 +Author: Lauri Kasanen +Date: Wed Jun 13 19:59:15 2012 +0300 + + plugins: New plugin: CGI, v2 + + Updated file check, plus variables http_host, server_software, server_protocol + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit e94e33367c32b70fb5ab89ad2ac9cd936ab936a7 +Author: Lauri Kasanen +Date: Tue Jun 12 12:27:13 2012 +0300 + + README: Say GCC 3.2 is needed. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 64fd21542d6cfbf9e3f723e432cecfdb8c3a7c44 +Author: Lauri Kasanen +Date: Mon May 21 19:58:48 2012 +0300 + + dirlisting: Remove some gcc warnings (signed-unsigned, always true if) + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 90f2925523fe77f23ae1aa11279b0963a85d36b9 +Author: Lauri Kasanen +Date: Mon May 21 19:17:52 2012 +0300 + + plugins: General cleanup, make possible functions static + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3e8a8de131f428ced59bea91fe1b26c2d37a2765 +Author: Eduardo Silva +Date: Tue Jun 12 00:01:18 2012 -0600 + + Utils: add missing mk_macros.h header + + Signed-off-by: Eduardo Silva + +commit 2265b7ca8b4a9d2b146f0d798a48b2c95923c960 +Author: Lauri Kasanen +Date: Fri Jun 8 14:48:22 2012 +0300 + + dirlisting: Use correct printf formatter + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3c24fac36f7a09fd08b712c6cb6f5119e42af192 +Author: Lauri Kasanen +Date: Fri Jun 8 14:44:55 2012 +0300 + + logger: Use correct printf formatter + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 0a8a90bb723808df87c650a7ae47c165d52f109b +Author: Lauri Kasanen +Date: Fri Jun 8 14:42:34 2012 +0300 + + header: Use the correct printf formatters + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 6fcdf2372c2cd7cbf41ca8e22a26187598b81dd8 +Author: Lauri Kasanen +Date: Thu Jun 7 22:33:33 2012 +0300 + + headers: Enable printf warnings for the wrapped printf functions + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit fb9b3e9bb41e1ac37e5eb76210ddb720a3ed4a70 +Author: Lauri Kasanen +Date: Wed Jun 6 19:10:51 2012 +0300 + + utils: If the passed date is current, we know it's not in cache + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 813c28d308840b8f9e06241478a64a959b259bdd +Author: Lauri Kasanen +Date: Wed Jun 6 16:30:10 2012 +0300 + + .gitignore: Add versioned libs and pkgconfig files + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 8c716cc47444174de16b0de456854b3d41dd82ea +Author: Lauri Kasanen +Date: Fri Jun 1 16:37:05 2012 +0300 + + plugin: Check that the would-be-removed handler matches + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d5f5824fdde582392d39c904ed48ca917f2d8eb6 +Author: Lauri Kasanen +Date: Tue May 29 12:17:43 2012 +0300 + + request: Add a check for no index files + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 6d585d7b6a103f166dc4f47e06bfbb9c9049c4cf +Author: Lauri Kasanen +Date: Tue May 29 16:33:00 2012 +0300 + + config: Make use of the tolower function + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit c2a48089b74edc5b23be15944d109e04de90c37f +Author: Lauri Kasanen +Date: Tue May 29 16:31:04 2012 +0300 + + string: Add a function to turn a string to lowercase + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ea01c897e88832fcf740e388ec47ea23f22f28ba +Author: Lauri Kasanen +Date: Mon May 28 18:46:52 2012 +0300 + + sched: Return the worker thread id + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3ac3852528375cc5b56ed8a12040c4baeb15a959 +Author: Lauri Kasanen +Date: Mon May 28 17:25:39 2012 +0300 + + Export the thread_key init for the lib + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 9c3658ec1b4df9bb54fad5148700294144fe1cdf +Author: Lauri Kasanen +Date: Mon May 28 18:36:54 2012 +0300 + + config: Move default workers to config_init + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit ace60526275964d1c44a4c72ed774a52d00ba4ef +Author: Eduardo Silva +Date: Mon Jun 11 12:09:00 2012 -0600 + + Scheduler: register new incoming sockets with MK_EPOLL_READ + + Previous this patch, the Scheduler used to register each new incoming + socket with the MK_EPOLL_WRITE flag, so when the connection was established + epoll_wait(2) triggered the write event, meaning 'the socket is ready to + write'. On that moment the Connection handler realised that no Scheduler + information exists for that socket and run the mk_sched_register_client() + function, then invoke epoll_ctl(2) to change the socket mode to + MK_EPOLL_READ, so it start to wait for the incoming request string. + + In HTTP the client always begins the communication sending the request, so + having a socket on MK_EPOLL_WRITE and then change it to MK_EPOLL_READ adds + a little overhead. + + This patch makes the initial socket be registered with MK_EPOLL_READ and + make the Connection handler identify this new connection in the + mk_conn_read() function, avoiding the extra system call described in the + previous behavior. + + Here is a little benchmark done with Valgrind/Callgrind: + + +------------------------+----------------+-----------------+--------+ + | function() | before patch | after patch | gain | + +------------------------+------+---------+-----------------+--------+ + | | self | called | self | called | | + +------------------------+------+---------+-------+---------+--------+ + | epoll_ctl(2) | 0.15 | 15000 | 0.10 | 10000 | 44% | + +------------------------+------+---------+-------+---------+--------+ + | mk_epoll_change_mode() | 0.57 | 10000 | 0.27 | 5000 | 63% | + +------------------------+------+---------+-------+---------+--------+ + + Signed-off-by: Eduardo Silva + +commit 8a3890b241f2692acfd5ffba328aa84905b66f4c +Author: Lauri Kasanen +Date: Sun Jun 10 19:27:28 2012 +0300 + + utils: speed up mk_utils_utime2gmt non-cache path by 25% + + Unsigned division is nicely faster than signed division. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d50dc1b4984d9d473e7886b833d9b8af7829195a +Author: Eduardo Silva +Date: Sun Jun 10 15:20:44 2012 -0600 + + Configure: find: user -xtype instead of -type + + Signed-off-by: Eduardo Silva + +commit cd22c840e76d84b032c75f2e80ae07b982780844 +Author: Eduardo Silva +Date: Sun Jun 10 15:18:03 2012 -0600 + + Development of v1.1 begins + + Signed-off-by: Eduardo Silva + +commit dbd0f65089f1696f2395dbc178b3de8c3215815a +Author: Eduardo Silva +Date: Tue Jun 5 16:38:37 2012 -0600 + + Monkey v1.0.0 + + Signed-off-by: Eduardo Silva + +commit 87146aa7535061ff5e45ded5cd969a1eeb619de2 +Author: Eduardo Silva +Date: Tue Jun 5 16:37:21 2012 -0600 + + Deprecate websockets and patas plugins + + Signed-off-by: Eduardo Silva + +commit 28640341187a1c2e64d4c00663c96a12557ccb6b +Author: Eduardo Silva +Date: Tue Jun 5 16:34:26 2012 -0600 + + Monkey 1.0.0 + +commit 976340d08576e36e06d45a9f55cb119efe0210ca +Author: Lauri Kasanen +Date: Thu May 31 20:17:42 2012 +0300 + + monkey: wait until all workers are ready + + Otherwise the manager thread may cause a client to be added to an epoll fd + that has not been initialized yet. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 5659e4ac6c2dd805e74670411231d2b63fee03c1 +Author: Lauri Kasanen +Date: Fri Jun 1 17:01:15 2012 +0300 + + headers: Remove unused header file + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 32324994d0d3a2d6edbfec2f92db668b90e5851d +Author: Lauri Kasanen +Date: Fri Jun 1 17:03:34 2012 +0300 + + configure, headers: Make sure every header has include guards + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit f84cf355886b7d4e2646f7c1dc43e55c3c0ec764 +Author: Lauri Kasanen +Date: Fri Jun 1 17:08:42 2012 +0300 + + memory: Correct the header to have the same definition as the source + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 55e736dc846c5f711347bdcdc8d827e5972e5258 +Author: Lauri Kasanen +Date: Thu May 31 19:54:49 2012 +0300 + + sched: Protect the wid init with a mutex + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 46a029b86042d6ec024068a5250048d779a495cc +Author: Lauri Kasanen +Date: Fri Mar 23 20:50:32 2012 +0200 + + Clock: move sequential clock init to its own function + + If the memory were allocated in a thread, it may happen too late. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 28ee0b84fb73f83893e324293104c7cdf34447c6 +Author: Lauri Kasanen +Date: Wed May 30 07:46:59 2012 -0600 + + Scheduler: fix return value when registering a new client + + Signed-off-by: Eduardo Silva + +commit b5cf6793490ac2ee96a87e05c69c71db1830ca1e +Author: Lauri Kasanen +Date: Tue May 29 17:04:49 2012 +0300 + + configure: Use wildcards for the man page installs + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit bb436da99383077109819b2c458fd0db28e312f0 +Author: Lauri Kasanen +Date: Tue May 29 13:59:27 2012 +0300 + + config: Add some checks in SAFE_FREE for things that aren't alloced with the lib + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit a98f2b874ada4e2a6353cb3f85601208aabd6aeb +Author: Lauri Kasanen +Date: Mon May 28 15:01:11 2012 +0300 + + configure: Don't overwrite other defs with TRACE + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 4d2ccdf2bf362b206876bbea19892991ae49e030 +Author: Eduardo Silva +Date: Tue May 29 09:09:22 2012 -0600 + + Connection: validate mk_sched_register_client() return value + + Signed-off-by: Eduardo Silva + +commit 0b93ac03b38c791f5103a912114f25422dbe7536 +Author: Eduardo Silva +Date: Mon May 28 19:24:23 2012 -0600 + + Cheetah: variables cleanup + + Signed-off-by: Eduardo Silva + +commit 0cf0f38428669a060ff5a84119d9ea317d5324eb +Author: Eduardo Silva +Date: Sun May 27 18:08:27 2012 -0600 + + Mandril: re-write configuration file and examples + + Signed-off-by: Eduardo Silva + +commit 8e8f6cc6a220b2e7e720b879aa5d9e44db394670 +Author: Lauri Kasanen +Date: Sat May 26 20:10:52 2012 -0600 + + mandril: Remove unused function argument + + Signed-off-by: Eduardo Silva + +commit d1edaed10ea987933aad85a5886cba78136b949b +Author: Lauri Kasanen +Date: Sat May 26 20:07:51 2012 -0600 + + palm: Constify some read-only variables + + Signed-off-by: Eduardo Silva + +commit f716104d38a3ee1f7e2ff42ac78e8d7f284e262b +Author: Lauri Kasanen +Date: Mon May 21 20:00:47 2012 +0300 + + liana: Remove unused variable + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 267f9a6d89618f76ecde102194ccc16dc893d6f6 +Author: Lauri Kasanen +Date: Wed May 23 18:10:51 2012 +0300 + + dirlisting: Prevent possible crash + + Fixes a Clang warning. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 89d918ad3096a1a096ba8c3a7ada2bcb9473a210 +Author: Lauri Kasanen +Date: Wed May 23 18:00:33 2012 +0300 + + cheetah: Comment out some dead code + + Fixes two Clang warnings (dead writes to init and last). + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 77ba5b5b4ced1b218df0177ce686b7ab0c859387 +Author: Lauri Kasanen +Date: Wed May 23 17:40:01 2012 +0300 + + mimetype: If the file is invalid, we would crash. Exit instead. v2 + + Fixes a Clang warning. v2: exit instead of abort + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 7e1cd84da7fc8e2da4f2ceead4ae4987f478289d +Author: Lauri Kasanen +Date: Fri May 25 13:41:06 2012 +0300 + + config: Don't pass NULL to readdir, v2 + + Exit instead of return. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 8aa2fc246dab61808db4e5f28599639ddc32143a +Author: Lauri Kasanen +Date: Wed May 23 18:03:11 2012 +0300 + + palm: Prevent possible crash + + Fixes a Clang warning. If pr is NULL, the final return would crash. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit f53867d9dd9d0bc179b322d36152e9806fb7f8bd +Author: mahesh gondi +Date: Sun May 27 01:06:44 2012 +0530 + + monkey : adds thread key initialization + + added missing thread key initialization for mk_cache_utils_gmt_text + + Signed-off-by: Eduardo Silva + +commit e3131ef6eea71820059636d714e39a5d81ab347a +Author: Lauri Kasanen +Date: Wed May 23 18:04:37 2012 +0300 + + mandril: Correct in_addr usage + + Fixes a Clang warning. The file had used only a pointer to in_addr, when + it should have used a struct! + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 041cb9843211a05e997f4d4742e0754abcd34770 +Author: Lauri Kasanen +Date: Wed May 23 17:58:56 2012 +0300 + + palm: Remove two dead writes + + Fixes two Clang warnings. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 72912a6d113ba6fe78f326f04b073b0baa87209b +Author: Lauri Kasanen +Date: Wed May 23 17:58:35 2012 +0300 + + config: Prevent possible crash + + Fixes a Clang warning. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit e9961d6fd5ff92a6a787788a5acaa8098f276073 +Author: Lauri Kasanen +Date: Wed May 23 17:28:25 2012 +0300 + + user: Check the return value of sete[ug]id + + Fixes a Clang warning. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 8a83a2645b51897b1cea99f1b73ee0b4f94f1a6f +Author: Lauri Kasanen +Date: Wed May 23 17:21:43 2012 +0300 + + user: Fix possible crash + + Fixes a Clang warning. If getpwnam returns NULL, accessing usr->something + would segfault. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 6fc0f92b09e2d76f6bb4574ea62708584c7bb886 +Author: Lauri Kasanen +Date: Wed May 23 17:18:43 2012 +0300 + + request: Remove dead assignment + + Fixes a Clang warning. This write is pointless, since it is never read. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 70f9a5063921bfc967a161e8a86fb10503b9d7a0 +Author: Lauri Kasanen +Date: Wed May 23 17:17:30 2012 +0300 + + plugin: Remove dead assignment + + Fixes a Clang warning. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 11859b9416ab0fa9cd3866d2882458dfc4602863 +Author: Lauri Kasanen +Date: Wed May 23 17:15:54 2012 +0300 + + memory: Prevent a possible crash in mk_pointer_to_buf + + Fixes a Clang warning. If *dest is NULL, memcpy would crash. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 9bb06a3cb31d5164588b67e466c4ee53984d7aae +Author: Anthony G. Basile +Date: Wed May 23 10:53:10 2012 -0400 + + configure: fix #156, install man pages to the correct sections + + The current configure script installs the man pages banana.1, monkey.1 + and monkey-api.3 at the top level man dir, /usr/share/man, and not in + the appropriate categories by FHS standards. This fixes the issue. + + Signed-off-by: Anthony G. Basile + Signed-off-by: Eduardo Silva + +commit e57c12e63555141cfd4cc23c8850994dfcac2364 +Author: Eduardo Silva +Date: Tue May 22 07:48:02 2012 -0600 + + Auth: rename mkpasswd utlity to mk_passwd + + Monkey's "mkpasswd" clashes with the /usr/bin/mkpasswd + utility of the standard Whois tools package. + + Thanks to Fiorella Santini for catching this. + + Signed-off-by: Eduardo Silva + +commit 6b6595bd4c9aa97fb2557ee6d0bea2964df02973 +Author: Lauri Kasanen +Date: Mon May 21 20:31:06 2012 +0300 + + file: Reorder struct file_info, drop 8 bytes, v2 + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 92fa0e1c195561981de9fd0cc05916cc933255cc +Author: Eduardo Silva +Date: Tue May 22 07:12:44 2012 -0600 + + Configure: fix #155 new accept() mode in configure flags + + This patch add two new flags to the configure script: + + --only-accept + --only-accept4 + + These flags let specify the builder system which accept mode + must be used in the server socket: accept() or accept4(). If + no one is specified the builder will auto-test accept4(), if + it fails, it will go for accept(). + + This is useful when doing cross compiling and want to specify a + specific operation mode. + + Signed-off-by: Eduardo Silva + +commit e7cea98fb67ba94b4bc2a3fbd2f35511e9c8ec97 +Author: Eduardo Silva +Date: Mon May 21 14:33:47 2012 -0600 + + http: do not perror() when sendfile() fails + + Signed-off-by: Eduardo Silva + +commit 28d844073108cdc3786024b4487059ad8b1b430c +Author: Eduardo Silva +Date: Mon May 21 11:34:30 2012 -0600 + + Config: fix unitilialized variable + + Signed-off-by: Eduardo Silva + +commit ee151fc730b8ea7057bbec4a63f80dbfff1a3436 +Author: Eduardo Silva +Date: Mon May 21 11:29:46 2012 -0600 + + Liana: use monkey api to set a socket non-blocking + + Signed-off-by: Eduardo Silva + +commit d3db12dee2a384bd0d298428535bc4c5281512cb +Author: Eduardo Silva +Date: Sun May 20 20:45:32 2012 -0600 + + Config: fix minor validation bug and add extra checks + + Signed-off-by: Eduardo Silva + +commit c7392542711fb00819d877378b674847a1183b53 +Author: Eduardo Silva +Date: Sat May 19 14:56:07 2012 -0600 + + file: add new field 'exists' to the struct file_info + + The new field added is used to mark if the file exists or not, + because lstat(2)/stat(2) can fail due to multiple reasons. + + If the HTTP core get a -1 from mk_file_get_info(), it now will + validate the 'exists' field to send a 404 or 403 error + + Signed-off-by: Eduardo Silva + +commit 508d413cca627b9ba5ee206dc7654e782b4b1185 +Author: Eduardo Silva +Date: Sat May 19 13:33:30 2012 -0600 + + QA: remove old redir_301.htt test + + Signed-off-by: Eduardo Silva + +commit be62ea4f9d1074a970fc114348dfa5583fb38b2c +Author: Eduardo Silva +Date: Sat May 19 13:32:20 2012 -0600 + + file: set the proper O_NOATIME when applies + + if the user is the owner of the file or the user is root, it + can set the O_NOATIME flag for open(2) operations to avoid + inode updates about last accessed time. + + Signed-off-by: Eduardo Silva + +commit 9d3b09bb976fe28d0f88bf0e1e476480895bfef6 +Author: Eduardo Silva +Date: Sat May 19 08:37:16 2012 -0600 + + http: fix directory redirect when Host header specify a TCP port + + This patch makes the server to respect the port sent in the Host + header, so if a redirect is performed it must use the port sent in + the request headers. + + This patch also add two QA scripts to verify the right behavior: + + - directory_redirect_02.htt + - directory_redirect_03.htt + + Signed-off-by: Eduardo Silva + +commit c807c1894c6817bd1c11c3118a64e8890d874a3e +Author: Lauri Kasanen +Date: Tue May 8 20:53:05 2012 +0300 + + http/request: Remove malloc from request_index with short paths + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 851590893a992728d24d607b93c8b49e9c8ff04b +Author: Eduardo Silva +Date: Fri May 18 11:07:35 2012 -0600 + + auth: adapt base64.c to monkey + + Signed-off-by: Eduardo Silva + +commit 9f5633473aa49413a9288b0fa38a639cb52f53ab +Author: Eduardo Silva +Date: Fri May 18 11:04:38 2012 -0600 + + auth: use new base64.c version from Jouni Malinen + + Signed-off-by: Eduardo Silva + +commit 37ecbbdf577148be7a47b8ef940d1506cc41f6a0 +Author: Eduardo Silva +Date: Fri May 18 11:02:28 2012 -0600 + + socket: fix mk_socket_ip_str() for IPv6 + + Signed-off-by: Eduardo Silva + +commit 43784c313a7cbc249408a1897213b619853f219a +Author: Lauri Kasanen +Date: Thu May 3 15:19:00 2012 +0300 + + socket: Fix possible overflow, v2 + + mk_socket_ip_str passed the wrong size to inet_ntop. + + v2: Output a nice error message + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit d16e0530615c9dc5b924fa206dcc353ecbb34a13 +Author: Eduardo Silva +Date: Fri May 18 08:17:44 2012 -0600 + + auth: temporal fix for GCC warning over olen in decode function + + Signed-off-by: Eduardo Silva + +commit 368be9249051cfe4917d515ad4f6438d822477ec +Author: Eduardo Silva +Date: Fri May 18 07:15:59 2012 -0600 + + Cheetah: validate return of fgets() + + Signed-off-by: Eduardo Silva + +commit 0dbeaa6e42701417e10d40f53b524d2cc9f0b462 +Author: Eduardo Silva +Date: Thu May 17 21:27:36 2012 -0600 + + Builder: compile output like Linux Kernel style + + Makefiles has been modified to print out messages like the Linux + Kernel at compile time: + + edsiper@monotop:~/coding/monkey$ make + CC src/monkey.o + CC src/mk_method.o + CC src/mk_mimetype.o + CC src/mk_request.o + CC src/mk_header.o + CC src/mk_config.o + CC src/mk_signals.o + CC src/mk_user.o + CC src/mk_utils.o + CC src/mk_epoll.o + CC src/mk_scheduler.o + ... + + Signed-off-by: Eduardo Silva + +commit cbcdb2d8fdac5284b4248504b75cd490b42ea591 +Author: Lauri Kasanen +Date: Thu May 17 22:20:04 2012 +0300 + + Build system: Automatic dependencies for the header files + + This removes the need to "make clean" after editing a header file. + All C files that need recompiling are automatically rebuilt. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit bf0b20cb4b6b63585aac51525870bd9ee5ddb754 +Author: Ankit Kumar +Date: Thu May 17 12:13:41 2012 -0600 + + utils: add MK_TRACE_BACKGROUND env var for trace mode + + Signed-off-by: Eduardo Silva + +commit 41863a08de9c55b3fd039fb4e53440ee3dd30db7 +Author: Eduardo Silva +Date: Thu May 17 12:00:22 2012 -0600 + + http: fix a validation over if-modified-since + + Signed-off-by: Eduardo Silva + +commit 82e95aba7b3208e589434a1fc8bcea7908fe6e13 +Author: Eduardo Silva +Date: Thu May 17 11:47:02 2012 -0600 + + QA: fix and add missing error_413_02.htt file + + Signed-off-by: Eduardo Silva + +commit 4e7379d64ebf9d57983f701d709394df56c9ff41 +Author: Lauri Kasanen +Date: Wed May 2 19:18:36 2012 +0300 + + request: Optimize mk_request_init, v2 + + This both simplifies the code, and moves the function from 1.6% to 0.4% of + Monkey CPU time. + + Changelog: + v2 - Removed one forgotten zero set + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 8138e4044b0a0c1fe058df7cab99b676c055dd70 +Author: Eduardo Silva +Date: Thu May 17 11:28:33 2012 -0600 + + request: on premature close, make sure a default vhost details exists + + Signed-off-by: Eduardo Silva + +commit 036cc1d30dd9ff49577233700c23ed99bb3af95f +Author: Lauri Kasanen +Date: Wed May 2 18:03:33 2012 +0300 + + main: Use malloc_z for the config struct + + Valgrind found an uninitialized use. Initializing to zero fixes that. + + Conditional jump or move depends on uninitialised value(s) + at 0x406D28: mk_utils_register_pid (mk_utils.c:411) + by 0x402CD5: main (monkey.c:168) + + Signed-off-by: Lauri Kasanen + +commit d0b38247d6ba44efbdaabcc769eab5dc7c752c01 +Author: Lauri Kasanen +Date: Thu May 17 10:13:45 2012 -0600 + + http: Remove unused arg from mk_http_keepalive_check + + Signed-off-by: Eduardo Silva + +commit 16d10675e2e6dd09914111bcab64b64b43f20a68 +Author: Eduardo Silva +Date: Wed May 16 20:53:35 2012 -0600 + + Logger: if content length is not set in headers, use zero + + Signed-off-by: Eduardo Silva + +commit 9e67f09f907667b522856303831f0a686351b058 +Author: Eduardo Silva +Date: Wed May 16 09:39:52 2012 -0600 + + Config: add new DefaultMimeType configuration key + + Signed-off-by: Eduardo Silva + +commit 0541d1ea9ca602a59437ee842b378f72bfbe4ce9 +Author: Eduardo Silva +Date: Tue May 15 12:59:31 2012 -0600 + + Readme: add requirements section + + Signed-off-by: Eduardo Silva + +commit 862f46c4837b46ebc1ca54237ae5e4707db60a92 +Author: Eduardo Silva +Date: Tue May 15 12:33:55 2012 -0600 + + Duda: drop plugin (new repo has been created) + + Signed-off-by: Eduardo Silva + +commit 563cb7516dba2c2411abd2927858422500cd880c +Author: Lauri Kasanen +Date: Thu May 10 19:14:13 2012 +0300 + + memory: realloc had wrong size hint + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 28936ef50c37b1e5c2b24c78b169f787617c8a91 +Author: Sourabh Chandak +Date: Tue May 15 16:05:37 2012 +0530 + + htdocs: corrected image path + + Signed-off-by: Eduardo Silva + +commit f54d9fa4e24907af1d08f4e204862bc807cdede3 +Author: Lauri Kasanen +Date: Wed May 9 16:33:46 2012 +0300 + + http: use memmem for the ".." check + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 517634c2cee744acb58cdbcff356df3337d30d80 +Author: Lauri Kasanen +Date: Tue May 8 19:26:05 2012 +0300 + + http: Remove the _status_ functions and list, all unused + + Besides cleaner code, runtime RAM use drops by 1.3kb. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 347265e1327e59414795268bcadae0ccaa46195c +Author: Eduardo Silva +Date: Tue May 15 08:56:34 2012 -0600 + + utils: optimize utime2gmt when the entry does not hit the cache + + This patch reduce the number of char assignation to the target buffer + replacing a few of them with the memcpy() call. + + Using valgrind is possible to see that the optimization helps to reduce + the computing time from 2.73 to 2.34. + + Signed-off-by: Eduardo Silva + +commit 0ffe16fb144bc1d6a00d5acc1a72aa4d4a783f8e +Author: Lauri Kasanen +Date: Tue May 15 14:49:15 2012 +0300 + + utils: Add a gmt text cache for utime2gmt + + In the worst case (no cache hit ever), the overhead for utime2gmt is little less than 1%. + In the best case (cache hits always), drops utime2gmt cpu usage from 9.6% to 1.2%. + + Helps in mixed usage, since often accessed pages like the index page stay in the + cache. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit f2e96ab21f32063b0d01bb96a05a3af0f8169e0f +Author: Lauri Kasanen +Date: Thu May 10 19:13:43 2012 +0300 + + memory: Calloc is much faster than malloc+memset. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit 3362d3c6437c25934df8ae5452cf493ecb666d5b +Author: Eduardo Silva +Date: Mon May 14 23:22:49 2012 -0600 + + Config: add support for customized error pages + + This patch allow to add customized error pages per virtual host, + it adds a new section under the virtual host file called [ERROR_PAGES]. + + You can define multiple error pages depending of the error status, check + the following example: + + [ERROR_PAGES] + 404 404.html + 500 500.html + + Everytime a an error is raised, it looks for the defined error pages, if + it match, it will try to send the file in question, if even the configured + file is not found, it will send the built-in error page. + + Signed-off-by: Eduardo Silva + +commit 3b57324c8527e5e100fdcf841510be4acbbfdac4 +Author: Lauri Kasanen +Date: Fri May 11 17:39:54 2012 +0300 + + Request: Remove one unused struct member from session_request + + Signed-off-by: Lauri Kasanen + +commit 607ad623ad365c8be9e8f5cfe360680c5f876ab0 +Author: Eduardo Silva +Date: Mon May 14 11:50:31 2012 -0600 + + Trace: rename filter variable from MK_TRACE to MK_TRACE_FILTER + + Signed-off-by: Eduardo Silva + +commit fec973e48356aa588105c34b070bf2f23ffe7503 +Merge: 44a0dda 9b3bb92 +Author: Eduardo Silva +Date: Mon May 14 11:46:17 2012 -0600 + + Merge branch 'patches' + +commit 9b3bb925816285f487b94e0db2933057c56f0cbd +Author: Ankit Kumar +Date: Mon May 14 11:42:10 2012 -0600 + + Scheduler: Fix #151: changing %i to %llu and connections counter + + Signed-off-by: Eduardo Silva + +commit 8b7cc73867c7c00be9404e9ce627075508b1e39b +Author: Lauri Kasanen +Date: Thu May 10 12:26:28 2012 +0300 + + Update the configure script + + Signed-off-by: Lauri Kasanen + +commit 855fc67178d334ee26856a2b3e9278fdbd336103 +Author: Lauri Kasanen +Date: Mon May 7 17:45:45 2012 +0300 + + request: Make use of the socket arg + + GCC said that socket was unused. Another option would be to remove it + as an argument and keep the access as cs->socket. + + Signed-off-by: Lauri Kasanen + Signed-off-by: Eduardo Silva + +commit e28880d7a858699dfdb569195ae216192919f7bf +Author: Lauri Kasanen +Date: Mon May 7 19:07:38 2012 +0300 + + plugin: close memory leak (~5kb) + + Signed-off-by: Lauri Kasanen + +commit 44a0dda51fbf2c1c8ea7e1d351bb3f0a3e1f243f +Author: Lauri Kasanen +Date: Wed May 9 18:01:30 2012 +0300 + + header: Make mk_header_iov_* static + + Signed-off-by: Lauri Kasanen + +commit c160cd9848c0e13996bb0a3bd644dcc891776014 +Author: Lauri Kasanen +Date: Mon May 7 16:46:35 2012 +0300 + + sched: Allocate the connections at once + + This saves some 4kb of memory, and improves cache usage. + + Signed-off-by: Lauri Kasanen + +commit 2939842f743fb4b7fc9cbb91f245994c7591a48d +Author: Lauri Kasanen +Date: Mon May 7 10:50:12 2012 -0600 + + Scheduler: remove unneeded active_connections check + + Signed-off-by: Eduardo Silva + +commit 8fd10d02ce169a7d863202f0dabc72ab95a00b7e +Author: Lauri Kasanen +Date: Fri May 4 14:24:33 2012 -0600 + + epoll: fix unitialized variable + + Signed-off-by: Eduardo Silva + +commit a25e0593fb2a57a1cec588a567cb711dbabfd969 +Author: Ivo Brunnbauer +Date: Fri May 4 13:10:04 2012 -0600 + + GCC: Make monkey compile on gcc 4.7 + + Signed-off-by: Eduardo Silva + +commit 8dc3b186efe1b4d1209a3d6919c196166c55eb50 +Author: Lauri Kasanen +Date: Fri May 4 12:24:59 2012 -0600 + + String: fast path / pending part + + Signed-off-by: Eduardo Silva + +commit 32f764a155788ac9956c1ab2adbf01e772b87e14 +Author: Lauri Kasanen +Date: Fri May 4 12:00:12 2012 -0600 + + monkey: Remove two unused global variables + + Signed-off-by: Eduardo Silva + +commit 5bb1a5b22f941fc149833f12c71989938bd53470 +Author: Eduardo Silva +Date: Fri May 4 11:48:39 2012 -0600 + + Cheetah: use new accepted/closed connection from the scheduler + + Signed-off-by: Eduardo Silva + +commit 34bf2db21deaa9d1b7877463fd96427d8d42c093 +Author: Lauri Kasanen +Date: Fri May 4 11:36:44 2012 -0600 + + Scheduler: Fix #144: Make active_connections lock free + + Signed-off-by: Eduardo Silva + +commit ea83cb6860f9555011a4959294bd7d765b1fe533 +Author: Lauri Kasanen +Date: Thu May 3 16:53:01 2012 -0600 + + iov: Remove one gcc warning (unsigned-signed) + + Signed-off-by: Eduardo Silva + +commit fd97b0a4652b9046e34bd3f718661bed61f26867 +Author: Lauri Kasanen +Date: Thu May 3 16:50:11 2012 -0600 + + string: Remove one gcc warning (unsigned-signed) + + Signed-off-by: Eduardo Silva + +commit 64321e79e9e6ae14344b7d484fbaa65c566570f7 +Author: Lauri Kasanen +Date: Thu May 3 16:48:45 2012 -0600 + + request: Remove always-true if + + Signed-off-by: Eduardo Silva + +commit 3f77bf3d9809005daf686e13761d82a44f9d054b +Author: Lauri Kasanen +Date: Thu May 3 16:43:12 2012 -0600 + + memory: fix one gcc warning + + Comparison between signed and unsigned. + + Signed-off-by: Eduardo Silva + +commit c3b43cb2550fbd77253b5e53d3bf0618137b65b7 +Author: Lauri Kasanen +Date: Thu May 3 16:41:27 2012 -0600 + + string: Add string fast path + + This dropped _mk_string_search from 4.5% to 3.5% of Monkey CPU time. + + Signed-off-by: Eduardo Silva + +commit c65ddde770dda43b2940f2bc6049c3088ce06152 +Author: Lauri Kasanen +Date: Thu May 3 16:35:36 2012 -0600 + + request: no-op cleanups + + Remove always true else if check, and move one common if check one level above. + + No functional changes. + + Signed-off-by: Eduardo Silva + +commit 03e2a6a1e3638018897bee44d2c034aa5f91ced9 +Author: Eduardo Silva +Date: Mon Apr 30 14:56:45 2012 -0600 + + Duda: rename hook duda_init() to duda_main() + + Signed-off-by: Eduardo Silva + +commit dc2d07d8ac991392aaf8de8ea82cc60257a15670 +Author: Eduardo Silva +Date: Mon Apr 30 11:57:25 2012 -0600 + + Monkey v1.0 is coming. Woohooo + + Signed-off-by: Eduardo Silva + +commit 4e25739b9369f9bee278140280e04db8e00a324d +Author: Eduardo Silva +Date: Mon Apr 30 11:55:35 2012 -0600 + + Duda: example: use new API + + Signed-off-by: Eduardo Silva + +commit 0d9ad9a07bdbd32a28145bc4145a9d2f2b0520fb +Author: Eduardo Silva +Date: Mon Apr 30 10:23:17 2012 -0600 + + Clock: remove atomic operations + + Signed-off-by: Eduardo Silva + +commit ac962a24a8be46e5a989363d8e5e258197073a5f +Author: Eduardo Silva +Date: Mon Apr 30 10:13:26 2012 -0600 + + Scheduler: remove atomic lock mechanism provided by GCC: + + This patch drops the atomic calls set by the compiler from patch: + + http://goo.gl/Ff0u0 + + It now uses the common pthread mutex in place. + + Signed-off-by: Eduardo Silva + +commit dada1cf543d5c1842d6b6553df46eaebeb513fcc +Author: Eduardo Silva +Date: Mon Apr 30 09:34:25 2012 -0600 + + Config: allocate a new memory space when assigning MK_DEFAULT_LISTEN_ADDR + + Signed-off-by: Eduardo Silva + +commit 37cb86881d9ac9367233328d7b30384a3df41706 +Author: Eduardo Silva +Date: Mon Apr 30 06:46:35 2012 -0600 + + Config: #fix 139 Invalid value for config->listen_addr + + Signed-off-by: Eduardo Silva + +commit d06d004638380368137b82362a98b4aebefcc7ca +Author: Lauri Kasanen +Date: Sun Apr 29 20:14:39 2012 -0600 + + iov: Remove unused variable + + Signed-off-by: Eduardo Silva + +commit 484f819cf5a65d8f26add14243c8ffcee6293cc1 +Author: Eduardo Silva +Date: Fri Apr 27 22:03:09 2012 -0600 + + Header: fix HTTP header length + + Signed-off-by: Eduardo Silva + +commit c5e31d2e6f89d957eae281988de6ff9d466f4176 +Author: Eduardo Silva +Date: Fri Apr 27 21:56:34 2012 -0600 + + Duda: API changes and new 'map' console interface + + - New response->body_print() method. Implemented to send static + buffers, this one deprecates the old body_write(). + - New response->body_printf() method. Similar to its 'print' version + but it allows to format a string as printf(3) does. + - When creating a dynamic buffer, the memory is freed automatically + by Duda when the flush process is done. + - New web interface 'map' under console interface, it prints the + interfaces and methods available. + + Signed-off-by: Eduardo Silva + +commit 9ece261ac94053020951d8954c694d8575e02de8 +Author: Eduardo Silva +Date: Wed Apr 25 10:53:29 2012 -0600 + + Duda: cookie: fix path location when expiring a cookie + + Signed-off-by: Eduardo Silva + +commit b8cc1a7ff6a5751c8286851c9affe16c02735ae6 +Author: Eduardo Silva +Date: Wed Apr 25 09:22:40 2012 -0600 + + Duda: session: on destroy, make the cookie expire + + Signed-off-by: Eduardo Silva + +commit 56429614cdd2da82fded3040117515726f5c3b2d +Author: Eduardo Silva +Date: Wed Apr 25 08:51:34 2012 -0600 + + Duda: session: destroy sessions by name (internal lookup for UUID) + + Signed-off-by: Eduardo Silva + +commit 70d6fdb1b6a4e82587933a11c4947e7d890401c3 +Author: Eduardo Silva +Date: Tue Apr 24 20:56:41 2012 -0600 + + Duda: base64: do not add breaklines to encoded string + + Signed-off-by: Eduardo Silva + +commit 8d1b5ebe321c6ae2303d6a7530b3fb8208b6a5a6 +Author: Eduardo Silva +Date: Mon Apr 23 23:08:01 2012 -0600 + + Duda: SQLite: fix return value on sql_dump() + + Signed-off-by: Eduardo Silva + +commit 592347065cd028b1fe79f4c993087d30678b4f06 +Author: Eduardo Silva +Date: Mon Apr 23 22:54:03 2012 -0600 + + Duda: cookie: add path field specifying the webservice path + + Signed-off-by: Eduardo Silva + +commit f84b3b21b8953ce1ca10e206bd40a24ac881eb0a +Author: Eduardo Silva +Date: Sun Apr 22 09:54:05 2012 -0600 + + Duda: fix xtime object name + + Signed-off-by: Eduardo Silva + +commit 2d640f48841b43c03f18f0869145af1bc630e356 +Author: Eduardo Silva +Date: Sun Apr 22 09:52:09 2012 -0600 + + Duda: rename utime object to xtime, no more conflicts. + + Signed-off-by: Eduardo Silva + +commit 8182ba0ede256493d0680e2dc907cc6eaeabebdc +Author: Eduardo Silva +Date: Sat Apr 21 15:57:41 2012 -0600 + + Duda: add missing headers to webservice.h + + Signed-off-by: Eduardo Silva + +commit e211b9778d046b214b2e0529014a4464b9f75727 +Author: Eduardo Silva +Date: Sat Apr 21 15:54:49 2012 -0600 + + Duda: minor fixes on webservice.h + + Signed-off-by: Eduardo Silva + +commit 26cea04fd15a81e2ae1bdcdd27f1582628c258ca +Author: Eduardo Silva +Date: Sat Apr 21 15:38:21 2012 -0600 + + Duda: adjust utime object + + Signed-off-by: Eduardo Silva + +commit ef9c2d02abc8e85eadca87f2858680b3a385e625 +Author: Eduardo Silva +Date: Sat Apr 21 15:33:36 2012 -0600 + + Duda: adjust param object name #2 + + Signed-off-by: Eduardo Silva + +commit 1bc05e0785ca78af6ba774f1c415a7591669f8b4 +Author: Eduardo Silva +Date: Sat Apr 21 15:31:08 2012 -0600 + + Duda: adjust param object name + + Signed-off-by: Eduardo Silva + +commit 79823d071c4a951c88b378374702953999b87531 +Author: Eduardo Silva +Date: Sat Apr 21 15:27:50 2012 -0600 + + Duda: rename time object to utime to avoid time.h conflict + + Signed-off-by: Eduardo Silva + +commit 3dd489d90d1508090360a68fc930526ec18e5a79 +Author: Eduardo Silva +Date: Sat Apr 21 12:20:05 2012 -0600 + + Duda: expose 'time' object in the web services + + Signed-off-by: Eduardo Silva + +commit 3751045757a60d9b928d286bef9741c010664ebe +Author: Eduardo Silva +Date: Sat Apr 21 12:19:12 2012 -0600 + + Duda: update README file + + Signed-off-by: Eduardo Silva + +commit f699c3e7cb232ea8293423c211d5464b968aa937 +Author: Eduardo Silva +Date: Sat Apr 21 12:13:00 2012 -0600 + + Duda: new directory and files structure + + Signed-off-by: Eduardo Silva + +commit 5d266b76e6516da1e2d307b5844716e9b6d4d922 +Author: Eduardo Silva +Date: Sat Apr 21 11:34:24 2012 -0600 + + Duda: console: move object logic to the same file + + Signed-off-by: Eduardo Silva + +commit fa6489bdfa3893ac612c34d08b0a56b66cf28f53 +Author: Eduardo Silva +Date: Sat Apr 21 11:27:06 2012 -0600 + + Duda: cookie: move object logic to the same file + + Signed-off-by: Eduardo Silva + +commit 3b8978f92b56e599215d173f723cd553010a072b +Author: Eduardo Silva +Date: Sat Apr 21 11:22:28 2012 -0600 + + Duda: session: move object logic to same file + + Signed-off-by: Eduardo Silva + +commit 8e6f3149ec64e03c1c7c28449ce5fcbdf254ccc8 +Author: Eduardo Silva +Date: Sat Apr 21 11:16:36 2012 -0600 + + Duda: param: move object logic to same file + + Signed-off-by: Eduardo Silva + +commit 3706dd5750ddc24c72fca9b36fd7a20a8d913b30 +Author: Eduardo Silva +Date: Sat Apr 21 10:56:34 2012 -0600 + + Duda: plugin now is disabled by default + + Signed-off-by: Eduardo Silva + +commit 50254308131b6c89d2009f52cfe0c3ec81a09682 +Author: Eduardo Silva +Date: Sat Apr 21 10:55:27 2012 -0600 + + Duda: new 'time' object + + Signed-off-by: Eduardo Silva + +commit c333eac18e3eb071fb41d0dfd53364c45e106c7b +Author: Eduardo Silva +Date: Sat Apr 21 09:03:12 2012 -0600 + + Duda: object names are singular + + Signed-off-by: Eduardo Silva + +commit 16133773decb6acbc9cb4601c760ce1fe199cce0 +Author: Eduardo Silva +Date: Fri Apr 20 22:13:09 2012 -0600 + + Duda: cookie: fix iov_create() call + + Signed-off-by: Eduardo Silva + +commit 02ab4621c153c18d92c426ace4414de033303690 +Author: Eduardo Silva +Date: Sun Apr 15 12:56:16 2012 -0600 + + Duda: params: new get_number() method + + This new method add the capability to get a converted parameter + from it string origin to a long data type, the work is done without + extra memory allocations and it take cares of long overflows. The + implementation its almost equal to strtol() but it uses a fixed + base 10 and accept an offset for the string length. + + The patch also add a new file duda_utils.c and duda_utils.h where + the duda_utils_strtol() function lives. + + Signed-off-by: Eduardo Silva + +commit d2047a2ff79e1a437655938eeeb6b1a3cdacc796 +Author: Eduardo Silva +Date: Fri Apr 13 15:44:19 2012 -0600 + + Duda: fix some data types + + Signed-off-by: Eduardo Silva + +commit 5ac91e40e1e5b4203f19d3fecb201ad14972dccc +Author: Eduardo Silva +Date: Thu Apr 12 23:26:56 2012 -0600 + + Duda: SQLite: sqlite->step now can return SQLITE_ROW + + Signed-off-by: Eduardo Silva + +commit 5641eb9ad3146e8a8b8f51527d19378cb579ee16 +Author: Eduardo Silva +Date: Thu Apr 12 22:32:50 2012 -0600 + + Duda: SQLite: sql_step is a wrapper now of sqlite3_step + + Signed-off-by: Eduardo Silva + +commit 8e68b748e44706f6fc99b8a84ae1b7a36ebd160f +Author: Eduardo Silva +Date: Thu Apr 12 22:21:40 2012 -0600 + + Duda: console: include duda_request_t address in the log + + Signed-off-by: Eduardo Silva + +commit 2b53185f872a74870bb6ca3bbf00053c8f27fec5 +Author: Eduardo Silva +Date: Thu Apr 12 21:05:35 2012 -0600 + + Duda: param: write params error to the debug console + + Signed-off-by: Eduardo Silva + +commit 724d28c1ae300b77ce1bd6abefc4d4740042377f +Author: Eduardo Silva +Date: Thu Apr 12 21:00:46 2012 -0600 + + Duda: param: if max_len=0, skip validation + + Signed-off-by: Eduardo Silva + +commit 101d602cc9c6d3f08f7a844bfe88b719ba1c2a29 +Author: Eduardo Silva +Date: Thu Apr 12 11:59:16 2012 -0600 + + Duda: map console_debug() to console->debug() + + Signed-off-by: Eduardo Silva + +commit f6b95269857bddf135166a88df1f02d736915a1d +Author: Eduardo Silva +Date: Thu Apr 12 11:12:00 2012 -0600 + + Duda: console: rename method 'write' to 'debug' and add __FILE__ and __LINE__ + + Signed-off-by: Eduardo Silva + +commit fe7fb973ad2cd14a9a2dd7cf593b1b53f1936d44 +Author: Eduardo Silva +Date: Wed Apr 11 23:52:31 2012 -0600 + + Duda: new 'console' object + + Signed-off-by: Eduardo Silva + +commit af30f7c7da2863997c971d027419a1dcd9367685 +Author: Eduardo Silva +Date: Wed Apr 11 08:56:19 2012 -0600 + + Duda: validate that the method was set + + Signed-off-by: Eduardo Silva + +commit 2b6b45b749c2bb666dfb58b1860916611a053415 +Author: Eduardo Silva +Date: Wed Apr 11 08:50:47 2012 -0600 + + Duda: session: new isset() method + + Signed-off-by: Eduardo Silva + +commit d45b98021233fc3b8d1c717550405aba6781e1ec +Author: Eduardo Silva +Date: Wed Apr 11 08:12:38 2012 -0600 + + Duda: api: add a message for invalid macros + + Signed-off-by: Eduardo Silva + +commit a8c27389cf9b06a2819c9efd42190174e8d96301 +Author: Eduardo Silva +Date: Wed Apr 11 08:00:13 2012 -0600 + + Duda: session: session->get() is working now + + Signed-off-by: Eduardo Silva + +commit ba906cdeac72578dd5e67f691c32bbd0e0e10fbb +Author: Felipe Astroza Araya +Date: Tue Apr 10 13:00:04 2012 -0600 + + Server: unused global variable removed + + Signed-off-by: Eduardo Silva + +commit 8bb6a3e35ee5640de9c57e237db7d7ae103dfdaa +Author: Eduardo Silva +Date: Tue Apr 10 12:42:59 2012 -0600 + + Duda: cookie: minor fix in get() method + + Signed-off-by: Eduardo Silva + +commit 73e31e091c55007556be8a87e65355c355110f7e +Author: Eduardo Silva +Date: Tue Apr 10 12:34:39 2012 -0600 + + Duda: cookie: new cmp() method + + Signed-off-by: Eduardo Silva + +commit b4291f20441a6b5e15f82876011a985f1f98f3ad +Author: Eduardo Silva +Date: Tue Apr 10 12:06:54 2012 -0600 + + Duda: cookie: new get() method + + Signed-off-by: Eduardo Silva + +commit f11eef1e920687503652f2e787fb51c872a0c26f +Author: Eduardo Silva +Date: Fri Apr 6 23:45:30 2012 -0600 + + Duda: Session support completed (create/destroy/get) + + Signed-off-by: Eduardo Silva + +commit dc8019a4edafaa0fd9b555cf8cf21b00885af01b +Author: Eduardo Silva +Date: Thu Apr 5 23:01:39 2012 -0600 + + Duda: new Cookies support + + This patch do the following changes: + + - Duda : add a new 'cookie' object, allows to set and destroy a cookie + - IOV : add a mk_bug() to check if the iov is being used over capacity + - API : export a new function time_to_gmt() + - Utils: mk_utils_utime2gmt() now accepts a buffer instead a mk_pointer + + Signed-off-by: Eduardo Silva + +commit 260064836b7aae1fc38039cfc8f331281e6e66e6 +Author: Eduardo Silva +Date: Wed Apr 4 23:33:21 2012 -0600 + + Duda: session: more entropy + + Signed-off-by: Eduardo Silva + +commit 91575a40ccfc989ba08d4f70de923dbc8f0897a5 +Author: Eduardo Silva +Date: Wed Apr 4 23:26:53 2012 -0600 + + Duda: session: generate UUID + + Signed-off-by: Eduardo Silva + +commit 245540a0d1fd01965b9a64aa4d5bab1c86b05f17 +Author: Nicolas Pépin Perreault +Date: Wed Apr 4 12:04:42 2012 -0600 + + Duda: new SHA1 package + + Signed-off-by: Eduardo Silva + +commit b77e32b428bea3622246469c2debecc6f2c5c17d +Author: Kay +Date: Wed Apr 4 11:18:43 2012 -0600 + + Websocket: implement 'echo' subprotocol + + Signed-off-by: Eduardo Silva + +commit 01be8a3bab1fc66fbd90e8bca2fe9ee9c36d4297 +Author: Eduardo Silva +Date: Wed Apr 4 09:10:45 2012 -0600 + + QA: add check for HTTP parsing + + Signed-off-by: Eduardo Silva + +commit 8ab993fbe960a2138a351c4a81083a63994afc22 +Author: Eduardo Silva +Date: Wed Apr 4 09:10:20 2012 -0600 + + HTTP: assign default host before HTTP parsing + + Signed-off-by: Eduardo Silva + +commit 126e383a45bd810a12be2aad9f21c6b92e86ebe1 +Author: Eduardo Silva +Date: Wed Apr 4 08:58:57 2012 -0600 + + HTTP: validate port value after numeric conversion + + Signed-off-by: Eduardo Silva + +commit ba8fd7dbf5aa5ee774341ba333a48727b0326d7c +Author: Jean-Paul Bonnet +Date: Wed Apr 4 08:55:15 2012 -0600 + + HTTP: fix Host header parser + + Signed-off-by: Eduardo Silva + +commit 2c05d6ee3f128282180ff3f951f24be91180e77c +Author: Eduardo Silva +Date: Wed Apr 4 08:40:00 2012 -0600 + + Duda: initial session support + + Signed-off-by: Eduardo Silva + +commit 2a971e5b7aa1b594988994ab40ff5ef54db5c808 +Author: Eduardo Silva +Date: Mon Apr 2 13:25:44 2012 -0600 + + Core: new SAFE_FREE macro (./configure --safe-free) + + Signed-off-by: Eduardo Silva + +commit 3d05fa9238b13c85f13a934f974bddb564f94779 +Author: Felipe Astroza +Date: Sun Apr 1 15:10:12 2012 -0600 + + Scheduler: improve algorithm to get the lowest load worker + + Signed-off-by: Eduardo Silva + +commit 1cd7bc0e639bc56a81773371b416bc3f1ece89d1 +Author: Eduardo Silva +Date: Sun Apr 1 15:02:52 2012 -0600 + + Plugin: free resources on exit + + Signed-off-by: Eduardo Silva + +commit 4b5a409f5c36d1a323921a80d5e45fa072096f9f +Author: Eduardo Silva +Date: Sun Apr 1 14:49:52 2012 -0600 + + Config: free 'file' buffer + + Signed-off-by: Eduardo Silva + +commit 6a4644d618a7f40134f343760e9db6aa31dd1c97 +Author: Eduardo Silva +Date: Sun Apr 1 14:46:01 2012 -0600 + + Logger: free resources on exit + + Signed-off-by: Eduardo Silva + +commit 7f692265986643b97ded3f49becc754777e3f225 +Author: Eduardo Silva +Date: Sun Apr 1 13:48:16 2012 -0600 + + String: new mk_string_split_free call and other changes + + A new function called mk_string_split_free() has been added, this + function free any resources allocated by a mk_string_split_line() + function. + + This patch also free some resources used by the main configuration + structure of Monkey + + Signed-off-by: Eduardo Silva + +commit be5a8455d49c8913c2aafb6d36340342387e1862 +Author: Eduardo Silva +Date: Sun Apr 1 11:55:50 2012 -0600 + + Signal: free main configuration on exit + + Signed-off-by: Eduardo Silva + +commit b600b7cf7e08b08a12795b2f648eb7f0dfe51889 +Author: Eduardo Silva +Date: Sun Apr 1 11:55:14 2012 -0600 + + String: split_line now returns a mk_list + + Signed-off-by: Eduardo Silva + +commit 8b841ccf79a975f36584158ce1743acf225dfe5e +Author: Eduardo Silva +Date: Sat Mar 31 21:37:20 2012 -0600 + + Patas: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit 8e7c6cb4f9d1a3402aee1e6ff6d3c5145d4fea8e +Author: Eduardo Silva +Date: Sat Mar 31 18:21:48 2012 -0600 + + Palm: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit 822ebe18f3844e4f75c2dae30e087b55da90a909 +Author: Eduardo Silva +Date: Sat Mar 31 18:20:36 2012 -0600 + + Mandril: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit a2ecf6a410af102ee75349a69432c5dc9a1112da +Author: Eduardo Silva +Date: Sat Mar 31 18:18:54 2012 -0600 + + Liana_SSL: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit 8b285ed3af3ba7adf72dbfcfd92debfeb7845bec +Author: Eduardo Silva +Date: Sat Mar 31 18:17:08 2012 -0600 + + Duda: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit 6290c20886bfb5aabfddd5a4697192b887381936 +Author: Eduardo Silva +Date: Sat Mar 31 18:12:43 2012 -0600 + + Cheetah: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit 977acfd620662459bac39f23e5aac64b886858eb +Author: Eduardo Silva +Date: Sat Mar 31 18:05:32 2012 -0600 + + Auth: use mk_list method when reading config sections + + Signed-off-by: Eduardo Silva + +commit 94fd69b66f018cab0cdc0bc2d1b1bb7716820092 +Author: Eduardo Silva +Date: Sat Mar 31 18:00:41 2012 -0600 + + Config: struct mk_config now uses mk_list + + Signed-off-by: Eduardo Silva + +commit 71c8f051dc4030a63b949a68397da4f0d3979aef +Author: Eduardo Silva +Date: Sat Mar 31 17:32:55 2012 -0600 + + Config: free hosts information when exiting + + Signed-off-by: Eduardo Silva + +commit 9bfbdbbd6a77f5aea1b3e97b597295c5bfc9d841 +Merge: f26230e b30bd47 +Author: Eduardo Silva +Date: Sat Mar 31 16:00:43 2012 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit f26230e314699331e2094b67e2badbbf79800101 +Author: Eduardo Silva +Date: Sat Mar 31 15:55:04 2012 -0600 + + Logger: use new vhost structure based on mk_list + + Signed-off-by: Eduardo Silva + +commit 5ecb697f8516d57a7ef53a87d3229c98412852d8 +Author: Eduardo Silva +Date: Sat Mar 31 15:51:38 2012 -0600 + + Duda: use new vhost structure based on mk_list + + Signed-off-by: Eduardo Silva + +commit a80fe821b1cfa9964bbca01f70a36d932036c48a +Author: Eduardo Silva +Date: Sat Mar 31 15:48:38 2012 -0600 + + Cheetah: use new vhost structure based on mk_list + + Signed-off-by: Eduardo Silva + +commit 5c6ea12e93c83a6ed611a48f7ff392938d546aef +Author: Eduardo Silva +Date: Sat Mar 31 14:52:01 2012 -0600 + + Auth: use new vhost structure based on mk_list + + Signed-off-by: Eduardo Silva + +commit 985329d65e8b242572cd23c5b8c5213d378e56d2 +Author: Eduardo Silva +Date: Sat Mar 31 14:44:27 2012 -0600 + + Config: vhosts are now handled by a mk_list + + Signed-off-by: Eduardo Silva + +commit e1e1d0c0d3c160c0a44dd8c62db71fc86d72fea5 +Author: Kay +Date: Fri Mar 30 13:41:56 2012 -0600 + + websockets: fix variable payload length + + Signed-off-by: Eduardo Silva + +commit b30bd47f6422b363a9b8ca94a1c145737dc93d0f +Author: Kay +Date: Fri Mar 30 13:41:56 2012 -0600 + + websockets: fix variable payload length + + Signed-off-by: Eduardo Silva + +commit fe7bd889834e00b7aa050509e68ac97332f8b9a9 +Author: Sourabh Chandak +Date: Fri Mar 30 08:49:18 2012 -0600 + + Duda: apply restriction for number of method parameters + + This patch looks after the restriction on the max permissible length + of every parameter.If a parameter value exceeds the max length it + duda_request_parse returns -1 and an appropriate message is shown + on the terminal when in the TRACE mode. + + Signed-off-by: Eduardo Silva + +commit bc530876e840ece9316010e386b3169c5d4d0949 +Author: Eduardo Silva +Date: Tue Mar 27 23:23:24 2012 -0600 + + Scheduler: optimize connection queues + + This patch does a great improvement in terms of performance. When + a write event is triggered the scheduler is invoked to verify if the + connection already exist or if it refers to a new one. + + The past scheduler implementation had a fixed array per thread with + slots for a number of (sched_connection struct * worker_capacity). The + main problem was that when many connections were active, do a sequencial + search was very expensive due to the fragmentation originated by the + 'status' field of the the sched_connection entries in the whole array. + + In the mailing list, developers were discussing a better approach to + register a new connection and Max mentioned that having two queues of + connection could improve something and be more clean. + + This patch applies the "two queues" idea proposed to the scheduler but + improving not only the connection register, also improving the hard lookup + when the write event is triggered, the new mechanism is as follows: + + struct sched_connection { + ... + mk_list busy_queue; /* active sched connections */ + mk_list av_queue; /* available sched connections */ + ... + }; + + Comparing and profiling with valgrind/callgrind we get the following + performance results: + + Function name Inclusive Cost Self Cost + ------------------------------------------------------- + old -> mk_sched_get_connection() 10.63 10.63 + new -> mk_sched_get_connection() 0.86 0.86 + + The new mechanism optimize the scheduler connections lookup in a 90%!, + conclusion?, good public discussions get great ideas :) + + Signed-off-by: Eduardo Silva + +commit 58fe4349b558159c356fc9a3b0b4a023dd5ed085 +Author: Torsten Pfüller +Date: Mon Mar 26 11:57:39 2012 -0600 + + config: fix some memory leaks + + Signed-off-by: Eduardo Silva + +commit 6bb902569b3080f9d41aa83b6fa812e66d58d56c +Author: Sourabh Chandak +Date: Sun Mar 25 21:14:07 2012 -0600 + + Duda: modifed sample webservice for better string handling + + Signed-off-by: Eduardo Silva + +commit ed0ffeda9e5a8e6469013620753dfbbef1ffd169 +Author: Sourabh Chandak +Date: Sun Mar 25 20:57:14 2012 -0600 + + Duda: added duda_structure type variable to duda_request and related methods + + Signed-off-by: Eduardo Silva + +commit b3bab756c41549de4fa9d12878a0d41a714567f1 +Author: Eduardo Silva +Date: Sun Mar 25 13:33:41 2012 -0600 + + Duda: move params interface to a duda_param.c file + + Signed-off-by: Eduardo Silva + +commit e265d90acb21f9bb1acca9cf2c0564cc23f29783 +Author: Lauri Kasanen +Date: Fri Mar 23 17:42:38 2012 -0600 + + scheduler: Use atomic writes in register_thread + + Signed-off-by: Eduardo Silva + +commit 437786e4d04eba98e8b2d8c73decee852a5400f7 +Author: Lauri Kasanen +Date: Fri Mar 23 17:38:44 2012 -0600 + + clock: Initialize the _current_time variables + + Signed-off-by: Eduardo Silva + +commit d1cf22e74a0794e464a5e62ace20ac6cb9d56597 +Author: Lauri Kasanen +Date: Fri Mar 23 17:23:45 2012 -0600 + + scheduler: Do atomic writes for active_connections + + This fixes the bug under extremely high load. + + Signed-off-by: Eduardo Silva + +commit c5eebd8b4da2924f1ddda86ecd33cddb693c37e6 +Author: Lauri Kasanen +Date: Fri Mar 23 16:49:39 2012 -0600 + + threading: Use thread-safe time functions + + Signed-off-by: Eduardo Silva + +commit 290717de95dc276e4108d6f9bbe5e1d546593d79 +Author: Lauri Kasanen +Date: Fri Mar 23 16:48:14 2012 -0600 + + threading: Do atomic writes in the clock thread (gcc-specific) + + Signed-off-by: Eduardo Silva + +commit 9a2b826e119513835ed65b63dbdf0bc78ab536fe +Author: Lauri Kasanen +Date: Fri Mar 23 16:42:52 2012 -0600 + + messages: only print colors to terminal + + Signed-off-by: Eduardo Silva + +commit 512c6c898dd1778a0aa7819231e8f42bcb9751c9 +Author: Lauri Kasanen +Date: Fri Mar 23 13:09:27 2012 -0600 + + header: move mk_bug() check before iov_*() call + + Signed-off-by: Eduardo Silva + +commit dd092f94a0083dbbf6d423ccbeec750f8f544825 +Author: Lauri Kasanen +Date: Fri Mar 23 13:06:57 2012 -0600 + + config: enable GNU extensions to get isblank() + + Signed-off-by: Eduardo Silva + +commit 614dbdde7c988bdffd163769ff6b67d821e6aeb2 +Author: Lauri Kasanen +Date: Fri Mar 23 13:05:36 2012 -0600 + + git: Update .gitignore to match all generated files + + Signed-off-by: Eduardo Silva + +commit 0cbbc480e66bc52a794d8cdf2963fdb68e1b331c +Author: Eduardo Silva +Date: Fri Mar 23 13:03:49 2012 -0600 + + Duda: SQLite: update API, new methods to retrieve column values + + Signed-off-by: Eduardo Silva + +commit 0c9cad07f5a2cce4905a27d52c1b425766ad44e4 +Author: Eduardo Silva +Date: Thu Mar 22 20:14:22 2012 -0600 + + Duda: SQLite: new sqlite_handle_t data type + + Signed-off-by: Eduardo Silva + +commit 35fbe01f79d132305343ee360f3eedac2239d082 +Author: Eduardo Silva +Date: Thu Mar 22 19:08:27 2012 -0600 + + Duda: SQLite: rename method step() to fetch() + + Signed-off-by: Eduardo Silva + +commit 8bdad89a66e5529aedf558b1438b1c7d1c87fa86 +Author: Eduardo Silva +Date: Thu Mar 22 14:50:50 2012 -0600 + + Request: fix memory leak when invoking premature close + + When premature close was invoked, it requested memory for a temporal + session_request. On this condition that memory block was never freed. + + The patch drops the mk_mem_alloc() call and just link the temporal + session_request pointer to the sr_fixed field from the client_session + struct. + + Thanks to Felipe Astroza for report this issue! + + Signed-off-by: Eduardo Silva + +commit 7c75f3547d114bed39b52edc63f1791cad681c7e +Author: Eduardo Silva +Date: Thu Mar 22 13:39:41 2012 -0600 + + HTTP: fix keep_alive initial value on session_request + + Signed-off-by: Eduardo Silva + +commit 53650ac48a163f95eefb10abee9680be9b7a087b +Author: Sourabh Chandak +Date: Wed Mar 21 23:16:20 2012 -0600 + + Duda: add new 'params' object to handle parameters + + Signed-off-by: Eduardo Silva + +commit 841c6607eec2db8084043df5d8fb54129bd5c269 +Author: Eduardo Silva +Date: Tue Mar 20 22:01:40 2012 -0600 + + Duda: SQLite: new dump() and done() methods + + Signed-off-by: Eduardo Silva + +commit 697ab06e2f28597a475a8db212bffc8b73c268ae +Author: Mahesh Gondi +Date: Tue Mar 20 12:49:44 2012 -0600 + + [PATCH] utils: deprecate err(), use mk_err() as it should + + Signed-off-by: Eduardo Silva + +commit afb82edd01846e3f65d9f60110bc556ed70d006c +Author: Sourabh Chandak +Date: Tue Mar 20 08:23:14 2012 -0600 + + [PATCH] Duda: examples: improved json example + + Signed-off-by: Eduardo Silva + +commit a6f4f43673e3ed98d4c337d3f07d37cfb3792354 +Author: Eduardo Silva +Date: Mon Mar 19 16:28:45 2012 -0600 + + Duda: SQLite: callback now gets 'struct sqlite_cb_data' as data + + Signed-off-by: Eduardo Silva + +commit 3fb9eee764c98e803038e509302d8558c383d203 +Author: Eduardo Silva +Date: Mon Mar 19 09:25:38 2012 -0600 + + Duda: examples: fix Makefile paths + + Signed-off-by: Eduardo Silva + +commit 08e3e0be5e8318640a085d556793931ed42fc681 +Author: Felipe Astroza +Date: Mon Mar 19 09:22:15 2012 -0600 + + clock: Comments added and indentation fixes + + Signed-off-by: Eduardo Silva + +commit ff8fd67dd32976e156b55c55bf9ca7ffbf1e8354 +Author: Felipe Astroza +Date: Mon Mar 19 09:20:57 2012 -0600 + + clock: improve time strings concurrent access + + Signed-off-by: Eduardo Silva + +commit 2a60a7ba8e6f358e0485c89cae7306ba14214a20 +Merge: a5e22aa d2696fe +Author: Eduardo Silva +Date: Mon Mar 19 09:15:16 2012 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit a5e22aa45db79eec35c85739de75ddd0efccb4b4 +Author: Eduardo Silva +Date: Mon Mar 19 09:14:45 2012 -0600 + + Duda: examples: add json loader + + Signed-off-by: Eduardo Silva + +commit d2696fe56f8347f324cd5057634c0172785e685b +Author: Davidlohr Bueso +Date: Mon Mar 19 14:29:33 2012 +0100 + + iov: remove bogus variable initialization + + There's no point setting up an initial variable value when it is replaced right away, it wastes cycles. + +commit 93e9510343395a9ff24407cdcd8b01131099c1a5 +Author: Eduardo Silva +Date: Sun Mar 18 23:51:21 2012 -0600 + + Duda: fix Makefile.in in packages + + Signed-off-by: Eduardo Silva + +commit a58f49525992526a4f20afdbcf8a4ced0c521719 +Author: Eduardo Silva +Date: Sun Mar 18 18:02:26 2012 -0600 + + Duda: SQLite: add callback support to sqlite->exec() + + Signed-off-by: Eduardo Silva + +commit 730354399b181815d04e0b715150b04a3612672c +Author: Eduardo Silva +Date: Sun Mar 18 15:45:13 2012 -0600 + + Duda: SQLITE: deprecate content of sql_init() routine + + Signed-off-by: Eduardo Silva + +commit acce61d8fae4c15a5cc86a80a2640711f4b0eb89 +Merge: 76c5d4a cb1b1ee +Author: Eduardo Silva +Date: Sun Mar 18 15:15:50 2012 -0600 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 76c5d4a142e74d8fe942f2c5d5af697c058ec6ee +Author: Eduardo Silva +Date: Sun Mar 18 15:15:23 2012 -0600 + + Duda: SQLITE / delete hidden file + + Signed-off-by: Eduardo Silva + +commit a4979060b2226afce6331da2b38dca141c45e225 +Author: Eduardo Silva +Date: Sun Mar 18 15:14:52 2012 -0600 + + Duda: new SQLITE package + + Signed-off-by: Eduardo Silva + +commit cb1b1eea50060808320ce68c2870d14979214755 +Author: Davidlohr Bueso +Date: Sun Mar 18 17:38:49 2012 +0100 + + overwrite pidfile upon SIGKILL + + With the pidfile as a write-lock, SIGKILL does not remove the file + and causes the next execution of monkey to abort as it cannot open + the existing file. Solve this by unlinking it before opening it if + the file is already there (from the previous run). + +commit 60b6303aedceeafd12867fa5bc2bfe73a8bb4ce8 +Author: Davidlohr Bueso +Date: Sun Mar 18 14:54:05 2012 +0100 + + monkey: core: lockup pidfile + + The pidfile that is created when monkey is started should, as its exclusive nature requires, + be locked against other processes's that might attempt to write over it. Create a POSIX write-lock + for this, as shown by lslocks(8): + + $> lslocks -p 15676 + COMMAND PID SIZE ACCESS M START END PATH + monkey: server 15676 5B WRITE 0 0 0 /home/dave/projects/monkey-dev/logs/monkey.pid.2001 + +commit fcd3b9a26f0b45c6b748384d3058f9270a763102 +Author: Eduardo Silva +Date: Sat Mar 17 23:51:10 2012 -0600 + + Duda: deprecate crypto routines + + Signed-off-by: Eduardo Silva + +commit 92ddb8d358f7ff4f06256eae788e428d4ca3f88c +Author: Felipe Astroza +Date: Sat Mar 17 20:15:38 2012 -0600 + + core:time string sizes constant replaced by macro definition + + Signed-off-by: Eduardo Silva + +commit 25c43e80ef70a5be53cefd2aa53450b18055b63f +Author: Eduardo Silva +Date: Sat Mar 17 18:12:05 2012 -0600 + + Duda: new base64 package + + Signed-off-by: Eduardo Silva + +commit 74a2e71006a6c5fa1555bcb3914fe52b5eba54e5 +Author: Eduardo Silva +Date: Fri Mar 16 10:21:07 2012 -0600 + + Duda: new packages support! + + This patch adds a new packages mechanism, so web services can + request to Duda to load specific packages/objects. + + The first package available with Duda is JSON, so to add JSON + support to a web service, it will take two steps: + + #include "packages/json/json.h" + + int duda_init(struct duda_api_objects *api) + { + ... + duda_service_init(); + duda_load_package(json, "json"); + ... + } + + The duda_load_package() call takes two arguments, the first one + is the package object which expose the API calls, the second is + the name of the package. + + The packages lookup takes place in duda.conf file under the configuration + key 'PackagesRoot'. + + Now the fun begins :) + + Signed-off-by: Eduardo Silva + +commit da5cecae409761582207c07f115f4d1ed15ae3e7 +Author: Eduardo Silva +Date: Wed Mar 14 23:05:04 2012 -0600 + + Duda: link to libmath '-lm', required by cJSON + + Signed-off-by: Eduardo Silva + +commit 4f0b80c677818ed54a18fae7c3931477b928c5dd +Author: Eduardo Silva +Date: Wed Mar 14 16:59:55 2012 -0600 + + Header: fix memory leak when extra_rows are set by the API + + Signed-off-by: Eduardo Silva + +commit 7857513b51d0c021d650189fe82d116f18679ef7 +Author: Eduardo Silva +Date: Sat Mar 10 23:01:36 2012 -0600 + + Duda: check interfaces and methods string length + + Signed-off-by: Eduardo Silva + +commit 6ce9948ae08c6a4499d8a5ab8246f447a791ee31 +Author: Eduardo Silva +Date: Sat Mar 10 20:37:09 2012 -0600 + + Duda: validate wrong services path + + Signed-off-by: Eduardo Silva + +commit b9ab3c926f5e65a0ef8054cb97184daeab53eb5f +Author: Eduardo Silva +Date: Sat Mar 10 13:19:28 2012 -0600 + + Configure: do not install not compiled plugins + + Signed-off-by: Eduardo Silva + +commit 4ac2b2a2cbf8422a550a8d24594f4bc376fa1d9f +Author: Eduardo Silva +Date: Fri Mar 9 22:04:55 2012 -0600 + + Configure: tweak compiler message + + Signed-off-by: Eduardo Silva + +commit 3d024c987071bb35e60878000b1c7297c50bb622 +Author: Eduardo Silva +Date: Fri Mar 9 17:04:58 2012 -0600 + + Duda: update Makefile.in + + Signed-off-by: Eduardo Silva + +commit 106de2c80f62b04c1f305fe6a6a5389f429a519f +Author: Eduardo Silva +Date: Fri Mar 9 16:56:58 2012 -0600 + + Duda: new global variables support + + In order to create a global variable in your service: + + 1) Define a global variable as any C global var: + + /* define variable */ + duda_global_t my_variable; + + 2) Declare the variable as global for Duda, you need to do this + inside the duda_init() call and after duda_service_init(): + + /* initialize variable */ + duda_global_init(my_variable, NULL); + + 3) Optionally, you can initialize the variable with a defined value, + this is done using a callback function, so you could do: + + /* define variable callback */ + void *cb_global_myvar() + { + void *mem = malloc(16); + return mem; + } + + /* initialize the variable with the callback */ + duda_global_init(my_variable, cb_global_myvar); + + 4) Inside the services callback for each method you can retrieve or + set a new value for each one using the global object: + + global->set(my_variable, some_value); + global->get(my_variable); + + Signed-off-by: Eduardo Silva + +commit 8f37d029001b157ef47be5ad7cd4209ea258cd42 +Author: Eduardo Silva +Date: Thu Mar 8 08:51:24 2012 -0600 + + Duda: fix bad object name in Makefile.in + + Signed-off-by: Eduardo Silva + +commit d38824c7b6e33ea3aca3c291c05b5496ce8d89cc +Author: Eduardo Silva +Date: Wed Mar 7 22:48:13 2012 -0600 + + Duda: add JSON support + + Signed-off-by: Eduardo Silva + +commit 80de9a781787a04ff5d8b5bac69cf67a3f304464 +Author: Eduardo Silva +Date: Tue Mar 6 22:56:43 2012 -0600 + + Duda: new crypto object with base64_[en|de]code support + + Signed-off-by: Eduardo Silva + +commit 266a9b3469bc707c90b37dc08c16af1acf077e4a +Author: Eduardo Silva +Date: Tue Mar 6 22:07:11 2012 -0600 + + Configure: recursive search for Makefile.in in plugins directory + + Signed-off-by: Eduardo Silva + +commit 605a3690b533cf82bf7a0b6279a008b31dbf41a8 +Author: Eduardo Silva +Date: Fri Mar 2 10:47:08 2012 -0600 + + Duda: add Makefile.in to examples/ + + Signed-off-by: Eduardo Silva + +commit 2bfd63c43a54a274a36f6200e513a1123952d832 +Author: Eduardo Silva +Date: Thu Mar 1 21:58:47 2012 -0600 + + Duda: new response->sendfile() method + + the sendfile() method send a complete file in asyncronous mode using + the Monkey socket_sendfile() api. + + Signed-off-by: Eduardo Silva + +commit ef1dac2dabd2c8fc74fbc1d88babbdfdc028bdfe +Author: Eduardo Silva +Date: Thu Mar 1 19:51:46 2012 -0600 + + Duda: prefix filenames + + Signed-off-by: Eduardo Silva + +commit 6bbbf5672c78bdf9d97b06bc8dcbb24071ac5818 +Author: Eduardo Silva +Date: Thu Mar 1 19:02:14 2012 -0600 + + Duda: on response end, use service_end() properly + + Signed-off-by: Eduardo Silva + +commit f7fbad6848c8f40a576ba8d86b629b967ba77170 +Author: Eduardo Silva +Date: Wed Feb 29 22:26:26 2012 -0600 + + Duda: complete queue_flush() and free resources + + Signed-off-by: Eduardo Silva + +commit 680c9771abe513ea620d3413838e0ebb276a2184 +Author: Eduardo Silva +Date: Wed Feb 29 20:08:16 2012 -0600 + + Jump to v0.99 + + Signed-off-by: Eduardo Silva + +commit 87cc2365e3c87ccf7317176069656d24291bf434 +Author: Eduardo Silva +Date: Wed Feb 29 19:39:27 2012 -0600 + + Macros: fix mk_bug() w/stacktrace + + Signed-off-by: Eduardo Silva + +commit c7ba6efd915c1d52cf2d4ff245f8340ab4466650 +Author: Eduardo Silva +Date: Wed Feb 29 19:38:34 2012 -0600 + + Duda: queue_flush + + Signed-off-by: Eduardo Silva + +commit f41f22c500fda4161f98586865b95f4315fee8e3 +Author: Eduardo Silva +Date: Tue Feb 28 23:48:30 2012 -0600 + + Duda: initial implementation of output queue + + This patch add a new way to handle the output data. All new output + request are linked to dr->queue_out and handle in async mode in order. + + New files have been added: queue.c & body_buffer.c (and it headers) + + The queue.c file represent the queue management routines, the body_buffer + stuff represents the the strings output: response->body_write(). + + Signed-off-by: Eduardo Silva + +commit caf6e49f0a6f6955398136b2f5cd588d7ba1184d +Author: Eduardo Silva +Date: Mon Feb 27 21:38:11 2012 -0600 + + Request: on trace mode do not use cs->socket + + Signed-off-by: Eduardo Silva + +commit 9bd31cbb12fe0d42b96bc752360bd8357abfca57 +Author: Eduardo Silva +Date: Sun Feb 26 23:31:18 2012 -0600 + + Duda: events_write management + + The framework now supports handlers for the write events, so it + can send multiple data buffer and close session properly. + + Other improvements: + + - Added a callback to response->end(..., callback_func) + - Content length is sent on every response + - Free allocated resources when the Duda request ends + - Events write: register / unregister + + Signed-off-by: Eduardo Silva + +commit e12777ce010909b792465b2ff258b9c6b3053904 +Author: Eduardo Silva +Date: Sun Feb 26 11:15:06 2012 -0600 + + Duda: body_buffer adjust to asynchronous mode (event oriented) + + When writting the body_buffer, due to the asynchronous sockets mode, + less data than the expected can be written, so Duda must catch up this + behavior. + + This patch makes to adjust an offset in the body_buffer, as well it + register a callback with the write events triggered by the core of + Monkey, so in the next event calls it sends the pending data. + + Signed-off-by: Eduardo Silva + +commit 65a4c25dffdc55efd86816a4628c5b61e25149e3 +Author: Eduardo Silva +Date: Sat Feb 25 21:27:54 2012 -0600 + + Macros: print stacktrace when mk_bug() is called + + Signed-off-by: Eduardo Silva + +commit 4b4efc5011f84ce31211a869cc9c857cb41daf94 +Author: Eduardo Silva +Date: Sat Feb 25 21:12:45 2012 -0600 + + Duda: body_flush set offset when data sent is less than total + + If the socket_sendv() function wrote less data than the total instructed, + it reset the iovec struct and perform an offset operation for the available + iovec entries setting length=0 and adjusting iov_base if required. + + Signed-off-by: Eduardo Silva + +commit 5e60aaff9a6eeef5222befca2a68e873ef11f714 +Author: Davidlohr Bueso +Date: Sat Feb 25 23:37:48 2012 +0100 + + add stacktrace output + + Add a stacktrace output for debugging purposes in both the plugins API and + the SIGSEGV handler. + +commit cfa10482915871a696e4bbbac1d6eaeca14f18e9 +Author: Eduardo Silva +Date: Fri Feb 24 16:06:11 2012 -0600 + + Duda: body_buffer now uses Monkey iov struct to store buffers + + Signed-off-by: Eduardo Silva + +commit be74d947e7aba560171dc0c22f4e38eddf2c5b24 +Author: Eduardo Silva +Date: Fri Feb 24 15:58:32 2012 -0600 + + iov: fix realloc new pointers + + Signed-off-by: Eduardo Silva + +commit e98e97afbc830e521fff3294e38625aea9e25cf8 +Author: Eduardo Silva +Date: Fri Feb 24 15:50:50 2012 -0600 + + iov: new mk_iov_realloc() call + + Signed-off-by: Eduardo Silva + +commit 283c7df870c6c1b7eec3b0d61a9bb071281cb2f1 +Author: Eduardo Silva +Date: Fri Feb 24 15:32:41 2012 -0600 + + Duda: new response API object + + the response API object expose methods to configure and perform + a response of data to the client, this patch implements the following + methods: + + - http_status: set the response HTTP status + - http_header: add a new HTTP response header + - body_write : write content in the body part of the response + - end : finalize the work flushing data as required + + This patch also implements the body_buffer concept. Each duda_request_t + have associated a 'struct iovec *' array which is used by body_write() + to perform socket writes. These writes are asynchronous and done when + the callback is ending, leaving Duda and Monkey Core to handle the + output data. + + Signed-off-by: Eduardo Silva + +commit cd91d10faa7ef3a0d680968a2d97d2b010885fa6 +Author: Eduardo Silva +Date: Thu Feb 23 23:57:02 2012 -0600 + + Duda: hello service rename callbacks + + Signed-off-by: Eduardo Silva + +commit 7d3c2c477be9bc8da8e29bf5e2dc3336a3573661 +Author: Eduardo Silva +Date: Thu Feb 23 23:53:33 2012 -0600 + + Duda: callbacks working + + Signed-off-by: Eduardo Silva + +commit 41bf469a405a7beab1c92a443685b24ea91c26e0 +Author: Eduardo Silva +Date: Wed Feb 22 23:39:47 2012 -0600 + + Duda: parse request routine + + Signed-off-by: Eduardo Silva + +commit cceb21fd529dd9432b4b13ba7230664e20563896 +Author: Eduardo Silva +Date: Tue Feb 21 21:59:22 2012 -0600 + + Duda: match web service app with request URI + + Signed-off-by: Eduardo Silva + +commit fd95b4897f1c96bba3248f44522a5634529c67e0 +Author: Eduardo Silva +Date: Mon Feb 20 23:31:00 2012 -0600 + + Duda: new API objects + + Duda framework now export four pseudo-objects for the webservice usage: + + - monkey: core monkey API methods + - map : methods to define the webservice URI map + - msg : messaging object (info/warn/err/bug) + - debug : debugging methods (not yet implemented) + + Each object contains N methods which can be invoked like: + + msg->info("some message"); + + The API is still in a early state and it will implement more features + in the next commits. + + Signed-off-by: Eduardo Silva + +commit 07b0435cbc22d2d3eba5bdb54c3aeba7f2e7576f +Merge: 48882ee 6f4a9b9 +Author: Eduardo Silva +Date: Mon Feb 20 11:54:08 2012 -0600 + + Merge commit 'v0.33.0' + +commit 6f4a9b9534d624a27fa848719383b7c5cc759e77 +Author: Eduardo Silva +Date: Mon Feb 20 11:49:26 2012 -0600 + + Monkey 0.33.0 + +commit 6eeba30564bf31e17e180c4fe23de267bbc74501 +Author: Eduardo Silva +Date: Mon Feb 20 11:49:20 2012 -0600 + + Config: fix mk_bug() alert when reading a vhost file + + Signed-off-by: Eduardo Silva + +commit 48882eef8b690e76091ee83b850113cc2006d27a +Author: Eduardo Silva +Date: Mon Feb 20 11:47:13 2012 -0600 + + Duda: checking hooks references + + Signed-off-by: Eduardo Silva + +commit 0db7753218ed1f8a39b6aa7ad78e3094faae9eeb +Merge: 6287750 85b9ac2 +Author: Eduardo Silva +Date: Fri Feb 17 22:59:09 2012 -0600 + + Merge conflicts + + Signed-off-by: Eduardo Silva + +commit 85b9ac2e267448960ee11ec5c2849f8d1031c194 +Author: Eduardo Silva +Date: Fri Feb 17 22:55:28 2012 -0600 + + Duda: initial API object + + Signed-off-by: Eduardo Silva + +commit 78cec1ffe2c1d3ef7f3533ac979945f78fcc309f +Author: Eduardo Silva +Date: Fri Feb 17 21:27:59 2012 -0600 + + Duda: load service libraries + + Signed-off-by: Eduardo Silva + +commit 79a8edd9ed782d8ef38f69999948f45116f273e7 +Author: Eduardo Silva +Date: Thu Feb 16 19:55:39 2012 -0600 + + Duda: add example service + + Signed-off-by: Eduardo Silva + +commit 6287750ae1fe4c801c83fbc4175a61f0f6fbf557 +Author: Eduardo Silva +Date: Thu Feb 16 19:52:06 2012 -0600 + + Duda: add example service + + Signed-off-by: Eduardo Silva + +commit e83477dccaa5d080a7aaa9737e92d15bc7c633cc +Author: Eduardo Silva +Date: Thu Feb 16 19:51:42 2012 -0600 + + Duda: add webservice API files + + Signed-off-by: Eduardo Silva + +commit a451185ef30de2c68649d92f18e57fb7dfb14e23 +Author: Eduardo Silva +Date: Tue Feb 14 10:12:41 2012 -0600 + + README: update project basic info + + Signed-off-by: Eduardo Silva + +commit fc3f4c71f02bdd16fd20db7bcb1847f2d28fb315 +Author: Eduardo Silva +Date: Tue Feb 14 10:02:21 2012 -0600 + + Duda: plugin is licensed under LGPL v2.1 + + Signed-off-by: Eduardo Silva + +commit 8ca25f97ffbaefabde23e58a7b938045d62f8f87 +Author: Eduardo Silva +Date: Mon Feb 13 21:55:00 2012 -0600 + + Duda: web services framework + + Signed-off-by: Eduardo Silva + +commit 6ef849fde878164c90d09111d8807e56dd7bb625 +Author: Eduardo Silva +Date: Mon Feb 13 21:13:50 2012 -0600 + + Liana_SSL: count number of Bazingas + + Signed-off-by: Eduardo Silva + +commit 62a778c302e18df0fe4dd10daa515fc2d2a72e39 +Author: Eduardo Silva +Date: Mon Feb 13 21:01:55 2012 -0600 + + Macros: fix return value for mk_is_bool() + + Signed-off-by: Eduardo Silva + +commit 307261c25e1857591d7faa49f04be56e7937064a +Author: Eduardo Silva +Date: Mon Feb 13 20:27:38 2012 -0600 + + Macros: new mk_is_bool() macro to evaluate booleans + + Signed-off-by: Eduardo Silva + +commit 7e07cc54b6536af38ae9b7255cb3c82d1aada392 +Author: Eduardo Silva +Date: Thu Feb 9 16:08:46 2012 -0600 + + Monkey 0.32.0 + +commit 7b941b3f22e4dc39a0fab564eda5f86002a6f837 +Merge: a2ff857 041f314 +Author: Eduardo Silva +Date: Thu Feb 9 16:08:31 2012 -0600 + + Merge conflict + + Signed-off-by: Eduardo Silva + +commit a2ff857f891e8f7cfdea5c3418962da957744664 +Author: Eduardo Silva +Date: Thu Feb 9 16:06:50 2012 -0600 + + Monkey 0.32.0 + +commit e55d571e11bc333fa6e5e6ee3de8cb95e1947fa6 +Author: Eduardo Silva +Date: Thu Feb 9 16:05:30 2012 -0600 + + Debian: update rules and install data files + + the debian package now install the htdocs files under: + + /var/www/monkey + + The version also has been updated to 0.32 in the changelog + + Signed-off-by: Eduardo Silva + +commit 041f3146c6a2db4cd2a1cbf0899cbfc6bc355d63 +Author: Eduardo Silva +Date: Thu Feb 9 15:38:53 2012 -0600 + + Monkey 0.32.0 + +commit 898d00f874831ca1887570441552fbf19db4ad88 +Author: Eduardo Silva +Date: Thu Feb 9 13:06:15 2012 -0600 + + Distribute binary script added by plugins + + Signed-off-by: Eduardo Silva + +commit 07bb5f297ddd6eb0844a01a09e2da39e6d163084 +Author: Eduardo Silva +Date: Thu Feb 9 12:58:22 2012 -0600 + + Update Copyright year + + Signed-off-by: Eduardo Silva + +commit 1148ee03422d3c04da70227e358eb7a971497e83 +Author: Eduardo Silva +Date: Thu Jan 26 23:51:04 2012 -0300 + + Cheetah: default to Server mode + + Signed-off-by: Eduardo Silva + +commit e1106921235795817c84b16807e3768d58ac8003 +Author: Eduardo Silva +Date: Thu Jan 26 23:11:09 2012 -0300 + + Cheetah: adjust worker ID + + Signed-off-by: Eduardo Silva + +commit 896127b0928027bca4ca2597cd983c6a7ab611ca +Author: Eduardo Silva +Date: Thu Jan 19 12:57:11 2012 -0300 + + Workers have names + + Since now all monkey threads (Linux tasks) have set a human readable name, + this has been done using the prctl(PR_SET_NAME,...) syscall. + + You can use 'ps' utility to check the tasks in question, eg: + + edsiper@monotop:~$ ps -L -p 16058 + PID LWP TTY TIME CMD + 16058 16058 pts/2 00:00:00 monkey: server + 16058 16059 pts/2 00:00:00 monkey: clock + 16058 16060 pts/2 00:00:00 monkey: cheetah + 16058 16061 pts/2 00:00:00 monkey: logger + 16058 16062 pts/2 00:00:00 monkey: wrk/0 + 16058 16063 pts/2 00:00:00 monkey: wrk/1 + 16058 16064 pts/2 00:00:00 monkey: wrk/3 + 16058 16065 pts/2 00:00:00 monkey: wrk/2 + 16058 16066 pts/2 00:00:00 monkey: wrk/4 + + If you use 'ps' with common arguments you will not realize this change + as 'ps' primary looks for the command line in procfs for each task, you + have to use the '-L' argument to get details of the process tasks. + + Signed-off-by: Eduardo Silva + +commit 424217adc5555c0e54acfeffdef264d4d7448870 +Author: Eduardo Silva +Date: Tue Jan 17 10:38:21 2012 -0300 + + API: drop ip_str plugin struct field + + Signed-off-by: Eduardo Silva + +commit dfc6ce449c32281e09dacab38c44526ce844c681 +Author: Eduardo Silva +Date: Tue Jan 17 10:14:26 2012 -0300 + + Config: do not cast to size_t + + Signed-off-by: Eduardo Silva + +commit 8eb0a3489013acb73d34da240903d071b8771844 +Author: Eduardo Silva +Date: Mon Jan 16 15:39:48 2012 -0300 + + Plugin: drop deprecated ip_str function hook validation + + Signed-off-by: Eduardo Silva + +commit c63148843a62e747d9d52a01a0bcdc76ba4445b7 +Author: Eduardo Silva +Date: Mon Jan 16 15:39:14 2012 -0300 + + API: drop (void *) casts + + Signed-off-by: Eduardo Silva + +commit 592389eabd99a7eb0429ab1944ec153c6a4db0b6 +Author: Eduardo Silva +Date: Thu Jan 12 10:25:24 2012 -0300 + + Monkey 0.31.0 + +commit b43b743905349d226a3eeaff34178e3d42dc7938 +Author: Eduardo Silva +Date: Thu Jan 12 10:25:09 2012 -0300 + + Update MONKEY_MINOR version to 31 + + Signed-off-by: Eduardo Silva + +commit 0b7d5c5ab20b2ffb5fb40f23801a2e03b8cbe328 +Author: Eduardo Silva +Date: Wed Jan 11 18:10:13 2012 -0300 + + Palm: use new socket_ip_str() API call + + Signed-off-by: Eduardo Silva + +commit 69d630cbb649cfa74e4a81c7b0e6c38784d4dbe1 +Author: Eduardo Silva +Date: Wed Jan 11 16:21:16 2012 -0300 + + Socket: mk_socket_ip_str() accepts input buffer + + The function which format IP strings was allocating memory buffer + for the string, this patch makes the function to accept an input + buffer so the caller must care about it. + + Also this patch modifies the logger plugin to use the new API of + the function in question. Now it uses a thread key to hold the + buffer in memory used to format the IP string, it should be + a little bit faster now. + + Signed-off-by: Eduardo Silva + +commit e8f33a8ecfdcb71336afd0cc54bb4c65eab982f6 +Author: Eduardo Silva +Date: Tue Jan 10 15:57:57 2012 -0300 + + Logger: fix memory leak on ip_str buffer + + Signed-off-by: Eduardo Silva + +commit 901ca276f3b64e42882e00b30a2ff3d41a27c422 +Author: Eduardo Silva +Date: Tue Jan 10 15:43:30 2012 -0300 + + Liana_SSL: deprecate _mkp_network_io_ip_str() + + Signed-off-by: Eduardo Silva + +commit 34572c8ae18199611ceaf3919631e80f452e4714 +Author: Eduardo Silva +Date: Tue Jan 10 15:43:10 2012 -0300 + + Liana: deprecate _mkp_network_io_ip_str() + + Signed-off-by: Eduardo Silva + +commit daffacfa85039688965a9dd9f47cd196ebfb4a30 +Author: Eduardo Silva +Date: Tue Jan 10 15:40:54 2012 -0300 + + Socket: move socket_ip_str to core interface + + Signed-off-by: Eduardo Silva + +commit 2d608e5c9556cd201fe72b6db1c416f74452d6c4 +Author: Eduardo Silva +Date: Sat Jan 7 22:15:55 2012 -0300 + + Config: add details for IPv6 + + Signed-off-by: Eduardo Silva + +commit 95ef0f616c4b25ce4fde895aab33eb4670de6585 +Author: Eduardo Silva +Date: Sat Jan 7 12:12:53 2012 -0300 + + Logger: fix fake consuming, perform when the buffer is full + + Signed-off-by: Eduardo Silva + +commit 4f00640fd82912f5560cbe13a75eee873df8bfc6 +Author: Jonathan Gonzalez V +Date: Fri Jan 6 13:28:52 2012 -0300 + + Liana_ssl: Replicated the fix of Liana because it was happening here too + +commit 72a9a427bf5a8e646a8c630def85f3c94aed2db5 +Author: Jonathan Gonzalez V +Date: Fri Jan 6 13:28:25 2012 -0300 + + Liana: Fix bug #111 reported on the bug tracker of monkey + +commit c59682e46d6831ceec219103d37578ad71dee8e4 +Author: Eduardo Silva +Date: Sun Jan 1 10:21:25 2012 -0300 + + Monkey 0.30.0 + +commit d8035ebcbf071c8e59d87ff4857d163888239f12 +Author: Jonathan Gonzalez V +Date: Fri Dec 23 11:27:22 2011 -0300 + + Liana_ipv6: Plugin deprecated since we have the IPv6 support integrated in liana plugin + +commit 291356eb23d8db491b85b69dc7aafaaefa55bba7 +Author: Jonathan Gonzalez V +Date: Thu Dec 22 10:18:32 2011 -0300 + + Core: Fix mk_string_trim() it doesn't segfault when we pass a string with lenght 0 + +commit 4b5327dd99e431803bfd522d9d2889a06a98536a +Author: Jonathan Gonzalez V +Date: Thu Dec 22 10:18:03 2011 -0300 + + Liana: Fix some warnings + +commit 2cc17fdba1c174fa50f22f6b4d8d6200b8736437 +Author: Jonathan Gonzalez V +Date: Wed Dec 14 20:04:54 2011 -0300 + + Palm: Fix it to fit the new network layer + +commit f97f0932e84f0933898f9f4320b4f64ac6eb6896 +Author: Jonathan Gonzalez V +Date: Wed Dec 14 20:03:51 2011 -0300 + + Liana_ipv6: We don't need it anymore for the moment + +commit 6227a44a8b36ebfff81f8b256543f8aa710334cf +Author: Jonathan Gonzalez V +Date: Wed Dec 14 20:03:04 2011 -0300 + + Liana_ssl: Use the same way as liana to connect using ipv4 or ipv6 + +commit 5d38843cd1abecda7ad1a86f8deb6f870730791a +Author: Jonathan Gonzalez V +Date: Wed Dec 14 20:02:07 2011 -0300 + + Liana: Fix network layer to use ipv4 or ipv6 according to configuration values in monkey.c + +commit c9b217fa0e9f1c8b178c6d792759ca1fbaa6ef79 +Author: Eduardo Silva +Date: Tue Nov 15 14:36:47 2011 -0300 + + Fix double-free() on client_session when keep-alive is off + + When KeepAlive feature is set to off, Monkey was doubling free + the client_session struct, this was done in mk_http_request_end() + and also in mk_conn_write(). + + The patch removes the explicit free in mk_conn_write() and let + return mk_http_request_end() the final status. + + This issue was discovered and initially fixed with a patch + provided by "hio_ ". This new patch + handles the conditionals in a different way. + + Signed-off-by: Eduardo Silva + +commit 0cdb0e6a3513af5b1817031bf467e174a2d5e49d +Author: hio_ +Date: Tue Nov 15 13:22:58 2011 -0300 + + Fix session_request buffer size when using dynamic memory + + If the request is greater than the initial 4KB allocated, Monkey + allocate/reallocate space in the main buffer to continue reading + the incoming request, but when the buffer is full it was writing + a NULL byte outside of the buffer size, issue detected with + valgrind: + + ==25232== Invalid write of size 1 + ==25232== at 0x4045AE: mk_handler_read (mk_request.c:602) + ==25232== by 0x40A3AC: mk_conn_read (mk_connection.c:64) + ==25232== by 0x40886E: mk_epoll_init (mk_epoll.c:98) + ==25232== by 0x408E4E: mk_sched_launch_worker_loop (mk_scheduler.c:196) + ==25232== by 0x503AEFB: start_thread (pthread_create.c:304) + ==25232== by 0x533189C: clone (clone.S:112) + + This patch add one extra byte to the buffer size. + + Signed-off-by: Eduardo Silva + +commit 8b04e9377769835ee96a09cf8d027ac0b75b0d96 +Author: hio_ +Date: Tue Nov 8 17:20:47 2011 -0300 + + Fix unitialized mk_pointer passed to string builder + + Signed-off-by: Eduardo Silva + +commit 9dddd9b5c31ad34828fac1d2061daf204b1f4c96 +Author: Eduardo Silva +Date: Tue Nov 8 11:49:26 2011 -0300 + + Fix trace messages + + Signed-off-by: Eduardo Silva + +commit 0b1eb127830ac5ae90e14c3a839b2a93f93c8e55 +Merge: 8b55d76 c83ee4d +Author: Eduardo Silva +Date: Tue Nov 8 11:23:22 2011 -0300 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + + Conflicts: + plugins/liana/liana.c + +commit 8b55d769beba5dafd29f2a7bb002fe80d5b94182 +Author: Eduardo Silva +Date: Tue Nov 8 11:19:29 2011 -0300 + + Server: check server load versus capacity + + Now monkey checks the server load when a new connection arrives, + if this connection reach the limit of the current capacity, the + socket will be closed. + + This patch also fix a trace messages. + + Signed-off-by: Eduardo Silva + +commit 2a80e9f245a71a22bc08fa7e71b859df9951fc17 +Author: Eduardo Silva +Date: Tue Nov 8 10:40:17 2011 -0300 + + Liana: do not print error when socket is unavailable + + Signed-off-by: Eduardo Silva + +commit be830e0f8a4c5a53ba29abf1792247f81335b8ed +Author: Eduardo Silva +Date: Tue Nov 8 10:31:00 2011 -0300 + + Scheduler: do not print warning message on error handler + + Signed-off-by: Eduardo Silva + +commit c83ee4d9bbe9bcc4bebac37eb8c72595fbbd5496 +Author: Jonathan Gonzalez V +Date: Sat Nov 5 11:54:24 2011 -0300 + + Liana_ipv6: Fix typo + +commit afb799408661ccb68a89157c84edb7a0ee4c559d +Merge: bab5f54 c990a23 +Author: Jonathan Gonzalez V +Date: Sat Nov 5 10:42:23 2011 -0300 + + Merge branch 'master' of ssh://monkey-project.com/srv/git/monkey + +commit bab5f5455b782fb3f2f1c453ee68b68fee499a66 +Author: Jonathan Gonzalez V +Date: Sat Nov 5 10:42:02 2011 -0300 + + Liana_ssl: set ip buffer to zero + +commit c990a239aff0b90852554d5a24e6017ceba5311f +Author: Eduardo Silva +Date: Fri Nov 4 22:52:06 2011 -0300 + + Liana: set IP buffer to zero + + Signed-off-by: Eduardo Silva + +commit bae55109d52fc3aa4c28eeb587b4e731d7518bfa +Author: Eduardo Silva +Date: Fri Nov 4 22:51:48 2011 -0300 + + Websockets: force payload size + + Signed-off-by: Eduardo Silva + +commit 11fc3723601ebc0fcada915440d436925829e8b3 +Author: Jonathan Gonzalez V +Date: Fri Nov 4 18:45:21 2011 -0300 + + Liana, Liana_ssl, Liana_ipv6: free the memory for the ip text from if it returns null + +commit bec53b2586f621fc937b957c080e8d0f33edc2f9 +Author: Jonathan Gonzalez V +Date: Fri Nov 4 10:16:44 2011 -0300 + + Liana_ssl Fix plugin to match the new network layer model + +commit b4dd7ce18a1d73fd74f77aa9a974bc6ba0f2f515 +Author: Jonathan Gonzalez V +Date: Fri Nov 4 10:15:48 2011 -0300 + + Liana: Fix some arguments problem in _mkp_network_io_accept() + +commit 744bbd269cd4a0f288b5721a8cba2d2e00108fdc +Merge: 3fcd8d3 801f773 +Author: Jonathan Gonzalez V +Date: Fri Nov 4 09:50:01 2011 -0300 + + Merge branch 'master' of ssh://monkey-project.com/srv/git/monkey + +commit 3fcd8d30bd498a2d3cf7d0a5bab507f4655e2fb4 +Author: Jonathan Gonzalez V +Date: Fri Nov 4 09:46:43 2011 -0300 + + Liana: Fix bug remained of the latest network layer fixes + +commit 801f7737dbf823b56896a3245144d8d0821b2fda +Author: Eduardo Silva +Date: Thu Nov 3 23:36:44 2011 -0300 + + WebSockets: Initial plugin import + + Signed-off-by: Eduardo Silva + +commit 138f68e2aeb622a7c3a55f16ac593e3c08b30349 +Author: Eduardo Silva +Date: Thu Nov 3 22:44:21 2011 -0300 + + v0.30 begins + + Signed-off-by: Eduardo Silva + +commit 629602272f8b8efd5f216d0cc8932e1bb0644a27 +Merge: e7f3036 ad2f90a +Author: Eduardo Silva +Date: Thu Nov 3 22:43:31 2011 -0300 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit e7f303637bed20f33d66e9898755c3182cd42870 +Author: Eduardo Silva +Date: Thu Nov 3 22:43:04 2011 -0300 + + Session Request: add new connection field to the response header + + Signed-off-by: Eduardo Silva + +commit ad2f90a2bdc0b175398ff5ddb327973e4dd69e0a +Author: Jonathan Gonzalez V +Date: Wed Nov 2 22:07:44 2011 -0300 + + Logger: Use of the new function socket_ip_str() provided by the API to obtain the text form of the IP address. + Mandril: Obtain the in_addr from the socket to use it. This propose some new issues like, should our network layer provide more info necessary for plugins like Mandril? + Palm: Use of the new function socket_ip_str() provided by the API to obtain the text from of the IP address. + +commit 3aab2cd6fc82c33bbf4a18cd06d308f308fa1790 +Author: Jonathan Gonzalez V +Date: Wed Nov 2 22:02:51 2011 -0300 + + Removed ipv4 element from struct sched_connections. + Removed ipv4 element from struct client_session. + +commit 53ab1b86e5e9a8ddcc74d922325943480dcc8c3a +Author: Jonathan Gonzalez V +Date: Wed Nov 2 21:54:30 2011 -0300 + + Added new function to the network layer: mk_socket_ip_str(), for now this function will replace mk_socket_get_ip() but in the future it may be renamed to mk_socket_get_ip_str(). + Removed the old mk_socket_get_ip() to prove that no one use it. + Removed the argument of type sockaddr and sockaddr_in in a few functions because they were unnecessary. + Match new arguments in mk_server.c + Liana: Added new function _mkp_network_io_ip_str() to provide the new required function. + Liana: Clean all the functions that use arguments of type sockaddr and sockaddr_in to match new arguments. + Liana_ipv6: Clean up of the code and removed some comment lines. + Liana_ipv6: Added new function _mkp_newtwork_io_ip_str() to provide the new required function. + Liana_ipv6: Clean all the funtions that use arguments of type sockaddr and sockaddr_in to match new arguments. + +commit d97ff6ab7fddc0cae88dd26c318365735e07c948 +Author: Jonathan Gonzalez V +Date: Wed Nov 2 21:46:27 2011 -0300 + + Liana_ipv6: Fixed name of the so object + +commit aa57e510f28e695ac6a6d045ea49f65a4f93ce6f +Author: Eduardo Silva +Date: Mon Oct 31 18:30:12 2011 -0300 + + Monkey API Manpage (draft) + + Signed-off-by: Eduardo Silva + +commit ecdd29f441d6fec9ccc957cf1ef1173695770fb2 +Author: Eduardo Silva +Date: Mon Oct 31 18:17:41 2011 -0300 + + mk_header_get() now use different parameters + + Signed-off-by: Eduardo Silva + +commit e05ff7883af0b57e33e7c3af23f913b0e29cbea5 +Author: Eduardo Silva +Date: Mon Oct 31 13:02:57 2011 -0300 + + Core/API: now support custom response status + + Signed-off-by: Eduardo Silva + +commit 8752906e72caf9c73472fe59a341cd00e8106263 +Author: Eduardo Silva +Date: Sun Oct 30 14:52:20 2011 -0300 + + STAGE_30 plugins now can handle requests with unknown HTTP methods + + Signed-off-by: Eduardo Silva + +commit 33e546f4d5bed08279bf3aa2bafa9b2f8b9ed44a +Author: Eduardo Silva +Date: Sun Oct 30 13:54:34 2011 -0300 + + Listen for PUT and DELETE methods + + Signed-off-by: Eduardo Silva + +commit 98ffb705b7489d7fbd158ed01914496e7082294b +Author: Eduardo Silva +Date: Wed Oct 26 14:13:32 2011 -0300 + + Lists: fix mk_list_entry_next() macro + + Signed-off-by: Eduardo Silva + +commit 00fd080e47bd817a072311fdc946e951dedfba18 +Author: Eduardo Silva +Date: Fri Oct 21 13:31:40 2011 -0300 + + Monkey 0.21.0 + +commit 78b750df798539a31ef36685857d3f44c68e8744 +Author: Jonathan Gonzalez V +Date: Thu Oct 20 20:26:06 2011 -0300 + + Liana_ipv6: Removed DISABLED since we don't need it but we want to aim users to use it + +commit 58d23d4ad3cc68fa613edd6eabf27b8ada41696e +Merge: 667fc70 9a0289d +Author: Jonathan Gonzalez V +Date: Thu Oct 20 20:18:55 2011 -0300 + + Merge branch 'master' of ssh://monkey-project.com/srv/git/monkey + +commit 667fc70afcb8791db3876dda79a65903c7d1a4a2 +Author: Jonathan Gonzalez V +Date: Thu Oct 20 20:17:55 2011 -0300 + + Liana_ipv6: New plugin to support IPv6, very experimental but it can be used! + +commit 9a0289d86d33a9684e871ca7f5b1ce84f2a3df5f +Author: Eduardo Silva +Date: Fri Oct 14 08:37:38 2011 -0300 + + Fix compiling issues + + Signed-off-by: Eduardo Silva + +commit a72cea2c143de4fdb4c6d97e2676f0fa96104abf +Author: Eduardo Silva +Date: Wed Oct 12 17:39:32 2011 -0300 + + Monkey 0.20.3 + +commit 8014c83141c5cb9e6091b78571ab934473123bdc +Author: Eduardo Silva +Date: Wed Oct 12 17:15:06 2011 -0300 + + Debian: Add manpage + Debian: Fix changelog + Debian: Fix copyright + + Signed-off-by: Eduardo Silva + +commit 1862e52d967ceb173fa1915dac994836981da3c4 +Author: Eduardo Silva +Date: Wed Oct 12 14:52:52 2011 -0300 + + update to v0.20.3 + + Signed-off-by: Eduardo Silva + +commit 2026084af05646f8ffbad0795a6b354dc7395c75 +Author: Eduardo Silva +Date: Wed Oct 12 14:47:32 2011 -0300 + + Debian: add monkey init script + + Signed-off-by: Eduardo Silva + +commit bc3831ae4bfa5f3157ef6d1f398a4d60ebff704f +Author: Eduardo Silva +Date: Wed Oct 12 14:40:19 2011 -0300 + + Liana_SSL: auto-unload if the plugin is not being used as transport layer + + Signed-off-by: Eduardo Silva + +commit d92ff319d01da216db2ad477d8370cc351166de0 +Author: Eduardo Silva +Date: Wed Oct 12 12:33:23 2011 -0300 + + Debian: add liana_ssl + + Signed-off-by: Eduardo Silva + +commit f938511e822140ee3887ba96e1edf99737bf7721 +Author: Eduardo Silva +Date: Tue Oct 11 23:27:27 2011 -0300 + + Debian: cleanup + + Signed-off-by: Eduardo Silva + +commit 94b3ddaab676ae8092295b24a1464863b8ccc606 +Author: Eduardo Silva +Date: Tue Oct 11 23:26:14 2011 -0300 + + Debian: add debian build script + + Signed-off-by: Eduardo Silva + +commit 7cb548202932581834a7ba1710652d30ae537e63 +Author: Eduardo Silva +Date: Tue Oct 11 23:21:10 2011 -0300 + + Add Debian rules + + Signed-off-by: Eduardo Silva + +commit 511b95b91bb9ea65c9edb18972bf59d9e64adbf5 +Author: Eduardo Silva +Date: Mon Oct 10 20:48:26 2011 -0300 + + Monkey 0.20.2 + +commit 5d4d8f87ba456706aeb9b2bf3f801f84bd979299 +Author: Eduardo Silva +Date: Sat Oct 8 21:56:43 2011 -0300 + + Dirlisting: reduce one malloc and validate headers return + + Signed-off-by: Eduardo Silva + +commit 9950abe71bce2750c41cb9e829b18a81a1e34f90 +Author: Eduardo Silva +Date: Thu Oct 6 10:02:22 2011 -0300 + + Logger: Redirect stderr to master log when going into background mode + + Signed-off-by: Eduardo Silva + +commit 6ac8ca050490f2f427ae9ee5a4fcff452228cf3c +Author: Eduardo Silva +Date: Thu Oct 6 01:20:11 2011 -0300 + + Logger: improve fake consumer + + Signed-off-by: Eduardo Silva + +commit ff70e0ce84f9b5add3bb7e4bcd961357bc027e1d +Author: Eduardo Silva +Date: Wed Oct 5 21:25:44 2011 -0300 + + Logger: consume pipe end if cannot write to log file when the buffer is full + + Signed-off-by: Eduardo Silva + +commit 590725131767ff0160ec937c7a2d1df053379910 +Author: Eduardo Silva +Date: Wed Oct 5 19:52:56 2011 -0300 + + Fix #80: Detect non-writable logfiles for logger plugin + + This patch does the following: + + - If master log file was defined and Monkey goes into background + mode, the target file *must* be writable. Otherwise Monkey will + exit. + - Master log now is enabled by default. + - Fix mk_print(), now it flush() the stdout. + + Signed-off-by: Eduardo Silva + +commit f4b290f856eebfc27a6085504c9f5b7b3c559e6d +Author: Eduardo Silva +Date: Wed Oct 5 19:10:37 2011 -0300 + + Update configure to v0.20.2 + + Signed-off-by: Eduardo Silva + +commit 0dfdf9d5605cdd76ba7783413c97e165f912fb84 +Author: Eduardo Silva +Date: Wed Oct 5 19:09:34 2011 -0300 + + Fi #78: Error in the balancing between workers + + This patch makes the scheduler to increment the sched node counter + after the socket is added to the thread worker through mk_epoll_add(). + + Signed-off-by: Eduardo Silva + +commit 8e283a0a6616866c503c4654327a45c320fc319c +Author: Eduardo Silva +Date: Mon Oct 3 09:55:57 2011 -0300 + + Monkey 0.20.1 + +commit e7822845c0eb2f4bb7276d21f95ad5bafc30c795 +Author: Eduardo Silva +Date: Mon Oct 3 09:49:06 2011 -0300 + + Fix #75: Handle DT_UNKNOWN in struct dirent *ent->d_type. by Gatling + + Signed-off-by: Eduardo Silva + +commit bb0bf026cc2aecf99309fef0b25b8d1e440b7a05 +Author: Eduardo Silva +Date: Sun Oct 2 23:49:10 2011 -0300 + + Fix #74: chunked encoding in dirlisting is broken + + When HTTP/1.1 was used, dirlisting was counting the ending CRLF as + part of the chunk length. This patch set's the proper chunk length + and add the ending CRLF after set the chunk data. + + Signed-off-by: Eduardo Silva + +commit 7a86a147021523d9c867c77f15b0467d93c8e699 +Author: Eduardo Silva +Date: Sun Oct 2 15:16:32 2011 -0300 + + Dirlisting: use API mem_free instead of mk_mem_free() + + Signed-off-by: Eduardo Silva + +commit 5396125684ec6381ac53e2625b004e01d19867d8 +Author: Eduardo Silva +Date: Sun Oct 2 12:08:37 2011 -0300 + + Fix #76: dirlisting returns nothing for HTTP/1.0 request + + When creating an 'iov' with mk_iov_create() and using an offset, + the entries before the offset index were not set to len=0 and + buf=NULL. This patch fix that issue and makes the dirlisting + plugin work as expected. + + Signed-off-by: Eduardo Silva + +commit c265bb057482e39eab74646c8259615430efd0ca +Author: Eduardo Silva +Date: Sun Oct 2 09:42:23 2011 -0300 + + Fix ticket #77: 100% CPU usage after having broken connection + + When sending a static file content fails due to a broken + connection, mk_http_send_file() now returns EXIT_ABORT to finalize + the client session. + + Signed-off-by: Eduardo Silva + +commit 5a3a09aa1660f0c34418ccba828c9199418f09b0 +Author: Eduardo Silva +Date: Sat Oct 1 01:38:19 2011 -0300 + + Monkey 0.20.0 + +commit 05e5cb8fa4f1719d694c50c5f0af5c1bab954588 +Author: Eduardo Silva +Date: Sat Oct 1 01:32:39 2011 -0300 + + Palm: improve buffer proxy handler + + Signed-off-by: Eduardo Silva + +commit bbb2646a87db8356f26dd57406c40a795ea20c33 +Merge: c0a4669 6fc7ae1 +Author: Eduardo Silva +Date: Thu Sep 15 23:04:04 2011 -0300 + + Liana_ssl: fix merge conflict + + Signed-off-by: Eduardo Silva + +commit c0a466945b0601675b0eddf416a8563155166bed +Author: Eduardo Silva +Date: Thu Sep 15 23:00:34 2011 -0300 + + Update favicon + + Signed-off-by: Eduardo Silva + +commit 10c3eb27f4f9719c030419fa7cef0b0d09815c0f +Author: Eduardo Silva +Date: Thu Sep 15 22:59:04 2011 -0300 + + Epoll: use level triggered mode + Palm : use epoll level triggered mode + + Signed-off-by: Eduardo Silva + +commit 6fc7ae1e80a11417b3c8cf3c20578907113126b6 +Author: Davidlohr Bueso +Date: Sun Sep 11 16:40:26 2011 -0300 + + introduce ARRAY_SIZE macro + + Compute the amount of elements in an array with this. + +commit 08d915cdc61e44713ff4f0ccfbfe967632414d13 +Author: Davidlohr Bueso +Date: Wed Sep 7 12:10:12 2011 -0300 + + unlink: check syscall return status + + This allows to unmask bugs. + +commit d63e174440d4a0252979c8addf373ab4909bec46 +Author: Davidlohr Bueso +Date: Tue Sep 6 12:29:12 2011 -0300 + + fix use before init + + When changing the process' user, we are setting resource limits with unitialized values, thus producing an error when calling setrlimit(2). + We need to first get the limits, then reset them with the current = max value changes. This patch also does some trivial function refactoring. + +commit abe748dd12da0475c760ecf30c9208339af5186f +Author: Davidlohr Bueso +Date: Sat Sep 3 13:02:41 2011 -0300 + + remove file boolean values + + There's absolutely no reason to have specific true/false values for file specific operations. Simply use those defined in mk_macros. + +commit 0e04224b855b24c5508d7378c174be1c195c5eff +Author: Davidlohr Bueso +Date: Sat Sep 3 12:57:19 2011 -0300 + + correct time + + The month member of the tm structure (broken down by localtime()) uses the [0, 11] range. We need to add + one to this variable, otherwise incorrect dates will appear: + + dave@offbook:~/projects/monkey-dev$ date + Wed Aug 31 02:40:01 CLST 2011 + dave@offbook:~/projects/monkey-dev$ bin/monkey + Monkey HTTP Daemon 0.20.0 + Built : Aug 31 2011 00:05:39 (gcc 4.5.2) + Home : http://www.monkey-project.com + * Process ID is 9900 + * Server socket listening on Port 2001 + * 5 threads, 101 client connections per thread, total 505 + * Transport layer by liana in http mode + [2011/07/31 02:40:10] [ Info] HTTP Server started + ^^ + +commit bbfe65f3e0fa6fdfda96d06b21963bb6910405ff +Author: Jonathan Gonzalez V +Date: Mon Aug 22 16:00:29 2011 -0300 + + Liana_ssl: Added MATRIX_HEADERS to the Makefile.in file, and removed MATRIX_LIBS from the objects line + +commit fb8e8b153fac54fca73dbcdfafc367354cf29ac0 +Author: Eduardo Silva +Date: Sat Aug 20 17:15:03 2011 -0400 + + Add missing headers: mk_socket, mk_signals, mk_server + + Signed-off-by: Eduardo Silva + +commit 6759f328634c1eb20bcd619524798f0e1baa82ca +Author: Eduardo Silva +Date: Sat Aug 20 17:12:46 2011 -0400 + + Add missing mk_string.h + + Signed-off-by: Eduardo Silva + +commit 8f03c0b52cc2aa9394b5fdd72997db56c3584af9 +Author: Eduardo Silva +Date: Sat Aug 20 17:12:17 2011 -0400 + + Fix chunk size + + Signed-off-by: Eduardo Silva + +commit 805aff2c3dc19f3f5b571bfb0e405ac1d214e655 +Author: Eduardo Silva +Date: Sat Aug 20 15:50:05 2011 -0400 + + Palm: do not use chunked transfer encoding on redirection status + + Signed-off-by: Eduardo Silva + +commit 0a73bb565e5861a3d16e590955c4c62ed849eff6 +Author: Eduardo Silva +Date: Sat Aug 20 15:27:01 2011 -0400 + + Epoll: always process EPOLLIN or EPOLLOUT before EPOLLERR/EPOLLHUP + Scheduler: on remove client, always close remote file descriptor + + Signed-off-by: Eduardo Silva + +commit 1f3ae21ddecd675cd16c330d6e032781692e22e1 +Author: Eduardo Silva +Date: Fri Aug 19 21:46:52 2011 -0400 + + Fix inclusion header in mk_utils.h + + Signed-off-by: Eduardo Silva + +commit df265fc456905e9dae15366307db60053863dcd5 +Author: Eduardo Silva +Date: Fri Aug 19 21:44:21 2011 -0400 + + Prefix source code files and headers with 'mk_' + + Signed-off-by: Eduardo Silva + +commit cd8fad5a5eeabf0f51894f2ab498eee12e638955 +Merge: 0db9f4e 3a7a69b +Author: Eduardo Silva +Date: Fri Aug 19 20:29:42 2011 -0400 + + Merge branch 'sched_add_event' + +commit 3a7a69bd940fd4432e0214edcb77e6a3205deaf6 +Author: Eduardo Silva +Date: Fri Aug 19 20:29:30 2011 -0400 + + rename limits.h to mk_limits.h + + Signed-off-by: Eduardo Silva + +commit 202e2077b4861deac779a9631f4f0778f3480ee0 +Author: Eduardo Silva +Date: Fri Aug 19 20:28:48 2011 -0400 + + New sched add event core + + Signed-off-by: Eduardo Silva + +commit 0db9f4e6417ac2b0cdad307b21bc6c374b5a24ff +Author: Eduardo Silva +Date: Sat Jul 23 13:00:18 2011 -0400 + + Rename limits.h to mk_limits.h + + Signed-off-by: Eduardo Silva + +commit 49e73b5fc5406dc19ae3be3e16ad9bbb6f9a36b7 +Author: Eduardo Silva +Date: Thu Jun 30 16:11:21 2011 -0400 + + New cycle: v0.20.0 - Maduro frito con queso + + Signed-off-by: Eduardo Silva + +commit a72f658121900f75fc8e948e6d57903a1dff0392 +Author: Eduardo Silva +Date: Thu Jun 30 13:58:51 2011 -0400 + + mconf: add index.php to Indexfile by default + + Signed-off-by: Eduardo Silva + +commit bb23d5f67b2c6da2f214287b319260fb9d35e015 +Author: Christian Stankowic +Date: Thu Jun 30 08:56:24 2011 -0400 + + Banana: add missing 'status' command in help output + + Signed-off-by: Eduardo Silva + +commit 8bdbcc5009c4ecda0ae60089943a5a233a83f6be +Author: Eduardo Silva +Date: Wed Jun 29 08:51:12 2011 -0400 + + Banana: add missing status command + + Signed-off-by: Eduardo Silva + +commit 8042b2a807fec6771e1209b78c64a5ca832ea150 +Author: Eduardo Silva +Date: Wed Jun 29 08:46:49 2011 -0400 + + Configure: add missing changes for banana script + + Signed-off-by: Eduardo Silva + +commit 34806c72b0e9a1ac310a0edd66e31829516b3714 +Author: Christian Stankowic +Date: Wed Jun 29 08:42:15 2011 -0400 + + Configure: deprecate old cgi-bin stuff + + Signed-off-by: Eduardo Silva + +commit af6230e1c64b5250eb7a00211b6cd75b1e85f789 +Author: Eduardo Silva +Date: Wed Jun 29 08:33:39 2011 -0400 + + Palm: use new IP mechanism + + Signed-off-by: Eduardo Silva + +commit d6fce0889a3158dc4ba412b642a25738d7dfd1d9 +Author: Eduardo Silva +Date: Mon Jun 27 12:15:48 2011 -0400 + + Core: use epoll LEVEL_TRIGGERED mode + + Monkey events handler was using the EDGE_TRIGGERED (EPOLLET) for the + sockets file descriptors, also doing an unnecessary ioctl() to FIONREAD, + this was causing an extra load which can be avoided with LEVEL_TRIGGERED + and doing some better handling of buffers to read() incoming data. + + This patch also fix an unset new_size counter when reallocating the read + buffer. + + Signed-off-by: Eduardo Silva + +commit 3dcf0ed8c84d0c4e2bc26ce01188d84b1f9498cf +Author: Eduardo Silva +Date: Sun Jun 26 23:09:48 2011 -0400 + + Auth/mkpasswd: fix password store when adding new users + + Signed-off-by: Eduardo Silva + +commit 60bff1488422cfe843213f74c4c3afa2cdb249f3 +Author: Eduardo Silva +Date: Sun Jun 26 13:10:18 2011 -0400 + + Exit properly when TransportLayer is not defined + + Signed-off-by: Eduardo Silva + +commit 5f63717867ab301f47421492da575bf4aa2ba530 +Author: Eduardo Silva +Date: Sun Jun 26 12:46:37 2011 -0400 + + Liana_SSL: memory copy of confdir parameter + + Signed-off-by: Eduardo Silva + +commit 177ff1a29afb90b234e9d5950b328167a7bf78ea +Author: Eduardo Silva +Date: Sun Jun 26 12:43:03 2011 -0400 + + Liana_SSL: fix liana_conf() parameter + + Signed-off-by: Eduardo Silva + +commit 297b2a7050e09aa0f7261d6f9b17ec74efc6d867 +Author: Eduardo Silva +Date: Sun Jun 26 12:41:26 2011 -0400 + + Liana_SSL: main setup now is done in _mkp_core_prctx() hook + + Signed-off-by: Eduardo Silva + +commit 473b1db4542d351b6ed6af14c25230d9770ab57d +Author: Eduardo Silva +Date: Sun Jun 26 12:03:07 2011 -0400 + + New TransportLayer directive in monkey.conf + + This new directive provides to each [SERVER] section the capability to + define which transport layer the core server will use. The value of the + key is the shortname of one of the network I/O plugin defined in the + configuration file plugins.load. + + Please check the following example for the file monkey.conf: + + To provide just HTTP use: + + TransportLayer liana + + To provide SSL over HTTP (https): + + TransportLayer liana_ssl + + Signed-off-by: Eduardo Silva + +commit 304e89e44c3a3505445ede1447cc56defd686bc5 +Author: Eduardo Silva +Date: Sat Jun 25 11:47:51 2011 -0400 + + Cheetah: add active connections to worker command + + Signed-off-by: Eduardo Silva + +commit fbdc9edf1cbeaa1a004001117a71eb57f620b031 +Author: Eduardo Silva +Date: Sat Jun 25 09:28:43 2011 -0400 + + Logger: format IP address from network address in_addr + + Signed-off-by: Eduardo Silva + +commit 196e77cf51c8a05deefd65e6d822527700b997b4 +Author: Eduardo Silva +Date: Sat Jun 25 09:16:02 2011 -0400 + + Scheduler: do not bug_on when sched_node is NULL (premature close) + + Signed-off-by: Eduardo Silva + +commit 204e503dec5928b748e2c75184d7300b9b65d847 +Author: Eduardo Silva +Date: Sat Jun 25 09:14:40 2011 -0400 + + Mandril: validate IP with new Monkey scheduler info 'in_addr' data + + Signed-off-by: Eduardo Silva + +commit f191d6502d1ea91fc9f08a1cb8e0f874069d5f32 +Author: Eduardo Silva +Date: Fri Jun 24 23:44:20 2011 -0400 + + Scheduler: store in_addr info instead of IPv4 string + + When a connection arrives, the scheduler assign the new connection + to a sched node which hold information about the connection. Previous + this patch, it used to store the IP address in a common string, now + we just store the data in 'struct in_addr' format. + + This also reduce the memory used by Monkey as the previous model holds + in memory buffers for each possible incomming network address. The + memory usage is reduced in about 20KB. + + Signed-off-by: Eduardo Silva + +commit 37d91ae6b85a8f37d94f6c08fca3215f2ac2363a +Author: Felipe Astroza +Date: Fri Jun 24 22:29:06 2011 -0400 + + [PATCH] mk_sched_add_client() does not increment active_connections. Issue solved + + Signed-off-by: Eduardo Silva + +commit 4dc835695c2afc587082f7df24e14d958172b9de +Author: Felipe Astroza +Date: Fri Jun 24 21:36:00 2011 -0400 + + [PATCH] Useless mutex in mk_sched_launch_thread() deleted. + + A more convenient use for mk_sched_register_thread() to avoid search the thinfo structure in sched_list. + Memory leak in mk_sched_launch_thread() fixed. + + Signed-off-by: Eduardo Silva + +commit 46b0505de7de3ecd2d873529f4af5c31675bc6c3 +Author: Eduardo Silva +Date: Fri Jun 24 12:26:51 2011 -0400 + + Mandril: new rules model + + Now mandril plugin restrict IP address by specific ip or through + a defined subnet, the new configuration model looks like: + + [RULES] + Deny_IP 10.20.1.27 + Deny_IP 192.168.1.0/24 + Deny_URL /imgs + + Signed-off-by: Eduardo Silva + +commit 133d40a60ab0368daff5213113d3c7c4b29f3ca4 +Author: Eduardo Silva +Date: Wed Jun 22 08:24:41 2011 -0400 + + Update TODO List + + Signed-off-by: Eduardo Silva + +commit 348ec85e1e0b027e8423957902962b66685c232f +Author: Eduardo Silva +Date: Mon Jun 20 16:31:54 2011 -0400 + + Liana_SSL: New version 0.2, view full log for details + Liana_SSL: New Makefile macros MATRIX_LIBS and MATRIX_HEADERS + Liana_SSL: Validate MatrixSSL version, requires >= 3.2.0 + Liana_SSL: Extra validation messages for certificate + + Signed-off-by: Eduardo Silva + +commit a59dd35394d168897f3456da1534fd4c2c6b6422 +Author: Eduardo Silva +Date: Mon Jun 20 12:40:43 2011 -0400 + + Rename macro unlikely to mk_unlikely + + Signed-off-by: Eduardo Silva + +commit f72b9bda71acb7e3fa2e75e6200eecc15eddf76d +Author: Eduardo Silva +Date: Mon Jun 20 10:42:16 2011 -0400 + + Liana_SSL: Fix Makefile.in to avoid recompile if objects have not changed + + Signed-off-by: Eduardo Silva + +commit d003ab6784bf455f1ab3a51a82ff05776c38120d +Author: Eduardo Silva +Date: Fri Jun 17 14:46:54 2011 -0400 + + Palm: Fix Makefile.in to avoid recompile if objects have not changed + + Signed-off-by: Eduardo Silva + +commit f71044a942b560ff8665f68ce304cb9f86476f70 +Author: Eduardo Silva +Date: Fri Jun 17 14:44:19 2011 -0400 + + Auth: Fix Makefile.in to avoid recompile if objects have not changed + + Signed-off-by: Eduardo Silva + +commit 0aba529d1ec25a2d4d1d875625c400e0bd029125 +Author: Eduardo Silva +Date: Fri Jun 17 09:51:10 2011 -0400 + + Config: deprecate strtok_*() + Config: EXIT_FAILURE on error + + Signed-off-by: Eduardo Silva + +commit 724a3215439fcc51d7a1fa005ed4fab97acc3cce +Author: Eduardo Silva +Date: Thu Jun 16 23:22:00 2011 -0400 + + Plugin: just validate network plugin in TRACE mode + + Signed-off-by: Eduardo Silva + +commit 1696e4afa7b676a576ac088b70219182347424f2 +Author: Eduardo Silva +Date: Thu Jun 16 17:50:40 2011 -0400 + + Configure: fix patch level grr + + Signed-off-by: Eduardo Silva + +commit 7b2d28c4ca9140894767d0349b5650ba3f32a359 +Author: Jacques-D. Piguet +Date: Thu Jun 16 17:48:03 2011 -0400 + + Banana: get port and pid file from the config file + + Signed-off-by: Eduardo Silva + +commit f0a324df97edcc4ae78910a8b0ff2f8040ea5b09 +Author: Eduardo Silva +Date: Wed Jun 15 22:41:50 2011 -0400 + + Daemon/Setuid: fix umask for files and seteuid undo routine + + Signed-off-by: Eduardo Silva + +commit 777624a0a9dedba70cbf9f80b10d425a52b86f4a +Author: Eduardo Silva +Date: Wed Jun 15 17:27:21 2011 -0400 + + Configure: just 'install' command strip binaries + + Signed-off-by: Eduardo Silva + +commit 39a2a5763f381abb4b992725ec8f1c6803e27cd3 +Author: Eduardo Silva +Date: Wed Jun 15 08:27:23 2011 -0400 + + Fix Background mode: parent exit with EXIT_SUCCESS + + Signed-off-by: Eduardo Silva + +commit cacc5bf3b272dfbbcb1293d321b373c0fbd70250 +Author: Eduardo Silva +Date: Tue Jun 14 22:31:25 2011 -0400 + + file_info: add boolean field is_file + + Signed-off-by: Eduardo Silva + +commit 0871673bfdf36ff0c68af786f004c5298c4eb020 +Author: Eduardo Silva +Date: Tue Jun 14 22:27:14 2011 -0400 + + Auth: read users credentials and validate on-fly + + Signed-off-by: Eduardo Silva + +commit d46a7a41c18c53f5887a42a550249b5003f3ba98 +Author: Eduardo Silva +Date: Mon Jun 13 22:50:57 2011 -0400 + + Auth: associate locations and users with virtual hosts + + Signed-off-by: Eduardo Silva + +commit 2d8429351d019d8606dd6a0a0ae51cea62f03b8c +Author: Eduardo Silva +Date: Sun Jun 12 22:39:55 2011 -0400 + + Auth: initial import + + Signed-off-by: Eduardo Silva + +commit 1a714b5e99fdcad949ae4e9179b9aa3f1b21b84e +Author: Eduardo Silva +Date: Sun Jun 12 13:01:05 2011 -0400 + + Palm: move plugin from EXPERIMENTAL to DISABLED + + Signed-off-by: Eduardo Silva + +commit 10f7def8eb52d80816d441daa24fd313310449b9 +Author: Eduardo Silva +Date: Wed Jun 8 23:45:06 2011 -0400 + + Palm: Fix CGI headers and better event management + + Signed-off-by: Eduardo Silva + +commit 35cebc67fe19d5436d5c03c0fa70f23989cb0604 +Author: Eduardo Silva +Date: Mon May 16 14:14:02 2011 -0400 + + Palm: add ending CRLFCRLF to palm request + + Signed-off-by: Eduardo Silva + +commit 5e53b7014cff6d5c1d023b2c3bf1d4dae57d4acb +Author: Eduardo Silva +Date: Sat May 14 08:51:55 2011 -0400 + + Liana_SSL: fix usage of api->file_get_info() + + Signed-off-by: Eduardo Silva + +commit 3b29ce2ffa807041c56e4eb3511f3e977d781649 +Author: Eduardo Silva +Date: Sat May 14 08:31:03 2011 -0400 + + Minor messages + + Signed-off-by: Eduardo Silva + +commit d41967a0e5abba26a95cb790bccae3bbbf608192 +Author: Eduardo Silva +Date: Wed May 11 17:21:14 2011 -0400 + + Palm: add REMOTE_PORT CGI variable + + Signed-off-by: Eduardo Silva + +commit 4b80c14f89dba7f2fd5f5befdd0e8c41c0a6c62d +Author: Eduardo Silva +Date: Wed May 11 16:44:35 2011 -0400 + + Config: export server socket in config struct + + Signed-off-by: Eduardo Silva + +commit 5a7589a8171e548e65c73370048e2f5ecd0b7082 +Author: Eduardo Silva +Date: Wed May 11 16:43:38 2011 -0400 + + Palm: complete CGI headers for palm request + + Signed-off-by: Eduardo Silva + +commit 284caee49b977dd932b1a63e2926728a29c9d5e8 +Author: Eduardo Silva +Date: Wed May 11 12:51:24 2011 -0400 + + Fix host_alias setup + + Signed-off-by: Eduardo Silva + +commit a651b6b2aa519570bebef426feed2e4d6a1fc850 +Author: Eduardo Silva +Date: Mon May 9 23:01:12 2011 -0400 + + Palm: new template request + + Signed-off-by: Eduardo Silva + +commit 2c071b07768ed75c53525e9a55d88c54f8e34c10 +Author: Eduardo Silva +Date: Mon May 9 11:13:02 2011 -0400 + + Fix headers_toc size in session_request struct + + Signed-off-by: Eduardo Silva + +commit 35074388b8358119e0d565e2bbd18ecfd375161c +Author: Eduardo Silva +Date: Mon Apr 18 14:13:20 2011 -0400 + + Do iov_add_entry() inline function + + Signed-off-by: Eduardo Silva + +commit a877cd3396e1298b80c2b864c77e1ef6c6432b58 +Author: Eduardo Silva +Date: Fri Apr 15 14:11:53 2011 -0400 + + Fix some trace messages + + Signed-off-by: Eduardo Silva + +commit e12a7f8f7951602bd36b1c38b2567ef77ccff9c3 +Author: Eduardo Silva +Date: Fri Apr 15 11:43:27 2011 -0400 + + Cheetah: fix workers command + + Signed-off-by: Eduardo Silva + +commit 2707c427162cfe651c48490583dd62b2856b66e2 +Author: Eduardo Silva +Date: Fri Apr 15 11:33:46 2011 -0400 + + Request: reuse session_request on non-keepalive request + + A new static field has been added to client_session struct called + sr_fixed, which aims to provide an already allocated space for + normal and keep alive request. If the request is NOT pipelined, + we are not allocating new memory anymore under the same + client_session. + + Signed-off-by: Eduardo Silva + +commit 0f11f5b157ad8e0f8abe1ca43456d15ef87e928e +Author: Eduardo Silva +Date: Fri Apr 15 09:18:13 2011 -0400 + + Little cleanup + + Signed-off-by: Eduardo Silva + +commit 4452b7bb44f492b8fead0a63ed821c2128f9e2f7 +Author: Eduardo Silva +Date: Thu Apr 14 08:12:07 2011 -0400 + + Scheduler: export sched node to worker scope through thread_key + + Inside a worker, they are multiple calls to the function + mk_sched_get_thread_conf() which returns the sched node associated + to the worker in question. Previously this function was matching + each scheduler node information with the thread ID, now the + function knows the sched node through a thread_key avoiding + 'for' cycles and multiple comparissons. + + Signed-off-by: Eduardo Silva + +commit 5ddd71421893b317512fad69fe5af2904f95d183 +Author: Eduardo Silva +Date: Wed Apr 13 11:14:05 2011 -0400 + + Fix mk_sched_update_conn_status(): search in the whole queue + + Signed-off-by: Eduardo Silva + +commit 674ff58696c101e9028867b1cee62a0a5e386b9a +Author: Eduardo Silva +Date: Tue Apr 12 19:49:54 2011 -0400 + + Optimize headers TOC parser + + Signed-off-by: Eduardo Silva + +commit dc05977f9c1c766fd480c2ab0f0ba167a805b22a +Author: Eduardo Silva +Date: Tue Apr 12 10:03:55 2011 -0400 + + mk_socket_get_ip() now returns ip string length + + Signed-off-by: Eduardo Silva + +commit e574070645d9206b942a022989fa232abc7aef57 +Author: Eduardo Silva +Date: Mon Apr 11 06:43:12 2011 -0400 + + Scheduler optimization + + Signed-off-by: Eduardo Silva + +commit a1938b427dad13b90a432924d840349946edc73e +Author: Eduardo Silva +Date: Sat Apr 9 23:55:52 2011 -0400 + + Validate return of setsockopt() + + Signed-off-by: Eduardo Silva + +commit bddacdf81b5b36835e325594c07d4e6af8bf62aa +Author: Eduardo Silva +Date: Sat Apr 9 23:38:22 2011 -0400 + + Server socket now use TCP_DEFER_ACCEPT socket option + + Signed-off-by: Eduardo Silva + +commit 9fd8b15d41cdf1ed3db27c9d670ecae5cb34c45d +Merge: fb01bca d64c8b7 +Author: Eduardo Silva +Date: Thu Apr 7 16:23:19 2011 -0400 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit fb01bca5fe5384827a9b36276d46dc9af76dd7d2 +Author: Eduardo Silva +Date: Thu Apr 7 16:21:26 2011 -0400 + + Palm: remove unused headers by Monkey + + Signed-off-by: Eduardo Silva + +commit d64c8b7ccd3c22906e3d3f257c01a57e00e5f044 +Merge: 73b7302 2d408ca +Author: Jonathan Gonzalez V +Date: Thu Apr 7 15:47:52 2011 -0300 + + Merge branch 'master' of ssh://monkey-project.com/srv/git/monkey + +commit 73b73026cbf380066063c079cc7d1900383fe135 +Author: Jonathan Gonzalez V +Date: Thu Apr 7 15:47:45 2011 -0300 + + Added macros to calculate sub-net,broadcast and network using the ip address on sock_addr + +commit 2d408ca9d59484661975be9aa332cafacd3fc139 +Author: Eduardo Silva +Date: Thu Apr 7 11:54:14 2011 -0400 + + Limit hostname aliases length to 64 bytes + + Signed-off-by: Eduardo Silva + +commit f09a72dd06a031c5faf7e836ea843c582fe0276d +Author: Eduardo Silva +Date: Thu Apr 7 11:46:30 2011 -0400 + + Force config hostnames to lowercase + + Signed-off-by: Eduardo Silva + +commit 2fd9dfbfd7a9389d488da02b7a4df9151346e102 +Author: Eduardo Silva +Date: Thu Apr 7 10:31:23 2011 -0400 + + Reponse headers now are static allocated inside session_request + + Signed-off-by: Eduardo Silva + +commit 40bcb02f6dc5acc1abe8e261459e84bc7dc1fd4f +Author: Eduardo Silva +Date: Thu Apr 7 09:04:02 2011 -0400 + + New client_session->body_fixed for common small requests + + Signed-off-by: Eduardo Silva + +commit ad8624255ed1696bab49c2b29d85701bf8705b2d +Author: Eduardo Silva +Date: Thu Apr 7 08:51:37 2011 -0400 + + Pass sched node on mk_session_create + + Signed-off-by: Eduardo Silva + +commit 20c016d61defab73e049fbe520e0fa0f462fe5b4 +Author: Eduardo Silva +Date: Thu Apr 7 08:05:19 2011 -0400 + + Fix recently introduced overflow when parsing Host header + + Signed-off-by: Eduardo Silva + +commit 6cdca627e934ecb8e3e3b7643b2cf118f3b14be2 +Author: Eduardo Silva +Date: Thu Apr 7 07:37:36 2011 -0400 + + Just invoke mk_socket_safe_event_write when it has been specified by config + + Signed-off-by: Eduardo Silva + +commit b5f52730dc9b4b5a9dc539d4d412e72626e0d36d +Author: Eduardo Silva +Date: Thu Apr 7 07:00:32 2011 -0400 + + Drop parsing for unused request headers, just keep TOC + + Signed-off-by: Eduardo Silva + +commit b2fd300fd27f26f0a0bf3ed5788b238f44c92d33 +Author: Eduardo Silva +Date: Wed Apr 6 22:10:03 2011 -0400 + + Remove unnecessary calls to mk_pointer_reset + + Signed-off-by: Eduardo Silva + +commit 8963afbaeac4dd10b297ff91e54f45b0d8e26464 +Author: Eduardo Silva +Date: Wed Apr 6 21:52:04 2011 -0400 + + When parsing Host header, do not malloc on port field + + Signed-off-by: Eduardo Silva + +commit 7b008db1dab120d0011f652a70bcbeab286047ea +Author: Eduardo Silva +Date: Wed Apr 6 16:50:38 2011 -0400 + + Rewrite of _mk_string_search(): 57% performance gained + + Signed-off-by: Eduardo Silva + +commit 73550a8535dad2fd9c621939b314ab56b41630af +Author: Eduardo Silva +Date: Wed Apr 6 11:57:37 2011 -0400 + + update debug request blocks + + Signed-off-by: Eduardo Silva + +commit 9979882526b792c6b593bfa2264401ec9750738b +Author: Eduardo Silva +Date: Wed Apr 6 09:51:16 2011 -0400 + + QA: Improve keepalive test + + Signed-off-by: Eduardo Silva + +commit b44e74fc4e5b289b711142a0e9769b0081ad9dda +Author: Eduardo Silva +Date: Tue Apr 5 12:11:43 2011 -0400 + + Do not allow pipelining requets in non-keepalive connections + + Signed-off-by: Eduardo Silva + +commit 54823ff0c76b060126d2bdc620bf8fd4bff259e1 +Author: Eduardo Silva +Date: Tue Apr 5 08:20:47 2011 -0400 + + Fix MK_PATH_BASE + + Signed-off-by: Eduardo Silva + +commit d648dc88b960c3453e36dace0ebf5fb5a1665a75 +Author: Eduardo Silva +Date: Tue Apr 5 08:17:44 2011 -0400 + + real_path_static now uses MK_PATH_BASE + + Signed-off-by: Eduardo Silva + +commit 137abdd187ed82b452c5c1c3bef436e572401f66 +Author: Eduardo Silva +Date: Tue Apr 5 08:01:14 2011 -0400 + + session_request: new real_path_static field and new macro MAX_PATH_BASE + + Signed-off-by: Eduardo Silva + +commit ec9b5a0cb1e04851da1d81ea78e1b8ec9fed5b9a +Author: Eduardo Silva +Date: Tue Apr 5 06:03:23 2011 -0400 + + mk_file_get_info() now accept two parameters and return int value. + + the new definition is as follow: + + int mk_file_get_into(const char *path, struct file_info *f_info); + + so the called needs to pass by reference an allocated struct for + f_info where the file information will be stored. + + At Monkey core level, this new method reduce one malloc/free in the + session_request structure, as the new file_info node is allocated + as static and not dynamic as it used to. + + Signed-off-by: Eduardo Silva + +commit 4f2fc9f8879bc3721875e78814ecee63bfa2c255 +Author: Eduardo Silva +Date: Mon Apr 4 21:05:34 2011 -0400 + + Deprecate mk_string_remove_space() + + Signed-off-by: Eduardo Silva + +commit 5fcf77ecaa00ba4e3315d52f3c981cd82962eebe +Author: Eduardo Silva +Date: Mon Apr 4 14:56:59 2011 -0400 + + Liana_SSL: use MK_SOMAXCONN + + Signed-off-by: Eduardo Silva + +commit 1993a7405eba5d44c137dfc9add8ac2cb8f44100 +Author: Eduardo Silva +Date: Mon Apr 4 14:53:34 2011 -0400 + + Deprecate mk_utils_get_somaxconn, new macro MK_SOMAXCONN + + Signed-off-by: Eduardo Silva + +commit 001b55f596cd64957f434e3c96868a6299c5d2f3 +Author: Eduardo Silva +Date: Sun Apr 3 21:21:58 2011 -0400 + + Re-enable return value MK_PLUGIN_RET_CONTINUE for STAGE_30 + + Signed-off-by: Eduardo Silva + +commit d482f0d4b4cb75aeac24fbdcc97b1240dff5f318 +Author: Eduardo Silva +Date: Thu Mar 31 04:47:56 2011 -0400 + + Monkey 0.13.2 + +commit a1b29ab0129b41d9e53772bcd26d0009a30c3e04 +Author: Eduardo Silva +Date: Wed Mar 30 17:22:38 2011 -0400 + + Fix #51: Can't set to non-blocking the socket when compiled with ACCEPT_GENERIC + + Signed-off-by: Eduardo Silva + +commit d75580bccce6a401d76994532b1ead52524b3473 +Author: Eduardo Silva +Date: Sun Mar 27 14:51:08 2011 -0400 + + Mandril: fix bad usage of str_build() + + Signed-off-by: Eduardo Silva + +commit cc0d64f7b6f646c88b9a6fe56eb2fb246d47d68a +Author: Eduardo Silva +Date: Sun Mar 27 14:19:40 2011 -0400 + + Cheetah: fix broken Makefile.in + + Signed-off-by: Eduardo Silva + +commit f3a8aef0da43d53382c39bef4a72bca72052e96b +Author: Eduardo Silva +Date: Sun Mar 27 12:42:31 2011 -0400 + + Palm: pass NULL pointer to str_build() + + Signed-off-by: Eduardo Silva + +commit 23d5aa1ba011dba8ee3ba48442664d81a2cc5a0d +Author: Eduardo Silva +Date: Sun Mar 27 12:39:43 2011 -0400 + + Palm: deprecate old macros and adapt to new structs + + Signed-off-by: Eduardo Silva + +commit fc83d7eb7b09cd8b08a02845003bd22faf0c22e2 +Author: Eduardo Silva +Date: Sat Mar 19 12:13:51 2011 -0400 + + New host_alias field in session_request + + Signed-off-by: Eduardo Silva + +commit a2ec116fca488fc289052e22754d5b7adf99424f +Author: Eduardo Silva +Date: Sat Mar 12 14:24:48 2011 -0300 + + Config: fix minor leak when composing vhost path + + Signed-off-by: Eduardo Silva + +commit 33085320c8c681271a4e840bd35d51fdda1fc3a7 +Author: Eduardo Silva +Date: Sat Mar 12 14:17:07 2011 -0300 + + Mimetype: safe configuration free + +commit afe26a2fe8bd6c9ed4e54595e423dda85dd662aa +Author: Jonathan Gonzalez V +Date: Thu Mar 10 12:52:58 2011 -0300 + + Replace some repetitive code + +commit daee575882cbe5f05fdca9597d2804ff8b999ea0 +Author: Jonathan Gonzalez V +Date: Wed Mar 9 14:43:07 2011 -0300 + + Fix configure script and Makefile.in in all the plugins direcotory to not re-compile every time that we run make command + +commit 5058f2355358944db455254c556c618f4ac9f3e1 +Author: Eduardo Silva +Date: Wed Mar 9 11:40:24 2011 -0300 + + Dirlisting: free finfo check + + Signed-off-by: Eduardo Silva + +commit dd15d6df77a29811fe4e033301176736abe01a05 +Author: Eduardo Silva +Date: Wed Mar 9 11:17:53 2011 -0300 + + Configure: bold some text + + Signed-off-by: Eduardo Silva + +commit e0b02a2b7b59b5771a0cc9ce5ad8dc58712e323d +Merge: 421bbe8 6cb1b54 +Author: Eduardo Silva +Date: Wed Mar 9 11:10:02 2011 -0300 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 421bbe8ff00fd328d7ce9dab3353e949ad58984a +Author: Eduardo Silva +Date: Wed Mar 9 11:09:11 2011 -0300 + + Dirlisting: validate theme path and print error if required + +commit d57cf54fc559601239661f4ab3cf718fe171dbde +Author: Eduardo Silva +Date: Wed Mar 9 10:46:50 2011 -0300 + + Plugin: if the plugin fails by it own rules, free configuration memory + + Signed-off-by: Eduardo Silva + +commit a0823c3b9033b5161eb7719a35547db089c6be51 +Author: Eduardo Silva +Date: Wed Mar 9 10:38:09 2011 -0300 + + Dirlisting: fix return values when loading plugin + +commit 6cb1b5447a131be54eb16adebff33e23d0951bc0 +Author: Jonathan Gonzalez V +Date: Mon Mar 7 15:47:22 2011 -0300 + + Added more colors to the configure script. Deleted trailling whitespaces + +commit 2d6b5244e6a639a30d7d0233ed01b6524df21b2b +Author: Jonathan Gonzalez V +Date: Mon Mar 7 11:39:39 2011 -0300 + + Added a /certs/ directory to the conf directory so it will store the cert in a "secure" place + +commit 152cf1139b77f25266b7e67488d5ec88d98b07cb +Author: Eduardo Silva +Date: Mon Mar 7 10:52:17 2011 -0300 + + 0.13.2 begins + + Signed-off-by: Eduardo Silva + +commit 606a99d93b90a359f904cbdaafb880f7ca0a55a5 +Author: Eduardo Silva +Date: Mon Mar 7 10:04:44 2011 -0300 + + Monkey 0.13.1 + +commit 5fa744d3e6302465b8b741b15dd3f9effd38d11c +Author: Eduardo Silva +Date: Sun Mar 6 21:43:18 2011 -0300 + + Improve some string search with memchr family + + Signed-off-by: Eduardo Silva + +commit 991d192c72a3669eb3497dcac78af5ee119354a8 +Author: Eduardo Silva +Date: Sun Mar 6 19:41:14 2011 -0300 + + Query string parser: better performance, restrict lookup to first header + + Signed-off-by: Eduardo Silva + +commit e249fe85d975c95c1b8ed90d92b1cd1bcd22dd82 +Author: Eduardo Silva +Date: Sun Mar 6 19:28:30 2011 -0300 + + Keepalive: split buffer and add to iov + + Signed-off-by: Eduardo Silva + +commit 19bc524081a4712fc3ffe607df1c79fafb51e61e +Author: Eduardo Silva +Date: Sun Mar 6 15:23:25 2011 -0300 + + Faster string_itop(), code based in stringencoders-3.10.3 + + Signed-off-by: Eduardo Silva + +commit d9c22249f77bc2f02743cbee2df85c6ad4167de8 +Author: Eduardo Silva +Date: Sat Mar 5 23:47:12 2011 -0300 + + Ticket #33: add conf directory to plugins, it also supports all configuration keys + +commit 9e4e9da11fe8955fe950d4dd3e7037ecb714fbad +Merge: 04b0798 64c946e +Author: Eduardo Silva +Date: Sat Mar 5 21:39:25 2011 -0300 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 64c946ea5c0c32ce9c6c0a471fdaca77631b7b46 +Author: Davidlohr Bueso +Date: Sat Mar 5 01:17:14 2011 -0300 + + Exit the program if cannot find (invalid) the server configuration entry + + Signed-off-by: Davidlohr Bueso + +commit 04b07981db9c95cac29f49e1b8109ab581b2d782 +Author: Eduardo Silva +Date: Thu Mar 3 10:55:37 2011 -0300 + + KeepAlive improve + + Signed-off-by: Eduardo Silva + +commit 33d307efc7a62f8a7ac88adb4a114f09c8dda2ca +Author: Davidlohr Bueso +Date: Thu Mar 3 01:39:18 2011 -0300 + + Use mk_mem_malloc() when allocating memory in mk_string_copy_substr + + Signed-off-by: Davidlohr Bueso + +commit 17563671709103f7917491db40e767bd22ee8dd4 +Author: Davidlohr Bueso +Date: Thu Mar 3 01:33:43 2011 -0300 + + Remove unused MIME constants: MAX_MIMETYPES_NOMBRE, MAX_MIMETYPES_TIPO, MAX_SCRIPT_BIN_PATH + + Signed-off-by: Davidlohr Bueso + +commit 0d086eaddf62c49372fd0d7a899906d3b10cca77 +Author: Eduardo Silva +Date: Thu Mar 3 00:36:42 2011 -0300 + + Reduce number of calls to iov_add_entry when sending response headers + + Signed-off-by: Eduardo Silva + +commit ff99a92eb161231b59c1b42f99be76e3d2fce3c0 +Author: Eduardo Silva +Date: Wed Mar 2 23:55:51 2011 -0300 + + Change default MaxKeepAliveRequest to 120 and KeepAliveTimeout to 5 + + Signed-off-by: Eduardo Silva + +commit 038834fc7f309ae64472d7100ed3f709e076360c +Author: Davidlohr Bueso +Date: Tue Mar 1 01:14:17 2011 -0300 + + Get rid of unused mk_string_array_count + + Signed-off-by: Davidlohr Bueso + +commit e7b9bc2484b1d3f0d0a656b0bc8804ff9fee70f0 +Author: Eduardo Silva +Date: Mon Feb 28 23:15:37 2011 -0300 + + Cheetah: minor fix in config command + + Signed-off-by: Eduardo Silva + +commit 3b1d75b22997c6fb3a9a2bde68187bf6e7476b5d +Author: Eduardo Silva +Date: Mon Feb 28 15:04:57 2011 -0300 + + Configure: generate banana script to use right pidfile + + Signed-off-by: Eduardo Silva + +commit c66ff0c78b12682d261a1001473f507cae0555cd +Author: Eduardo Silva +Date: Mon Feb 28 15:01:50 2011 -0300 + + Monkey v0.13.1 begins + + Signed-off-by: Eduardo Silva + +commit 05895a3c92214450a040fcb594e8e5154db4251b +Author: Eduardo Silva +Date: Sun Feb 27 20:15:16 2011 -0300 + + Monkey 0.13.0 + +commit d70563a95e641964b8692cac241a46620b98c741 +Author: Eduardo Silva +Date: Sun Feb 27 17:34:49 2011 -0300 + + New macros for versioning: __MONKEY__, __MONKEY_MINOR__ and __MONKEY_PATCHLEVEL__ + + Signed-off-by: Eduardo Silva + +commit 52cc10c2ff7579f27c9c0365b9bb35ca8b1fd7ab +Author: Eduardo Silva +Date: Sun Feb 27 13:13:58 2011 -0300 + + User directory: new parser and code cleanup + + The user's directory feature has been improved with a new parser, + also some unnecesary session request fields has been dropped. + + Signed-off-by: Eduardo Silva + +commit 5277ae186f80c695f4b0ebd227a25037fa6b609c +Author: Eduardo Silva +Date: Sun Feb 27 11:20:23 2011 -0300 + + Core: sr->uri_processed to mk_pointer + + The session request field 'uri_processed' now is converted to a + mk_pointer. Monkey used to calc the string length multiple times + along every request cycle, with this little change we avoid that + and gain better performance. + + Signed-off-by: Eduardo Silva + +commit be02800bc2afc8a4179eedc2d70dd8907f05f689 +Author: Eduardo Silva +Date: Sun Feb 27 02:32:06 2011 -0300 + + Logger: Improve performance + + Do not use str_itop() to convert integer HTTP status codes, + instead use the new static map table for that. + + Signed-off-by: Eduardo Silva + +commit 79bf0282df4d210d00d7214c696e9a615a71668d +Author: Eduardo Silva +Date: Sun Feb 27 01:44:22 2011 -0300 + + Configure: improve help command output + + Signed-off-by: Eduardo Silva + +commit 87441011f08ba0e1287c6ecba227f21699f8b8f3 +Author: Eduardo Silva +Date: Sun Feb 27 01:28:54 2011 -0300 + + Configure: new option --default-user to override default web user + + Signed-off-by: Eduardo Silva + +commit d61422efae9a866e9b20ced4fff82ba515526ccb +Author: Eduardo Silva +Date: Sat Feb 26 20:20:49 2011 -0300 + + Configure: new option --default-port to override default TCP port + + Signed-off-by: Eduardo Silva + +commit 8e6d45f69f1339505e9e21110a42a228c3b1385a +Author: Eduardo Silva +Date: Sat Feb 26 18:19:57 2011 -0300 + + Print message when Monkey goes into background mode + +commit f8e688073bace892d03f94a4c5c65fdd9aefb0bb +Author: Eduardo Silva +Date: Sat Feb 26 17:09:43 2011 -0300 + + QA: Add keepalive header checker + + Signed-off-by: Eduardo Silva + +commit c3a2dbbf6e24ca3ec52b475837a96bafd64df477 +Author: Eduardo Silva +Date: Sat Feb 26 16:28:31 2011 -0300 + + QA: head_02 test, expect Content-Type + + Signed-off-by: Eduardo Silva + +commit 4c76f0b46d794932240b8b682063467f379fea42 +Author: Eduardo Silva +Date: Sat Feb 26 16:27:04 2011 -0300 + + Fix HTTP Method conditional + +commit 16cb3fc16306e37ad0ed9332525cca3864cff220 +Author: Davidlohr Bueso +Date: Sat Feb 26 15:28:52 2011 -0300 + + Fix the GCC version for which the alloc_size attribute was introduced. + + Reference: http://gcc.gnu.org/gcc-4.3/changes.html + + Signed-off-by: Davidlohr Bueso + +commit fc51aec45ab286f3d029e516265c4b592812f4a5 +Author: Davidlohr Bueso +Date: Sat Feb 26 14:48:59 2011 -0300 + + Remove the 'to' parameter from the mk_socket_sendv function, it is + not needed, so we can simplify this. + + Signed-off-by: Davidlohr Bueso + +commit 9c6c74a38ec33e2d875fb821835437a6ccd0f5f8 +Author: Davidlohr Bueso +Date: Sat Feb 26 14:05:20 2011 -0300 + + Remove MK_SEND_IOV_TO_PIPE constant, no longer used. + + Signed-off-by: Davidlohr Bueso + +commit 3deb3d26990167728374bae05f09dcd9a4dd8249 +Author: Davidlohr Bueso +Date: Sat Feb 26 13:44:21 2011 -0300 + + Simplify the mk_iov_send function. + + This patch removes the socket or pipe differentiation that existed + in order to use writev(2) or vmsplice(2), which is not implementable + because of buffer alignment. + + Signed-off-by: Davidlohr Bueso + +commit 28db1c3aafd4cd0d1f6606e119afb8439fe938ca +Author: Davidlohr Bueso +Date: Sat Feb 26 13:43:40 2011 -0300 + + Update Plugins iov_send API function to reflect changes. + + Signed-off-by: Davidlohr Bueso + +commit d3ea2425a4c9e8a7b75f720dc26ecf7ea04be48f +Merge: 2f352f3 deac1d9 +Author: Davidlohr Bueso +Date: Thu Feb 24 16:56:49 2011 -0300 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + +commit 2f352f382b46a2f2c28d5095cc3dd4609d927d24 +Author: Davidlohr Bueso +Date: Thu Feb 24 16:46:14 2011 -0300 + + Improve MIME performance lookup + + Currently when searching for MIME types to service, a sequencial search is made, wasting time and calls, + specially for the most commonly used types. + + This patch introduces a heuristic which allows two mime lists to exist, one with the most commonly used + types (like HTML, CSS, images, etc.), and another with the rest. When servicing a type that is very used, it + will continue to do a sequencial search, otherwise we do a binary one. + + Signed-off-by: Davidlohr Bueso + +commit bb17de3fbd73511239741fe9466405bfbaee7795 +Author: Davidlohr Bueso +Date: Thu Feb 24 16:44:42 2011 -0300 + + monkey.mime: Change entry order + + This list is read when the application is started, and there is an immediate performance improvement + when leaving the most used MIMEs on top. This patch also removes a duplicate entry. + + Signed-off-by: Davidlohr Bueso + +commit deac1d969592c4f365a836d1195e7748635dbc72 +Author: Eduardo Silva +Date: Thu Feb 24 15:02:27 2011 -0300 + + Plugin: continue on error + +commit c5ea58289641b09c33650e33b17f5efa6abe7bac +Author: Eduardo Silva +Date: Mon Feb 21 17:23:45 2011 -0300 + + API: deprecate MK_PLUGIN_RET_CONTINUE for STAGE_30 + + Signed-off-by: Eduardo Silva + +commit 55223c532a1644c6e54e4cff240e741c8146b43f +Author: Eduardo Silva +Date: Mon Feb 21 16:55:54 2011 -0300 + + API: export header_get() + +commit 6774a28f84ddaa8f0d2af4f35a9dcd66ee266826 +Author: Eduardo Silva +Date: Sun Feb 20 18:01:31 2011 -0300 + + Add some CSS to error pages + + Signed-off-by: Eduardo Silva + +commit 6df397e7c4d1d92a703e96b47dc8e6b4fd3d7e73 +Author: Eduardo Silva +Date: Sun Feb 20 17:08:05 2011 -0300 + + Liana_SSL: Update docs + +commit 1bd1f58fb8816a4f8f29fa50b0a056f9d3bb2683 +Author: Eduardo Silva +Date: Sun Feb 20 16:33:32 2011 -0300 + + Liana_SSL: Set transport type to MK_TRANSPORT_HTTPS + + Signed-off-by: Eduardo Silva + +commit 73296caf0ffff8b87414a374c7ae95f72736c158 +Author: Eduardo Silva +Date: Sun Feb 20 16:30:36 2011 -0300 + + Add 'transport' field to configuratrion struct. + + This new field defines if the server is working in http or + https mode, on that way we can send safe full redirection + headers. Values added to macros are: + + MK_TRANSPORT HTTP + MK_TRANSPORT HTTPS + + Signed-off-by: Eduardo Silva + +commit 6cb7e8bf6eeeae4ff6b9fc8616ecc85861c3d31c +Author: Eduardo Silva +Date: Sun Feb 20 14:28:23 2011 -0300 + + Liana_SSL: Exit with failure when cannot bind the port + + Signed-off-by: Eduardo Silva + +commit d45b9c1c7e3d187e03b309a1c96bcdda815ef5ad +Author: Eduardo Silva +Date: Sun Feb 20 14:19:23 2011 -0300 + + Exit when networking plugin fails + +commit 46c24d65d41be1208dd2a1d2a674b919fc9b35c7 +Author: Eduardo Silva +Date: Sun Feb 20 14:17:16 2011 -0300 + + Liana_SSL: Fix memory leak + Liana_SSL: Exit with failure on error + + Signed-off-by: Eduardo Silva + +commit aec4f06fa994484a3f299b6c76d07d46e019e52a +Author: Eduardo Silva +Date: Sun Feb 20 13:45:21 2011 -0300 + + Sort headers + API: Testing new header_find() function + + Signed-off-by: Eduardo Silva + +commit 3c7d3bd7420a8cca04a440573e756894258eed69 +Author: Eduardo Silva +Date: Sat Feb 19 15:21:18 2011 -0300 + + API: new interface to add extra response header rows api->header_add_row + + Signed-off-by: Eduardo Silva + +commit 0e5e7894a3200e3b239184b2a5afb60cebf70631 +Author: Eduardo Silva +Date: Sat Feb 19 09:33:05 2011 -0300 + + Add some validations to response status set + + Signed-off-by: Eduardo Silva + +commit 93565e73564066ddf581a0dadd09e0b370cd2a20 +Author: Eduardo Silva +Date: Sat Feb 19 08:49:58 2011 -0300 + + Fix CRLF for 401 response + +commit 57c18be8adc6ebd0973f25498a832bbc1754e140 +Author: Eduardo Silva +Date: Sat Feb 19 08:20:28 2011 -0300 + + Add support for all HTTP response headers + + Monkey used to support just the common HTTP response + headers, in order to provide a more flexible mechanism for + the plugins interface, all HTTP possible responses has been + added. + + Signed-off-by: Eduardo Silva + +commit 7a9e1151a87b877e51a25448c95bde78ee82ee05 +Author: Eduardo Silva +Date: Fri Feb 18 10:49:38 2011 -0300 + + Update JCI email address + + Signed-off-by: Eduardo Silva + +commit 1352faecd7cbcdc1199cc02547fd200a710aba52 +Author: Eduardo Silva +Date: Fri Feb 18 10:46:09 2011 -0300 + + Rename HTTP status macros names + Rename MK_INF to MK_INFO + + Signed-off-by: Eduardo Silva + +commit 8f5c55071495fcf0e0f2aaeb0b4997153a23eb9d +Author: Eduardo Silva +Date: Thu Feb 17 23:53:18 2011 -0300 + + API: do api->error private = api->_error + +commit 004c20fb80206643db2c03d714abc30eb10f8a4a +Author: Eduardo Silva +Date: Thu Feb 17 23:48:09 2011 -0300 + + Adapt plugins to new message macros + +commit c9db5ac9793ccab2b202fe5bc24a00cab81bef53 +Author: Eduardo Silva +Date: Thu Feb 17 17:35:39 2011 -0300 + + API: Export direct message macros to plugins + +commit 55d5758653395aab195c35e79088e0d89e47da33 +Author: Eduardo Silva +Date: Thu Feb 17 17:06:57 2011 -0300 + + Deprecate VAR_ON and VAR_OFF, unify MK_TRUE and MK_FALSE + + Signed-off-by: Eduardo Silva + +commit ed026d083d1e3e716b108cc9ce3f45813fbe002c +Author: Eduardo Silva +Date: Thu Feb 17 14:35:45 2011 -0300 + + Improve performance of mk_pointer_to_buf() + +commit bd9a6964fda9130c21de2db34ceb7f054bca9291 +Author: Eduardo Silva +Date: Thu Feb 17 14:17:45 2011 -0300 + + Exit when cannot log PID of Monkey + +commit 8935b95279c46930d3ebc87db2e360a1a7db81ec +Author: Eduardo Silva +Date: Thu Feb 17 14:08:13 2011 -0300 + + Improve setrlimit() messages + +commit 6872eaa7ebcf24edc8e98345c78f253b4d79091f +Author: Eduardo Silva +Date: Thu Feb 17 09:44:43 2011 -0300 + + Replace gmtime() by reentrant version gmtime_r() and use thread key for cache + +commit 9260c8fe69310e9c46ee667912f7d4ac83901174 +Author: Eduardo Silva +Date: Thu Feb 17 09:14:00 2011 -0300 + + Fix: send Content-Length header for HEAD method requests + QA: Add script to check that content-length header is sent when the HEAD + method is used + + Signed-off-by: Eduardo Silva + +commit 4170b0e4ead37b020fb993d9740be5e92ff1fd4c +Author: Eduardo Silva +Date: Wed Feb 16 17:36:11 2011 -0300 + + Dirlisting: pass NULL pointers when creating string buffers + +commit 365426b678902bc969d18591405892a1a43fbfdb +Author: Eduardo Silva +Date: Wed Feb 16 16:49:01 2011 -0300 + + Exit with error if monkey.conf cannot be loaded + +commit eaab8459086ee2c2f9b383f1e380b6d1fef3ba4e +Author: Eduardo Silva +Date: Wed Feb 16 16:45:02 2011 -0300 + + Exit with error if plugins.load cannot be loaded + +commit a40cbe8280567d7c49903e747fbc8ecc34033516 +Author: Eduardo Silva +Date: Wed Feb 16 16:40:24 2011 -0300 + + Plugin core: more error checks + +commit ea3f0a6c7035a24c205168ada4e7e7c736d64337 +Author: Eduardo Silva +Date: Wed Feb 16 16:04:47 2011 -0300 + + Reset mk_pointer variable for mk_string_build() + +commit c6fa207751639d9b20c3b9f7dfc22ad37b84b087 +Author: Eduardo Silva +Date: Wed Feb 16 15:41:17 2011 -0300 + + mk_sched_get_connection: do not accept sched = NULL + +commit ab3bb3d826bb65ebf6b9838152fe71e86d7354ca +Author: Eduardo Silva +Date: Wed Feb 16 14:56:30 2011 -0300 + + Validate mk_string_build() with mk_bug() and fix some guilties + + Signed-off-by: Eduardo Silva + +commit 8da2050e6d21cb8937d9933e56a3ec86efdf4132 +Author: Eduardo Silva +Date: Wed Feb 16 14:10:44 2011 -0300 + + New mk_bug() macro (Kernel BUG_ON macro style) + + Signed-off-by: Eduardo Silva + +commit b89bb6ae6fcc1aabd1ce518436d4e4e38cad09a0 +Author: Eduardo Silva +Date: Tue Feb 15 13:56:15 2011 -0300 + + Patas: replace wrong call to MK_ERROR_WARNING + + Signed-off-by: Eduardo Silva + +commit 629983194c8c20a17137842017990c02b2e782cc +Author: Eduardo Silva +Date: Tue Feb 15 13:54:59 2011 -0300 + + Patas: remove #ifdef TRACE conditionals + + Signed-off-by: Eduardo Silva + +commit dd009a1605eca149eac7860fb56892f50f8eda6c +Author: Eduardo Silva +Date: Tue Feb 15 13:53:01 2011 -0300 + + Palm: remove #ifdef TRACE conditionals + + Signed-off-by: Eduardo Silva + +commit ade3e8a34b05a2a41bc433be0228b7e61904380d +Author: Eduardo Silva +Date: Tue Feb 15 13:49:21 2011 -0300 + + Mandril: remove #ifdef TRACE conditionals + + Signed-off-by: Eduardo Silva + +commit e29132d10a7f1d6e7f3294ae820c811357e28d9e +Author: Eduardo Silva +Date: Tue Feb 15 13:48:38 2011 -0300 + + Logger: remove #ifdef TRACE conditionals + + Signed-off-by: Eduardo Silva + +commit e65bb91cebe33b22d733de60f548c82e36861158 +Author: Eduardo Silva +Date: Tue Feb 15 13:47:26 2011 -0300 + + Dirlisting: remove #ifdef TRACE conditionals + + Signed-off-by: Eduardo Silva + +commit 77b56b599d761af15d7f4cfb31bf5af154ae171e +Author: Eduardo Silva +Date: Tue Feb 15 13:46:12 2011 -0300 + + Liana_SSL: remove #ifdef TRACE conditionals + + Signed-off-by: Eduardo Silva + +commit cca07d5c1d46fc0c65f79684beb4df59e015e372 +Author: Eduardo Silva +Date: Tue Feb 15 13:32:08 2011 -0300 + + Create empty MK_TRACE macro when TRACE is not defined in configure + + If TRACE is not defined, now MK_TRACE is set to do {} while(0) , on + that way all core code can invoke MK_TRACE() no matters if really + exists or not. + + Most of the #ifdef TRACE conditional statements have been removed. + + Signed-off-by: Eduardo Silva + +commit 818f58973349edba7a834cbf5d6460f8902da12b +Author: Davidlohr Bueso +Date: Thu Feb 10 17:01:08 2011 -0300 + + [PATCH] Update the mconf to reflect pidfile changes, and the TODO file as well + + Signed-off-by: Eduardo Silva + +commit b2186d54a8c7507e7124531a695bc306e4e16ee6 +Author: Davidlohr Bueso +Date: Thu Feb 10 11:18:41 2011 -0300 + + [PATCH] Remove duplicate headers + + Signed-off-by: Eduardo Silva + +commit 0e5d4f6357b93906e68480734a14e1283be9d8b8 +Author: Eduardo Silva +Date: Thu Feb 10 07:51:37 2011 -0300 + + Make up signal errors + +commit 31e16255147fdb9024f60a06144ee76b09d9d945 +Author: Eduardo Silva +Date: Thu Feb 10 01:47:24 2011 -0300 + + Print 'started' info message when running in console + +commit 3d47933fee07b15547f3e5888dca9d3703729cea +Author: Eduardo Silva +Date: Thu Feb 10 01:36:37 2011 -0300 + + New macros.h + +commit ae20fb91ebf003e854e2e346fd1240daf07a7c8f +Author: Eduardo Silva +Date: Thu Feb 10 01:30:10 2011 -0300 + + New macros for messages: mk_err(), mk_warn() and mk_info() + + The new macros works over new mk_print() function (old mk_error). + +commit dce25c403ccb56b8862324af3a1cc6383062be57 +Author: Eduardo Silva +Date: Wed Feb 9 16:42:37 2011 -0300 + + Little fix in help text + +commit 66037324e3fb12439e30a8f0016be7a83fe10ef2 +Author: Eduardo Silva +Date: Wed Feb 9 16:04:34 2011 -0300 + + Add date and time to error messages + +commit a7cfb8f6952aa1373d257fc49806e2d546c65d6c +Author: Eduardo Silva +Date: Wed Feb 9 13:00:14 2011 -0300 + + Dirlisting: replace fprintf by mk_error + +commit 3b7e05c78ea0d0a552fd9103619fce4a6708c8c0 +Author: Eduardo Silva +Date: Wed Feb 9 12:58:34 2011 -0300 + + Remove fprintf() calls, replaced by mk_error() + +commit 1c7ac52c3c0293d7d44a66648ce798718f81da30 +Author: Davidlohr Bueso +Date: Wed Feb 9 11:13:45 2011 -0300 + + [PATCH 2/2] Fix English for better reading + + Signed-off-by: Eduardo Silva + +commit 26a816c84c5428c1acb84c7bf0fcf83959f3b774 +Author: Davidlohr Bueso +Date: Wed Feb 9 11:12:31 2011 -0300 + + [PATCH 1/2] Fix English better reading + + Signed-off-by: Eduardo Silva + +commit 1717a363e125fab1f5251a88cc47a5040fff22e7 +Author: Davidlohr Bueso +Date: Wed Feb 9 11:10:32 2011 -0300 + + [PATCH] Add banana manual page + + Signed-off-by: Eduardo Silva + +commit 2eaa47df83c387483ad6a8aa27209599ad22645d +Author: Davidlohr Bueso +Date: Wed Feb 9 11:06:28 2011 -0300 + + [PATCH] This patch does a few things: + + - Adds static (and void argument) to the definition of locally used functions, like mk_details() + - Allocates the config global structure after parsing the command line arguments, this avoids an unnecesary mem leak + and overall makes things a bit cleaner and more UNIX-style standard. + + Signed-off-by: Eduardo Silva + +commit 15bcbb43e8ec76eb935a4fc023aefbaab816c482 +Author: Eduardo Silva +Date: Wed Feb 9 11:04:24 2011 -0300 + + Logger: Comment masterlog conf + +commit 60ac2357a70324f820a058830f4faed4d507f688 +Author: Eduardo Silva +Date: Wed Feb 9 10:29:36 2011 -0300 + + Logger Plugin: Add new support for MasterLog file + + Now when Monkey runs in daemon mode and per configuration in file + logger.conf the key 'MasterLog' is defined, all Monkey STDOUT will + be redirected to that file. + +commit 143a083101856a797b54ce015204a9f823dbb0f6 +Author: Davidlohr Bueso +Date: Tue Feb 8 11:13:00 2011 -0300 + + [PATCH] When passing an invalid option to monkey we should be returning an EXIT_FAILURE code indicating the wrong status + + Signed-off-by: Eduardo Silva + +commit 5e42facb3d88c0429c751644b4d538d955606d2b +Author: Davidlohr Bueso +Date: Tue Feb 8 11:02:41 2011 -0300 + + [PATCH] There is currently a race condition with Monkey's pidfile. + + If two instances of the webserver are started, the pidfile of the + first instance will be replaced by the second one. + + This presents an issue, can be avoided having a pidfile for each instance + differenciating by port. + + Signed-off-by: Eduardo Silva + +commit d1d8ea61a8463bfdcdaf57cd217e55631932c07e +Author: Eduardo Silva +Date: Tue Feb 8 09:41:25 2011 -0300 + + Remove unused config->port + +commit 0707bdc15b10fb0440ea145fc204d75742f1b0b1 +Author: Eduardo Silva +Date: Mon Feb 7 19:33:07 2011 -0300 + + Logger: use mk_list implementation + +commit bac9183d6decf4efff701718352334531b038f5d +Author: Eduardo Silva +Date: Mon Feb 7 14:38:50 2011 -0300 + + Base plugins now uses VERSION macro when registering + +commit b86892c82a2a268ab10a45733ccf77529200f55e +Author: Eduardo Silva +Date: Mon Feb 7 14:27:43 2011 -0300 + + Logger: fix default configuration flushtime + +commit a9a45f3391d82fc5d106bf5258c8bcc84c2ec85e +Author: Eduardo Silva +Date: Mon Feb 7 12:51:58 2011 -0300 + + Configure: add --mandir option + +commit 7de7c25c8ee6272e10e264d4b9913fcf567ee57a +Author: Eduardo Silva +Date: Sat Feb 5 14:20:14 2011 -0300 + + Update man page and move it to man/ directory + +commit 71ee362fc6b3e04ce83be8689dabb639686f477b +Author: Davidlohr Bueso +Date: Sat Feb 5 14:12:58 2011 -0300 + + [PATCH] Add manual page + + Signed-off-by: Eduardo Silva + +commit 4fcf7f84ffa1315e75c6b17c3cc21ba0026c150f +Author: Eduardo Silva +Date: Sat Feb 5 13:59:37 2011 -0300 + + Add new options to help list and add documentation url + +commit 37372df32ab3e44578f909378961998744ba113f +Author: Davidlohr Bueso +Date: Sat Feb 5 13:50:42 2011 -0300 + + [PATCH] Add support for long options + With this patch we can now use --version, --configdir, etc (you get the idea). + + Signed-off-by: Eduardo Silva + +commit 481129e76dbcab7f325f4ac8fb8a58b03afbf440 +Author: Davidlohr Bueso +Date: Wed Feb 2 13:52:01 2011 -0300 + + [PATCH] make the deaminization function more robust + + Good deamon processes follow certain basic coding rules when being created. + This patch attempts to make mk_utils_set_daemon() more robust, making this chimp a bit more evil >:) + + * Call umask: If the deamon process wants to create files it might want to set specific permissions, otherwise + the file creation mode (mask) might deny certain permissions. + + * Change the current working directory to "/" (root), which allows the previous working directory to be unmounted. + + All syscalls are exit-error validated, since there is absolutely no point in going on with the program if the deamonization is not well done. + This patch also removes some duplicate included headers. + + Signed-off-by: Eduardo Silva + +commit d044f4ead262e22c6345dcbe0e195b3555dfd42c +Author: Davidlohr Bueso +Date: Tue Feb 1 14:25:20 2011 -0300 + + Declare non-argument functions with void + + It is best practises to declare functions that do not accept parameters with void: + + "int foo(void);" instead of "int foo();" + + Signed-off-by: Eduardo Silva + +commit c695177d39cf5ee461a52a776cad33805a38bca7 +Author: Davidlohr Bueso +Date: Tue Feb 1 14:23:51 2011 -0300 + + [PATCH 4/6] TODO: add manpage creation + + Signed-off-by: Eduardo Silva + +commit 7f74e4493b12c22af8bebbac1db05930c6817853 +Author: Davidlohr Bueso +Date: Tue Feb 1 14:20:50 2011 -0300 + + The atoi(3) function is deprecated: The ahttp://www.gnu.org/software/libc/manual/html_mono/libc.html#index-atoi-2567 + It is recommended to replace it with strtol(3), which detects errors, as opposed to the former. Since strtol returns long, + this also modifies the data types of some variables. This however is not a problem, because a long integer fits anywhere an int does. + + Signed-off-by: Eduardo Silva + +commit 711b0e81a258245537f611dbaec76b072fbe7483 +Author: Davidlohr Bueso +Date: Tue Feb 1 14:17:55 2011 -0300 + + The mutex_wait_register mutex is being locked and immediatelly afterwards unlocked, without protecting any code, it can be removed. + + Signed-off-by: Eduardo Silva + +commit 0e9022db6ea698f13c93ee1aad5f009769376735 +Author: Davidlohr Bueso +Date: Mon Jan 31 16:44:31 2011 -0300 + + When using an older version of GCC (3.0), the alloc_size attribute, + used in memory, does not exist, producing multiple warnings: + + Signed-off-by: Eduardo Silva + +commit 8db1a7b59d615a7c123f5bf8b97d403314b71c35 +Author: Eduardo Silva +Date: Mon Jan 31 16:43:51 2011 -0300 + + 0.12.3-dev begins + +commit c2f58c1c8d89a452ccf20c60005873cc09ffcbac +Author: Eduardo Silva +Date: Sat Jan 29 15:08:51 2011 -0300 + + Monkey 0.12.2 + +commit a1140e918c6f5346cf34ef41550dcdec0a0bbfc6 +Author: Eduardo Silva +Date: Sat Jan 29 14:14:26 2011 -0300 + + Configure: when creating Makefile install rutine, do not install + or copy content of plugins which have not been selected + +commit a412c1e2799677fd849dde72225d1c341e4eefb3 +Author: Eduardo Silva +Date: Thu Jan 27 19:03:30 2011 -0300 + + Scheduler: validate memory allocation for IP cache queue + +commit c713caa0e8b19d9b9189582768af80fb4742507e +Author: Eduardo Silva +Date: Thu Jan 27 18:51:26 2011 -0300 + + Scheduler: validate first list node allocation + +commit d70642846f7c3939422e0fdd9cdb3c875844be54 +Author: Jonathan Gonzalez V +Date: Thu Jan 27 15:18:51 2011 -0300 + + liana_ssl: Moved _mkp_network_io_close before any other function so we don't need to declare anything + +commit a3dedd64c1f42527fa45d6426083611fa7302a08 +Author: Eduardo Silva +Date: Thu Jan 27 14:42:54 2011 -0300 + + Configure: pass LDFLAGS value to plugins Makefile + +commit de363659be3922075afe87ee6b21719b825228d3 +Author: Eduardo Silva +Date: Thu Jan 27 14:19:19 2011 -0300 + + Add LDFLAGS to plugins Makefile.in files + +commit 1b92c08bf11079ea29f6c403ccd67958ff632379 +Author: Eduardo Silva +Date: Thu Jan 27 14:04:25 2011 -0300 + + Configure: fix LDFLAGS + +commit 9c0bb27d68799fa15fdf328ad4c757f14e49c66b +Author: Eduardo Silva +Date: Wed Jan 26 11:09:18 2011 -0300 + + cleanup + +commit 8f024a32f56d5062bf4d3bb2755ed44a813755ff +Author: Eduardo Silva +Date: Fri Jan 21 14:08:55 2011 -0300 + + API: deprecate unused NETIP plugin type + +commit 48234c1e323ba546f0fd2aa5b7658aade2564890 +Author: Eduardo Silva +Date: Fri Jan 21 13:59:30 2011 -0300 + + API: Fix PLUGIN_TRACE() issue + +commit e42da8d756f051fc77b582327a295e7ab5a702cd +Author: Eduardo Silva +Date: Thu Jan 20 15:15:28 2011 -0300 + + API: revert change + +commit dfee6484d5312543bdd2fb027f2a75958220aba0 +Author: Eduardo Silva +Date: Thu Jan 20 13:35:55 2011 -0300 + + Patas Plugin: include MKPlugin.h instead of old plugin.h + +commit 58328f25a07535184ce45bc098aefa66514826ff +Author: Eduardo Silva +Date: Thu Jan 20 13:32:18 2011 -0300 + + API: Fix problem with bad reference in plugin context when some + non-principal .c file invokes PLUGIN_TRACE macro. + +commit 9a13bcab886b0832ad8279fba27421683e4d496d +Author: Davidlohr Bueso +Date: Thu Jan 20 12:43:08 2011 -0300 + + [PATCH 2/2] Update the README file to reflect a more general plugin subsystem instead of naming specific ones. + + Signed-off-by: Eduardo Silva + +commit 87d2df94be8d90b6bd2340fd39ff562bc5f68b8a +Author: Davidlohr Bueso +Date: Thu Jan 20 12:42:25 2011 -0300 + + [PATCH 1/2] update TODO file + + Signed-off-by: Eduardo Silva + +commit 50b0f09f1e7a54d497db514be3235a4cf5798a80 +Author: Eduardo Silva +Date: Thu Jan 20 12:23:24 2011 -0300 + + Add TODO file + +commit 8c88f8619bee05339146259dab2db5a932670c66 +Author: Eduardo Silva +Date: Mon Jan 17 13:45:41 2011 -0300 + + Remove old chars.h + +commit d33369751ac67c709cb5875d2d1ce680eb6b4ff7 +Author: Eduardo Silva +Date: Mon Jan 17 13:45:04 2011 -0300 + + Monkey 0.12.2-dev begins + +commit 8665ac9882df36e91fbcb25e6ce8b7b78eed8714 +Author: Eduardo Silva +Date: Mon Jan 17 13:44:34 2011 -0300 + + Rename PutDateUnix to mk_utils_gmt2utime + +commit 4f104cf525720684c52870d7aa64be0628ed28ac +Author: Eduardo Silva +Date: Mon Jan 17 00:57:59 2011 -0300 + + Monkey 0.12.1 + +commit 7f677ddf425ad9e1820725ab35371853d71d0938 +Merge: 6c94b17 7e64c73 +Author: Eduardo Silva +Date: Mon Jan 17 00:55:01 2011 -0300 + + Merge branch 'master' of ssh://git.monkey-project.com/srv/git/monkey + + Conflicts: + configure + +commit 6c94b1723349252929f4291d9cd0e6327657ae18 +Author: Eduardo Silva +Date: Mon Jan 17 00:50:16 2011 -0300 + + Upgrade Copyrights to 2011 + +commit e54d82e0dc952990a8e2ac5df061f7ccf0c7bdcf +Author: Eduardo Silva +Date: Mon Jan 17 00:35:48 2011 -0300 + + Rename mk_utils_hexuri_to_ascii to mk_utils_url_decode + +commit 6bb7d1c384015bc161ef700722e8981173bb4475 +Author: Eduardo Silva +Date: Mon Jan 17 00:30:22 2011 -0300 + + Deprecate silly chars.c + +commit 55970889521653578ce654406dafbd839bee5acb +Author: Eduardo Silva +Date: Mon Jan 17 00:27:56 2011 -0300 + + Full UTF-8 support + +commit 2941363dea23c177f5003fa373ee4990d4c3dcb1 +Author: Eduardo Silva +Date: Sun Jan 16 23:37:35 2011 -0300 + + Dirlisting: Set charset to UTF-8 in Guineo theme + +commit 081092a4ce4f7e1dd2ec173e9bb42aca56d5a226 +Author: Eduardo Silva +Date: Sun Jan 16 23:31:13 2011 -0300 + + Dirlisting: skip broken file entries + +commit c482e753a6a8376b3bb1eb089673741833cce516 +Author: Eduardo Silva +Date: Sun Jan 16 23:26:38 2011 -0300 + + Rewrite hex2int: mk_utils_hex2int() + +commit e2f5347024a3deac20cc93ac2d223857eb84421b +Author: Eduardo Silva +Date: Thu Jan 6 19:53:13 2011 -0300 + + 0.12.1-dev begins + +commit 2aad66df741aee2e88981dc080f7e38f6d4a2f89 +Author: Eduardo Silva +Date: Fri Dec 31 17:44:31 2010 -0300 + + Monkey 0.12.0 + +commit 7e64c73db27368778778f3918abe0bcc7fcb2e50 +Author: Eduardo Silva +Date: Fri Dec 31 17:41:18 2010 -0300 + + Monkey 0.12.0 + +commit 62156adb40ec8853b61d3b40a263dc737d36033e +Author: Eduardo Silva +Date: Fri Dec 31 11:21:59 2010 -0300 + + Fix error message for M_SERVER_INTERNAL_ERROR + +commit 445d4d6b1b92d7fc58396302810178fd5815ed62 +Author: Eduardo Silva +Date: Fri Dec 31 10:29:15 2010 -0300 + + Fix plugin interface for returned values, now plugins can specify + some error exception and Monkey will handle it properly + +commit 8fbd19a7fe9e16d17d1a05af10321b4f6fea0899 +Author: Eduardo Silva +Date: Fri Dec 31 09:54:26 2010 -0300 + + Palm: comment old validation for iov array + Core: fix typo messages + +commit 65d00f052e8e8c236f61cf8fda237c40cc455f7c +Author: Eduardo Silva +Date: Wed Dec 29 09:14:07 2010 -0300 + + Mandril: comment security rules + +commit e69245043e9e7d6222a74b4ae91212477caf2e0e +Author: Eduardo Silva +Date: Wed Dec 29 01:28:58 2010 -0300 + + Do not crash when mk_plugin_event_get() is invoked from process + context due to a STAGE_10 running plugin. + +commit c82e65e2789b44a0fffca6cd35dff033f9e90137 +Author: Eduardo Silva +Date: Tue Dec 28 20:59:27 2010 -0300 + + Mandril plugin: rename configuration file + +commit fba91d428686729d1acbb9df23694a34add93a48 +Author: Eduardo Silva +Date: Tue Dec 28 20:41:10 2010 -0300 + + QA: add log rules for error_413_01 and error_413_02 + +commit 3e1b75a7562809cc04833932eed7327254d32f48 +Author: Eduardo Silva +Date: Sat Dec 18 13:41:45 2010 -0300 + + When an experimental plugin is enabled using --enable-plugins in + configure script, the plugin entry now is commented in plugins.load. + +commit 2f5c892403c36cbb98a7f25548f65c7e4451b51a +Author: Eduardo Silva +Date: Sat Dec 18 13:27:27 2010 -0300 + + Patas plugin to EXPERIMENTAL + +commit 986bb06101a607ab45d4145e5fb16f0ba1c72f50 +Author: Eduardo Silva +Date: Sat Dec 18 13:27:05 2010 -0300 + + Plugins now can be in EXPERIMENTAL stage + +commit c65da1f09e1c640bfe4cb224de44c1b7b889376d +Author: Eduardo Silva +Date: Thu Dec 2 18:53:35 2010 -0300 + + Liana_SSL: enable safe_event_write flag + +commit 36090436a0f67ca541f031a6c21ddd913b078805 +Author: Eduardo Silva +Date: Thu Dec 2 18:52:35 2010 -0300 + + New internal safe_event_write flag + +commit de68d358cb089a3b03c1ad215bd5af821cf07cae +Merge: 9140e66 8f0a963 +Author: Jonathan Gonzalez V +Date: Thu Dec 2 16:04:56 2010 -0300 + + Merge branch 'v0.12.0-dev' of ssh://monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit 9140e667ca5639d35b69f3e0236642d84e0a15d4 +Author: Jonathan Gonzalez V +Date: Thu Dec 2 16:04:12 2010 -0300 + + liana_ssl: Let monkey decide how many times call _mkp_network_io_send_file() to send a file + +commit 8f0a9634e723f0283e66b79e7d817e1372468d7b +Author: Eduardo Silva +Date: Wed Dec 1 10:14:37 2010 -0300 + + Add new mk_utils_errno_print() for tracing context/API + Patas: refactoring stage plugin + +commit a80c456fea4fc1c16f722fc6da5dcd05904c7a78 +Author: Davidlohr Bueso +Date: Thu Nov 25 10:39:52 2010 -0300 + + [PATCH] Move mk_worker_spawn() to utils + + Signed-off-by: Eduardo Silva + +commit f1f3bec9c0f8bd251cb8f9ab0e5515c62b80a0f2 +Author: Davidlohr Bueso +Date: Tue Nov 23 10:24:11 2010 -0300 + + [PATCH] Use static identifier for functions and variables which have local file scope. + This optmization reduces the size of the binary file. + + Signed-off-by: Eduardo Silva + +commit 080b696d4f5280b17678240295a390b736067d27 +Author: Davidlohr Bueso +Date: Mon Nov 22 16:59:57 2010 -0300 + + * Use sigaction(2) instead of non trustworthy signal(2) + + * Currently monkey's signal handling mechanism is very open to race conditions because the handler is does not guarantee reentrancy. + - Change remove(2) to unlink(2) in mk_utils_remove() to use reentrant functions. + + * Layout basics to implement the configuration reload in SIGHUP, this is the most common scenario for deamonized procs. + + * Avoid until needed handling SIGUSR[N] + + Signed-off-by: Eduardo Silva + +commit 87f7741020018aa2f9f77b4dd59fe6860f26132f +Author: Eduardo Silva +Date: Thu Nov 18 18:35:23 2010 -0300 + + On connection error, pass missing sched node + +commit 160fbafdcb76df626d466e950109af95ce4d88e8 +Author: Davidlohr Bueso +Date: Thu Nov 18 18:15:54 2010 -0300 + + We can apply a few optimizations to mk_mem_malloc, mk_mem_malloc_z and mk_mem_realloc: + * Since they are called frequently they are good candidates to inline + * Use GCC's alloc_size function attribute[1] + * When we pass a zero value for the size to a memory allocation function (ie: malloc) + it is not an error and should return NULL gracefully [2] + + Signed-off-by: Eduardo Silva + +commit fcfb3e7c5cbb0a7ea75af2907b8424d10e20f90e +Author: Felipe Ortega +Date: Tue Nov 16 23:58:21 2010 -0300 + + Fix #28: Back one directory level + +commit 60c85fddf0d31c2d332c8fe95019a3c76a7c82fd +Author: Eduardo Silva +Date: Tue Nov 16 09:36:16 2010 -0300 + + Patas Plugin: pre-resolve node/socket details + When the plugin read the nodes configuration, now it performs the + socket sockaddr allocation on that place, avoiding to do the same + process every time when connecting to a node server. + +commit 0e8f0b46ffa84c3dc99176e17bb7f595426d716c +Author: Eduardo Silva +Date: Tue Nov 16 09:00:48 2010 -0300 + + Replace bzero w/memset + +commit 8f2e425c3a88f2ac3d0b6d27d0d233e8cf81a69e +Author: Eduardo Silva +Date: Tue Nov 16 08:58:03 2010 -0300 + + Init old http field headers + +commit cf943f87e8578777d9815c9e49b233928ed68f44 +Author: Eduardo Silva +Date: Tue Nov 16 08:50:56 2010 -0300 + + Ticket #24: Improve TOC headers + Now Monkey handles all request HTTP headers in persistent table of content or + ToC, this can be accessed from session_request->headers_toc + +commit ab9d982b6ef43e9305d9f1ee062ff1290d656154 +Author: Eduardo Silva +Date: Mon Nov 15 15:29:47 2010 -0300 + + clean up + +commit c35d2eaece4fb4f89a9b666e92c13ac0c9366582 +Author: Eduardo Silva +Date: Mon Nov 15 14:54:02 2010 -0300 + + Ticket #22: Load Balancing + Now the scheduler determinate the less overhead thread worker and + assign the new incoming connection to it. + +commit b3c9899f6582aa300a02df4ca8f4bc5ab38b554a +Author: Davidlohr Bueso +Date: Mon Nov 15 10:09:58 2010 -0300 + + Use _exit(2) instead of exit(2) for signal handlers. The former is a guaranteed-reentrant function. + Also replace exit status with proper glibc constant. + +commit a43c7054436ac1f4b9bab31369c11d7bd2ae35ad +Author: Eduardo Silva +Date: Mon Nov 15 09:28:18 2010 -0300 + + Patas Plugin: fix doc + +commit 67f2c388315efb02959980042845704b446a84f8 +Author: Eduardo Silva +Date: Mon Nov 15 07:56:23 2010 -0300 + + Patas Plugin: fix head for next target node + +commit f37ed8edd744ad5385885ad8a57cfc1416a0acb6 +Author: Eduardo Silva +Date: Mon Nov 15 01:30:20 2010 -0300 + + Patas Plugin: validate node:port != localhost:port + +commit ef6eda30d45d822889e3be737ffdd821716da14a +Author: Eduardo Silva +Date: Mon Nov 15 00:39:03 2010 -0300 + + Patas: change nodes default port in configuration + +commit 5673d22d6a0955e5691f5c107841bb3aef42c295 +Author: Eduardo Silva +Date: Sun Nov 14 21:57:32 2010 -0300 + + New Patas Plugin (proxy reverse) + +commit d53f3df27c97c717e5f85ca590b3e4550edf23a2 +Author: Eduardo Silva +Date: Sun Nov 14 20:19:21 2010 -0300 + + Logger: remove unnecessary trace + +commit ca385ec02d4dcc1ccfc64f242ce54cb76c076bc2 +Author: Davidlohr Bueso +Date: Sun Nov 14 02:02:34 2010 -0300 + + plugins: Use glibc EXIT_{FAILURE,SUCCESS} constants instead of 0 or 1 values + This applies to the monkey plugins. + +commit 1fca7bc7c5b8c4a67abfd2d940e2e32b722443ad +Author: Davidlohr Bueso +Date: Sun Nov 14 02:01:27 2010 -0300 + + Use glibc EXIT_{FAILURE,SUCCESS} constants instead of 0 or 1 values. + This applies to the monkey core (not plugins) + +commit a32c2614e64d5e77ddb21a1caaccb412e65f7c88 +Author: Eduardo Silva +Date: Sun Nov 14 02:00:45 2010 -0300 + + Remove script_filename var + +commit 4540f6b31423a52f2d7a261cae5c955517e96eb9 +Author: Eduardo Silva +Date: Mon Nov 8 17:25:23 2010 -0300 + + Cheetah: print vhost aliases + +commit 7163f64ed4b757d5bdc43e87c4815ea90e5f0d0c +Author: Eduardo Silva +Date: Mon Nov 8 16:28:48 2010 -0300 + + Support virtual host aliases + +commit 886c6fc6ea7291b242ecafd024d47d569ef8880b +Author: Eduardo Silva +Date: Fri Oct 29 20:24:25 2010 -0300 + + liana_ssl: add friendly message when certificate/key cannot be opened + +commit 40eb2ed2a843d10e7e6c5cb21e85ae495bf9c0d3 +Author: Eduardo Silva +Date: Fri Oct 29 20:15:40 2010 -0300 + + fix SOCK_NONBLOCK value + +commit 690a795471f122cbbd6c14e96dd6863917d2bd40 +Author: Eduardo Silva +Date: Fri Oct 29 20:11:31 2010 -0300 + + liana: fix macro check for accept4() + +commit 87670e1468ede6b04bb5e75edf7095b33293bd39 +Author: Eduardo Silva +Date: Fri Oct 29 20:08:05 2010 -0300 + + Configure: check for accept4() function, if it does not exists, + use the generic accept(). + +commit bceb8844c7f30063f27eb15674831104d1d2d59c +Author: Eduardo Silva +Date: Thu Oct 28 16:35:01 2010 -0300 + + Fix: set non-block to right socket + +commit 61e087db4f6e5969134cf455a2396d11ba71e680 +Author: Jonathan Gonzalez V +Date: Tue Oct 26 16:55:15 2010 -0300 + + liana_ssl: Added liana_ssl_close() to properly send the alert close to the client + +commit ac4377588a26da9bdc40d580b78a523af2476cc2 +Author: Jonathan Gonzalez V +Date: Tue Oct 26 16:16:34 2010 -0300 + + liana_ssl: Fix typo + +commit 00ccdcb1b9d4ee309d81d17c75824f4e0c6e2399 +Author: Jonathan Gonzalez V +Date: Tue Oct 26 13:31:34 2010 -0300 + + If function accept4 isn't defined we use accept and set the socket to O_NONBLOCK using fcntl + +commit 484f5ed099bf683e414b96bad2cdd3ab57dbbf9d +Author: Jonathan Gonzalez V +Date: Tue Oct 26 13:30:37 2010 -0300 + + If SOCK_NONBLOCK isn't defined we defined as 00004000 + +commit dca54fd7164e2327086ea3eb933c7ce9adc03371 +Author: Jonathan Gonzalez V +Date: Tue Oct 26 13:10:19 2010 -0300 + + If the user selected android as target platform we disable by default the plugins cheetah, palm and logger + +commit 177490bb9e7e0acb8d8dd02ed0aba99d030702ca +Merge: 0bc2c79 76bf7c5 +Author: Eduardo Silva +Date: Tue Oct 26 11:50:21 2010 -0300 + + Merge branch 'v0.12.0-dev' of ssh://git.monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit 0bc2c79153593489c4fa65a860ee450ff9087b99 +Author: Eduardo Silva +Date: Tue Oct 26 11:49:52 2010 -0300 + + Support platform in configuration: generic and android + +commit 76bf7c5041c24126ada9ef5993b91354edc00d8c +Author: Jonathan Gonzalez V +Date: Tue Oct 26 10:34:09 2010 -0300 + + If theres' noe EPOLLRDHUP defined we defined. Added pthread.h to scheduler.h and memory.h to clock.h + +commit 8db02c6e94a9285f4bd281367d24b0c7fba0bf66 +Author: Jonathan Gonzalez V +Date: Tue Oct 26 10:28:30 2010 -0300 + + Use the definition of offsetof in stddef.h if it's not there we define our own + +commit 401798351fd73b094aa659b6ef565b5312566868 +Author: Felipe Ortega +Date: Tue Oct 26 08:12:23 2010 -0300 + + [PATCH] Small typo correction in the configure script + +commit 87e1a2eecb4846c4a5250b1a3df4960b4778ffd0 +Author: Eduardo Silva +Date: Mon Oct 25 15:20:56 2010 -0300 + + Fix mandril plugin + +commit a32057fea602d7c0040604f90ea87ed1e1f7584b +Author: Eduardo Silva +Date: Mon Oct 25 14:51:36 2010 -0300 + + Add validation to epoll_create + +commit 30dcd40b90b499c9bc266fe723b0989ff8afb8e2 +Merge: 3de27b6 f092a61 +Author: Eduardo Silva +Date: Mon Oct 25 12:51:06 2010 -0300 + + Merge branch 'v0.12.0-dev' of ssh://git.monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit 3de27b641628a21e177469753a9c2a98d1f4bf71 +Author: Eduardo Silva +Date: Mon Oct 25 12:49:36 2010 -0300 + + Remove unnecessary sysctl.h + +commit f092a617f29c47d4c9decc7cbff2649f72e0f1fa +Author: Jonathan Gonzalez V +Date: Mon Oct 25 00:08:57 2010 -0300 + + liana_ssl: many changes to the way to handle and store data in buffers. We need work to pass the ab test + +commit 91a17b9f1699fb62ba5038566adbc07e001dec67 +Author: Eduardo Silva +Date: Sun Oct 24 23:39:19 2010 -0300 + + Fix rules for Cheetah and Liana_ssl + +commit 3e7a8c498696d0ff8076d37802fb5c040bcc8309 +Author: Eduardo Silva +Date: Thu Oct 21 16:45:48 2010 -0300 + + Dirlisting: use socket api instead of direct calls + +commit 801cb1a239ad5785d7d2922712715bcc154123df +Author: Eduardo Silva +Date: Wed Oct 20 21:16:43 2010 -0300 + + Move Security plugin to Mandril + +commit f01a287741a8001e13cfd3117bcff976ff0c6b3b +Author: Eduardo Silva +Date: Mon Oct 18 12:56:13 2010 -0300 + + Fix help space + +commit e4a20da91e96db0b2415b42713d462596acbcf9e +Author: Jonathan Gonzalez V +Date: Mon Oct 18 12:53:32 2010 -0300 + + Changed the way to separate the enabled/disable plugins list in the configure command + +commit 78e6426e5f484eacb405c7757ebcda0b0feb30be +Author: Eduardo Silva +Date: Mon Oct 18 12:33:29 2010 -0300 + + Improve configure script printing detailed messages + +commit 48943420222466391255937a9690c5aa12271c09 +Author: Eduardo Silva +Date: Sat Oct 16 23:40:59 2010 -0300 + + Improve KeepAlive checker + Palm plugin: rewrite hook _mkp_event_read + +commit 231ed4d077526128754f7550dd9f7b141ff0d577 +Author: Eduardo Silva +Date: Fri Oct 15 06:52:48 2010 -0300 + + Move plugin event list to mk_list + +commit 7dfae55e5c3bfcab4c4840f31aa7bf77d47d19f3 +Author: Eduardo Silva +Date: Fri Oct 15 06:26:54 2010 -0300 + + Code cleanup and extra validations for plugins + +commit 906a658bb64cab30095f6342deb8ca22d07a98b4 +Merge: 548fdc0 025b9d3 +Author: Eduardo Silva +Date: Fri Oct 15 05:33:46 2010 -0300 + + Merge branch 'v0.12.0-dev' of ssh://git.monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit 548fdc06f2444cacb13527a6d49e7fee873c6afc +Author: Eduardo Silva +Date: Thu Oct 14 22:16:44 2010 -0300 + + Palm plugin improvements + +commit 025b9d3fdb3a3a2ebde31238f0a189e5b94bb6e5 +Author: Jonathan Gonzalez V +Date: Thu Oct 14 16:33:34 2010 -0300 + + Replaced the use of mk_list_foreach for mk_list_foreach_safe + +commit 0d2e7512aa0174a9fc707e9ec32f2a171024f234 +Author: Eduardo Silva +Date: Wed Oct 13 17:25:15 2010 -0300 + + Plugin and palm fixes + +commit 4b9c99d2a1e5412297e301e05af8d5fc49382bbf +Author: Eduardo Silva +Date: Tue Oct 12 19:37:12 2010 -0300 + + Re-enable event_read by plugins in protocol layer + +commit 23d180b1953b6c79f5ff105f2bbca1338ddcf43b +Author: Eduardo Silva +Date: Mon Oct 11 14:01:32 2010 -0300 + + Remove palm server from monkey sources + +commit d41319bb65b6b6e6f48ac303d2ec5a612556446a +Merge: 612cb2a a7d7dc9 +Author: Eduardo Silva +Date: Sun Oct 10 14:37:55 2010 -0300 + + Merge branch 'v0.12.0-dev' of ssh://git.monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit 612cb2a0bc67a07681980d473819aad9498ba7d6 +Author: Eduardo Silva +Date: Sun Oct 10 14:37:11 2010 -0300 + + Rename main program + +commit ff47bded862c070e8580a5559468880534264672 +Author: Eduardo Silva +Date: Sun Oct 10 14:36:40 2010 -0300 + + Palm server: add license + +commit 20cb347f3f40b95536c16ebbabea9c31684d5738 +Author: Eduardo Silva +Date: Sun Oct 10 14:34:52 2010 -0300 + + new API sched_remove_client() + +commit a7d7dc93656f1ff69a260728dcbc293df28a6d9a +Author: Jonathan Gonzalez V +Date: Thu Oct 7 12:23:33 2010 -0400 + + liana_ssl: Fixed the return values for _mkp_event_read() to proper follow the new event api + +commit ec92758635e0b756e7f6c62bbf402797f9194de1 +Merge: 01c2ec2 388be7c +Author: Jonathan Gonzalez V +Date: Thu Oct 7 12:02:48 2010 -0400 + + Merge branch 'v0.12.0-dev' of git://git.monkey-project.com/monkey into v0.12.0-dev + +commit 01c2ec2f7da8478977dcbcf74e00d009130ca55b +Author: Jonathan Gonzalez V +Date: Thu Oct 7 12:00:34 2010 -0400 + + liana_ssl: Fix _mkp_network_io_writev() to put all the strings inside mk_iov struct and just do one write to the peer + +commit 4f2f59b9c78182ea1cd21e4c40ae73ff6388d546 +Author: Jonathan Gonzalez V +Date: Wed Oct 6 21:42:43 2010 -0400 + + liana_ssl: Fixed _mkp_network_io_send_file() and _mkp_network_io_write() to properly send a binary file + +commit 388be7c3f1bef91b4b4ee15cc249f7a674eedc10 +Author: Eduardo Silva +Date: Mon Oct 4 17:16:58 2010 -0400 + + Move core errors to mk_error() + +commit e2693b182f6610c181fa078c2c54e7613fd4e91e +Author: Eduardo Silva +Date: Mon Oct 4 16:58:32 2010 -0400 + + Config error to mk_error() + +commit 83a171882f3d4f9484ad2f8c2511cc0823b1182a +Author: Eduardo Silva +Date: Mon Oct 4 16:52:04 2010 -0400 + + New error function mk_error() + +commit 4503b8c5f52c4f73ca0c4858d68ca5738b9123cd +Author: Eduardo Silva +Date: Fri Oct 1 19:56:02 2010 -0400 + + Complete API events/hook interface + +commit a150fe18f23fa45ca0f9384f3434aa4081d867b5 +Author: Eduardo Silva +Date: Fri Oct 1 18:03:12 2010 -0400 + + Read events: fix cascade return values + +commit 793199a6cc1c8e5d64809382e54ac3dec50c4a85 +Author: Eduardo Silva +Date: Fri Oct 1 16:57:45 2010 -0400 + + New plugin event return types + +commit 02319e815dfb980cd2cebabac29f6ce935b2ee58 +Author: Eduardo Silva +Date: Fri Oct 1 15:03:27 2010 -0400 + + Fix configure help to 80cols + +commit 5c711413f63f7b77b7d0ec255b248605f069c9c2 +Merge: b5a9fd7 81d20ec +Author: Eduardo Silva +Date: Fri Oct 1 14:56:59 2010 -0400 + + Merge branch 'v0.12.0-dev' of ssh://git.monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit 81d20ec7654ddbfc5faecbcf9b0c97c815d3d601 +Author: Jonathan Gonzalez V +Date: Fri Oct 1 14:56:39 2010 -0400 + + Added the options --enable-plugins and --disable-plugins to the help of configure. Indent description string to be in the same column in the help of configure + +commit b5a9fd725b6a73cc66f35128709c72436b34ddb4 +Merge: 2786619 b179acf +Author: Eduardo Silva +Date: Fri Oct 1 14:47:22 2010 -0400 + + Merge branch 'v0.12.0-dev' of ssh://git.monkey-project.com/srv/git/monkey into v0.12.0-dev + +commit b179acfe173fddddfa65de87b0f8e3c1c52ad03f +Author: Jonathan Gonzalez V +Date: Fri Oct 1 13:47:49 2010 -0400 + + Added options --enable-plugins and --disable-plugins to the configure script + +commit 277fe8f72277230cbac91c9b096a84c8ef39c788 +Author: Jonathan Gonzalez V +Date: Fri Oct 1 13:19:10 2010 -0400 + + liana_ssl: Added info on how to enable the liana_ssl plugin and test it + +commit 3e9b351c331a5646323bbb34464f0970de6cbc68 +Author: Jonathan Gonzalez V +Date: Fri Oct 1 12:22:23 2010 -0400 + + liana_ssl: Added a check to the cert and key files to know if they exists + +commit 278661975f024193309af4ac04a8ce1243428afe +Author: Eduardo Silva +Date: Fri Oct 1 11:00:25 2010 -0400 + + Remove STAGE_15 + +commit adb65d1381b0b086cf7d3918f1826ec64ca56b8c +Author: Jonathan Gonzalez V +Date: Thu Sep 30 12:14:46 2010 -0400 + + Run indent comment to indent the code as it should be + +commit 4058507822b23dde09f989a060de0d82bcd95cf8 +Merge: 454daeb 4892adb +Author: Jonathan Gonzalez V +Date: Thu Sep 30 11:12:27 2010 -0400 + + Merge of liana_ssl plugin to the main dev branch + +commit 4892adb00ff82d33808f51e316511622b131c3bc +Author: Jonathan Gonzalez V +Date: Thu Sep 30 11:08:43 2010 -0400 + + Added some error checks and a better way to send files for _mkp_network_io_send_file() + +commit 27b0a613b499617adc4009f8aa30e5b391b441d1 +Author: Jonathan Gonzalez V +Date: Wed Sep 29 15:39:09 2010 -0400 + + Fixed the way to send the mk_iov, now it use _idx to send all the content inside the mk_iov. It should build just one string in the future + +commit 454daebb195bbd171466c81f3cc345f6fd8f99d1 +Author: Eduardo Silva +Date: Wed Sep 29 15:25:55 2010 -0400 + + Safe node removal + +commit 9ca1f7eee796458840d1d306cd7c93a4c311deca +Author: Jonathan Gonzalez V +Date: Wed Sep 29 15:21:43 2010 -0400 + + [PATCH] Added mk_list_foreach_safe to list.h and used it at request.c + +commit b702e19e90e2b2298a96f54179802a0c7f1fe5a1 +Author: Jonathan Gonzalez V +Date: Wed Sep 29 15:10:54 2010 -0400 + + Added mk_list_foreach_safe to list.h and used it at request.c + +commit 896f3cb0c5211ae79cba71561af000a3603437ee +Author: Jonathan Gonzalez V +Date: Wed Sep 29 14:20:12 2010 -0400 + + Latest fixed to work with ssl + +commit 8304c2535d0d0d8860bf6d66f41ddfb47f62b296 +Author: Jonathan Gonzalez V +Date: Wed Sep 29 11:47:06 2010 -0400 + + Move the handshake to the _mkp_event_read() if the socket it's already in our ssl list we presume that there were a handhskae before + +commit 35ddb964699571a4a79f85896548713b3c7cecc6 +Merge: 9945151 f51207b +Author: Jonathan Gonzalez V +Date: Wed Sep 29 10:48:21 2010 -0400 + + Merge branch 'v0.12.0-dev' into liana_ssl + +commit 9945151bb204976fc0326ebad9dedc007c675a29 +Author: Jonathan Gonzalez V +Date: Wed Sep 29 10:46:01 2010 -0400 + + Move the pthread_setspecific to the thread context and create a function to handle the read event + +commit f51207b8537a0bf3dad74056d16029801636e6d2 +Author: Eduardo Silva +Date: Tue Sep 28 22:55:36 2010 -0400 + + Experiment new event hooks model + +commit 1c030b3becba91ace8c7a85cd7a19c2c9f8772a9 +Author: Jonathan Gonzalez V +Date: Tue Sep 28 14:20:17 2010 -0400 + + Added a pre-capability to send files + +commit 3e876511a542c8496eb4f188fd417d186d274c82 +Author: Eduardo Silva +Date: Tue Sep 28 12:49:11 2010 -0400 + + Fix SIGTERM and remove unnecessary check + +commit 0b5f326747d4f65e3f9db98c022d409891b2e872 +Author: Eduardo Silva +Date: Mon Sep 27 23:27:13 2010 -0400 + + Palm Server: fix POST length limitation + +commit be3e00af962d22d411a3ae918a57eacdc8235568 +Merge: 6bb7846 db55bae +Author: Jonathan Gonzalez V +Date: Sun Sep 26 11:23:20 2010 -0400 + + Merge branch 'v0.12.0-dev' into liana_ssl + +commit 6bb7846fc4c6dadcbb62d513fc9053b913f1c955 +Author: Jonathan Gonzalez V +Date: Sun Sep 26 11:04:50 2010 -0400 + + Changed send for write at handshake process added some trace functions + +commit 6049fc715188683ddcf23f6a2e825c6121a7d1f2 +Author: Jonathan Gonzalez V +Date: Sun Sep 26 11:03:32 2010 -0400 + + Fix local path of liana_ssl certificates + +commit db55baee41673afca9f1d2027cc6bf2a5b626a3e +Author: Eduardo Silva +Date: Sat Sep 25 13:59:21 2010 -0400 + + Fix palm plugin request list init + +commit 47326fdde53d88c4e542238d07b9bdf2c54164aa +Merge: 8243f09 2a79c12 +Author: Eduardo Silva +Date: Sat Sep 25 13:31:41 2010 -0400 + + fix merge + +commit 8243f09f55406185dfeff6e1f27c99eb9fcd46ab +Author: Eduardo Silva +Date: Sat Sep 25 13:30:34 2010 -0400 + + fix cheetah conf + +commit 5f4120cc6583a2d80c1cce2f52f2a66c4cc671b6 +Author: Eduardo Silva +Date: Sat Sep 25 13:18:34 2010 -0400 + + Use network plugin when writting response headers + +commit 29a17dfa94a64537d0fce46dabdc5c3d75e27981 +Author: Eduardo Silva +Date: Sat Sep 25 13:08:21 2010 -0400 + + New STAGE_15 + +commit c56c76c6bb498ca9133d89ee7e0e370cf596c60b +Merge: ab674dd 2a79c12 +Author: Jonathan Gonzalez V +Date: Thu Sep 23 23:18:24 2010 -0400 + + Merge branch 'v0.12.0-dev' into liana_ssl + +commit ab674dde6ef93176cb0b18659715f3d720e166bf +Author: Jonathan Gonzalez V +Date: Thu Sep 23 23:17:51 2010 -0400 + + Added liana_conf() to read from the configuration file of the plugin the proper path for Cert and Key file + +commit 2a79c12f182f2d1bb435b8f562556d4b50aff410 +Author: Eduardo Silva +Date: Thu Sep 23 23:03:27 2010 -0400 + + Add cheetah conf + +commit 3d3b711d3c3dda0f262394dd3784d2e4ceb2f290 +Author: Jonathan Gonzalez V +Date: Tue Sep 21 16:50:52 2010 -0400 + + Added disabled file to start this plugin disabled and liana_ssl.h + +commit 0e5eda9cfc93a6d66faacff0d5442ab3651e9fb9 +Author: Jonathan Gonzalez V +Date: Mon Sep 20 18:45:47 2010 -0400 + + Fixed the handshake process + +commit b474a1c415ed3fffd1ebf0b12a31e05657dd0cd1 +Author: Jonathan Gonzalez V +Date: Mon Sep 20 18:44:26 2010 -0400 + + Fixed Makefile.in to properly compile with matrixssl 3.1 + +commit e7c91da1d6e50a42a0476ef391e6a152469f7900 +Merge: 76ed8bc 7207773 +Author: Jonathan Gonzalez V +Date: Sat Sep 18 11:00:13 2010 -0400 + + Merge with v0.12.0-dev to get latest changes related to sessions and new manage of request + +commit 76ed8bc4ccf020b3cff692b9e1025c38d208fa50 +Author: Jonathan Gonzalez V +Date: Sat Sep 18 10:52:38 2010 -0400 + + Removed innecesary data from mk_liana_ssl. Start the work to support the new API for matrixssl 3.1 + +commit 1a1acc3a008f98288e21636166b6777ce475196e +Author: Jonathan Gonzalez V +Date: Sat Sep 18 10:51:33 2010 -0400 + + Fix makefile.in to fit with the current matrixssl 3.1 package + +commit bdbe5f8f541dcadff9c0082d0aa709996640cbc3 +Author: Eduardo Silva +Date: Tue Sep 14 14:50:31 2010 -0400 + + Update RPM spec to 0.12.0 + +commit 720777369255538b674344104afdc80fba1180f8 +Author: Eduardo Silva +Date: Sat Sep 4 10:00:38 2010 -0400 + + Adapt plugins to new string calls + +commit 61b5f28a50bbc1159d2f0b676a47122382ff325a +Author: Eduardo Silva +Date: Sat Sep 4 09:52:17 2010 -0400 + + Refactor string functions + +commit 7377249a28a084a0ebe170fe37966a6321953b53 +Author: Eduardo Silva +Date: Fri Sep 3 19:33:43 2010 -0400 + + Adapt cheetah to new list implementation + +commit 379a79cb864fede7a08bf1c15d3d55448c6d60c9 +Author: Eduardo Silva +Date: Fri Sep 3 19:20:53 2010 -0400 + + Plugin: use new monkey list interface + +commit 659b1509aea487f7b6614c0e970fe2bfb4c5868b +Author: Eduardo Silva +Date: Sun Aug 29 20:33:24 2010 -0400 + + Palm Plugin: use new list implementation + +commit 4d4c98e05c640e53c8f319286c1764e82f9dcdd0 +Author: Eduardo Silva +Date: Sun Aug 29 16:19:51 2010 -0400 + + QA: fix post_test2.htt wait time + +commit e47aee64c80309e658b0795bcc7f2ed8065a0c7b +Author: Eduardo Silva +Date: Sun Aug 29 16:15:13 2010 -0400 + + QA: new post_test03.htt - check post timeout/incomplete data + +commit 9250551a9b7552b6168f9c0672448d2768174409 +Author: Eduardo Silva +Date: Sun Aug 29 11:18:21 2010 -0400 + + Alloc node for premature close + +commit 6795a43a53201a9bfd07f0a877a0dbad5e9259d4 +Author: Eduardo Silva +Date: Sun Aug 29 10:58:21 2010 -0400 + + Minor fixes + +commit ab9157ab5b087ab97f8a1faabd2881f25d8a465f +Author: Eduardo Silva +Date: Sun Aug 29 10:47:38 2010 -0400 + + Remove validation message + +commit 48c1dda1d790479f745780bb038c527643306d08 +Author: Eduardo Silva +Date: Sun Aug 29 10:45:50 2010 -0400 + + Security: use new CLIENT_SESSION and SESSION_REQUEST model + +commit 99cbb5daf09a903b5b0863930edb94de880ff3e7 +Author: Eduardo Silva +Date: Sun Aug 29 10:44:24 2010 -0400 + + Palm: use new CLIENT_SESSION and SESSION_REQUEST model + +commit 659aa55b801503c9597ced82df62d0efc1fd8111 +Author: Eduardo Silva +Date: Sun Aug 29 10:37:14 2010 -0400 + + Logger: use new CLIENT_SESSION and SESSION_REQUEST model + +commit 258c1b20089c307f3f1fddda7e8c393e746faf33 +Author: Eduardo Silva +Date: Sun Aug 29 10:36:08 2010 -0400 + + Dirlisting: use new CLIENT_SESSION and SESSION_REQUEST model + +commit c187696da6ff9e326f02fe6403463493f564cec2 +Author: Eduardo Silva +Date: Sun Aug 29 10:31:56 2010 -0400 + + Core: new CLIENT_SESSION and SESSION_REQUEST architecture + +commit e3c7b98a874b06b3bdf465141683754e46ac32df +Author: Eduardo Silva +Date: Sat Aug 28 09:19:09 2010 -0400 + + request.c: move to new list implementation + +commit 65f8675bb4e5fb8895ebfc4a517358f36dda8d66 +Author: Eduardo Silva +Date: Fri Aug 27 20:22:26 2010 -0400 + + List: add list_entry_next call + +commit 5ae164cfb9b2a72ac2c2f37a4d09d8c757e37d54 +Author: Eduardo Silva +Date: Fri Aug 27 19:42:04 2010 -0400 + + List: implement list_entry_first and list_entry_last + +commit eeb2a5df3a6589ead6def010efc7a335c7fa83c6 +Author: Eduardo Silva +Date: Fri Aug 27 19:35:04 2010 -0400 + + scheduler.c: move to new list implementation + +commit f0aee1b82ffecba256f178757475269fd3d5b652 +Author: Eduardo Silva +Date: Fri Aug 27 17:12:34 2010 -0400 + + mimetype.c: move to new list implementation + +commit 0b54dbbf96c640880ef410f437bd47aca3c30581 +Author: Eduardo Silva +Date: Fri Aug 27 16:18:37 2010 -0400 + + Cheetah: for server mode if monkey runs in background + +commit eb99074ea30525de97377639bf17504615cc3ed3 +Author: Eduardo Silva +Date: Fri Aug 27 16:11:41 2010 -0400 + + Define mk_plugin_exit_all func + +commit c20d8aefec8d96ffce03314d4bf37eb8a6088e2b +Author: Eduardo Silva +Date: Fri Aug 27 16:09:38 2010 -0400 + + Add is_daemon variable to config struct + +commit 7bf032e9e5ec82e91400f87f95fac510d3b5ef5e +Author: Eduardo Silva +Date: Fri Aug 27 16:05:21 2010 -0400 + + Cheetah: status command - print listen mode + +commit 2e1c526e240f5326db5ddc91a3a20558caf90633 +Author: Eduardo Silva +Date: Fri Aug 27 15:44:17 2010 -0400 + + Cheetah: print all configuration in a vhost + +commit 3aeb58f78f6e901dcf3ae4b59702eb0143b5fb1c +Author: Jonathan Gonzalez V +Date: Fri Aug 27 12:45:13 2010 -0400 + + gg + +commit 3194181081e9586f67ee8e7384b06effbec6e076 +Author: Eduardo Silva +Date: Wed Aug 25 11:58:23 2010 -0400 + + Deprecate AccessLog and Error log in vhost conf + +commit 2068e5b7d23b0e2f391d70753fc6c047b6d0c13a +Author: Eduardo Silva +Date: Wed Aug 25 11:22:35 2010 -0400 + + Cheetah: code cleanup + +commit 371e5de10a34090c4f3a7be8e0a09724a123bbb7 +Author: Eduardo Silva +Date: Wed Aug 25 11:04:15 2010 -0400 + + Cheetah: fix fprintf() compiler warning + +commit 306317ef8dd435aa300c72cc01fccc771fdaf58e +Author: Eduardo Silva +Date: Wed Aug 25 10:58:44 2010 -0400 + + Cheetah: remove socket server when exit + +commit 78c98b44eaaa57a34f27278a7fe633f006a75598 +Author: Eduardo Silva +Date: Wed Aug 25 10:52:17 2010 -0400 + + Cheetah: New server mode through unix domain socket + +commit cc028143185a16300c11b774f41348763665fa5e +Author: Jonathan Gonzalez V +Date: Tue Aug 24 10:31:10 2010 -0400 + + Added some trace and fix the compilation at the Makefile.in file + +commit a4f6726282bf9e3524c2f37f18524809310016ac +Author: Jonathan Gonzalez V +Date: Tue Aug 3 14:36:40 2010 -0400 + + First work on liana_ssl + +commit b130094bf7401d3d3cf3fee082405724cbe784c8 +Author: Eduardo Silva +Date: Sat Jul 31 14:54:18 2010 -0400 + + Cheetah Plugin: remove pipe when monkey exit + +commit 5c24b997703d85629da850dd4b41cb1c905ea213 +Author: Eduardo Silva +Date: Sat Jul 31 12:05:07 2010 -0400 + + Plugins: invoke _mkp_exit() on SIGINT + +commit b9f4e1f51a51eeb87bec7546cd5bef46069bc756 +Author: Eduardo Silva +Date: Sat Jul 31 11:45:15 2010 -0400 + + Cheetah Plugin: new conf and new PIPE communication support + +commit 9918ccce027eaaad5c88eb2dddd871cfa4b62fc5 +Author: Eduardo Silva +Date: Fri Jul 30 20:59:29 2010 -0400 + + Cheetah Plugin: new cutils.c file + +commit 5f4bd527e5e401085c93323aaa9a258024594f83 +Author: Eduardo Silva +Date: Fri Jul 30 14:31:42 2010 -0400 + + Cheetah: move registration to top + +commit 102c6832589303c84b556dc51a1f5028221074a8 +Author: Eduardo Silva +Date: Fri Jul 30 14:30:41 2010 -0400 + + Liana: move registration to top + +commit 293e0b51b7d1de195c41f9cfe5bd1ac63d9fbf81 +Author: Eduardo Silva +Date: Fri Jul 30 14:30:14 2010 -0400 + + Fix MK_TRACE and move registration to top on each plugin + +commit c70bd21509a637eb2a7f5b4ff3d4ea6a20dc4397 +Author: Eduardo Silva +Date: Fri Jul 30 13:23:30 2010 -0400 + + Temporal fix for PLUGIN_TRACE + +commit 8a76bdc444b6ad33b97701363b2384fc16782d15 +Author: Eduardo Silva +Date: Fri Jul 30 13:14:57 2010 -0400 + + Plugin struct cleanup + +commit d2884679f8ebc79ef745f942f1c606f42490b8be +Author: Eduardo Silva +Date: Fri Jul 30 13:11:18 2010 -0400 + + Update version to 0.12.0-dev + +commit 30f21c8efed492e65800ecc9d94a303895c7886e +Author: Eduardo Silva +Date: Fri Jul 30 13:10:56 2010 -0400 + + Security Plugin: Use new registration method + +commit 3eabae477e992dcbda6b43e90e9c07bd9887d3fc +Author: Eduardo Silva +Date: Fri Jul 30 13:07:36 2010 -0400 + + Palm Plugin: Use new registration method + +commit 463fe33207670f2d969e5ad9dd0e18d7761c391e +Author: Eduardo Silva +Date: Fri Jul 30 13:04:19 2010 -0400 + + Dirlisting: Use new registration method + +commit cc77514b0d91a7cb205ec1a75f7f2e71b0db9f04 +Author: Eduardo Silva +Date: Fri Jul 30 12:43:43 2010 -0400 + + Liana: Use new registration method + +commit 2c92b058fd04d60045ad9f5ecf0f5c59f684afc3 +Author: Eduardo Silva +Date: Fri Jul 30 12:36:37 2010 -0400 + + New Plugin registration macro: MONKEY_PLUGIN() + +commit 6a70333667ae2a57652e0d10f060876e24348c97 +Author: Eduardo Silva +Date: Thu Jul 29 19:56:06 2010 -0400 + + New plugin header file for plugins: MKPlugin.h + +commit 9c4738722e470e29b1be56d0d693bb7aaf3fa03d +Author: Eduardo Silva +Date: Thu Jul 29 19:16:52 2010 -0400 + + Cheetah: refactoring code + +commit 62a441e8bddcd239ed9c3546b6c2cd8130fec6ff +Author: Eduardo Silva +Date: Thu Jul 29 18:29:33 2010 -0400 + + Cheetah: move constants to header file + +commit b97c56be2a6f57c04f376955cc1a9d20a517a022 +Author: Eduardo Silva +Date: Thu Jul 29 17:59:50 2010 -0400 + + Monkey 0.11.1 + +commit 5beb18fd6d45f3ff739f69dad62b9abb6b2ad096 +Author: Eduardo Silva +Date: Thu Jul 29 17:38:17 2010 -0400 + + Limit POST DATA length to 65536 bytes + +commit 51a7e58736ec510dcfa12ec781a16b59e68f61e7 +Author: Eduardo Silva +Date: Thu Jul 29 10:02:31 2010 -0400 + + move thread init keys to new func + +commit ee2e8a08182094d4a21f3a46b32d08bdd12bb593 +Author: Eduardo Silva +Date: Wed Jul 28 18:48:41 2010 -0400 + + Move logger global configuration to conf/plugins/logger/logger.conf + +commit 4e8904d569afabf0baffb8a705a36c09e3bc65cf +Author: Eduardo Silva +Date: Mon Jul 26 12:36:14 2010 -0400 + + Fix data type in mk_mem_malloc_z() + +commit ba9bc9b0382ae6c996d339ebe8a8664de219e3ab +Author: Davidlohr Bueso +Date: Mon Jul 26 11:10:28 2010 -0400 + + [PATCH] Grammar and typo fixes + +commit 9de8f26ce29358d04bc31af98cfea5c6158f251f +Author: Eduardo Silva +Date: Mon Jul 26 11:01:54 2010 -0400 + + Fix space + +commit cd5d99614961182d6ad1dbf9b36a885d6e08c21e +Author: Eduardo Silva +Date: Mon Jul 26 10:35:42 2010 -0400 + + Add Content-Encoding header support + +commit 1125d0a2a21b3a8ebc0e5430a68fb3149f9322a2 +Author: Davidlohr Bueso +Date: Mon Jul 26 10:17:24 2010 -0400 + + [PATCH] Makefile changes + +commit 595cd5c336bf7e0caf9238433c223138b0162b97 +Author: Eduardo Silva +Date: Sun Jul 25 20:11:02 2010 -0400 + + QA: update post_test02.htt comments + +commit d3b0873baf6132c07f46549ff3d36c9c3025f814 +Author: Eduardo Silva +Date: Sun Jul 25 19:54:33 2010 -0400 + + Validate content-length in http pending + +commit 1200abd552e02ab1937f4ae9ab94bff156fd603a +Author: Eduardo Silva +Date: Sun Jul 25 19:51:03 2010 -0400 + + Do not process request if post data is still pending + +commit 9057accef008661f4e4978912f13b661a21d6ac1 +Author: Eduardo Silva +Date: Sun Jul 25 18:58:03 2010 -0400 + + Implement mk_request_premature_close + +commit 4173c8ed7211baa2259c5c73d571a04d7eece398 +Author: Eduardo Silva +Date: Sun Jul 25 18:09:26 2010 -0400 + + Add missed list.h + +commit 75fc5f98ea307cea8b64a9cec24f2d52fe17c1fb +Author: Eduardo Silva +Date: Sun Jul 25 18:08:12 2010 -0400 + + HTTP: Improve POST data receiver + Palm: Safe POST data sender + +commit a0c75be90c8e57eeff576bbac15a72c01ddaab07 +Author: Eduardo Silva +Date: Sat Jul 24 01:57:27 2010 -0400 + + Little Palm fixes + +commit 073733b953e8980f11bb5d0a9f4aa0272a534b32 +Author: Eduardo Silva +Date: Sat Jul 24 01:41:50 2010 -0400 + + Palm Server: Fix POST data support + +commit 0b706441321e08cb6a8163b29ab1951f4276b0d9 +Author: Jonathan Gonzalez V +Date: Fri Jul 23 21:10:03 2010 -0400 + + [PATCH] Added list.h with the needed definitions to manage double linked list. Added list.h to plugin.h and utils.h + +commit 3d1c5ef131ade47652459b6ba27ee76254b26a5d +Author: Eduardo Silva +Date: Fri Jul 23 21:02:33 2010 -0400 + + Palm Plugin: Enable REMOTE_ADDR cgi header to palm request + +commit ae02e21a017b80e55cdc77270ef642b05a86b304 +Author: Eduardo Silva +Date: Fri Jul 23 20:58:12 2010 -0400 + + Add host_port mk_pointer to request struct + Palm Plugin: add HOST_PORT header in palm request + +commit 0e6273e1c20c6f9437e9d09f9dc11a725761b010 +Author: Eduardo Silva +Date: Fri Jul 23 19:55:05 2010 -0400 + + Set mk_pointer config->port and add server port to Palm plugin + +commit 62686138c50dc3888dd53a7bc2baa68ac53f969e +Author: Eduardo Silva +Date: Fri Jul 23 18:22:06 2010 -0400 + + Validate header response status on send + Palm Plugin: check Status CGI field + +commit 81ba0f36a7aa173fbbcfaa04728d3a1b73f5d632 +Author: Horst H. von Brand +Date: Thu Jul 22 14:33:30 2010 -0400 + + [PATCH 6/6] Fix file/directory names + +commit 9d5e869d701be53b650fa9f1378b137ce5ffaff0 +Author: Horst H. von Brand +Date: Thu Jul 22 14:32:52 2010 -0400 + + [PATCH 5/6] Bump release in specfile + +commit 1c63c46f0f075bfb77a945b3a93ad8ca35e1989a +Author: Horst H. von Brand +Date: Thu Jul 22 14:32:02 2010 -0400 + + [PATCH 4/6] Package correct monkey.conf in specfile + +commit 67a824425ada06058a43ccb5c9af357e6b62ef65 +Author: Horst H. von Brand +Date: Thu Jul 22 14:31:28 2010 -0400 + + [PATCH 3/6] Add locale handling to specfile + +commit cba7391985ec410c2efc49c5651699f37f4a995c +Author: Horst H. von Brand +Date: Thu Jul 22 14:30:45 2010 -0400 + + [PATCH 2/6] Reorder tags in specfile according to Fedora guidelines + +commit f97e6010f9480097842bbc5d729e4c89ab4b62e8 +Author: Horst H. von Brand +Date: Thu Jul 22 14:29:18 2010 -0400 + + [PATCH 1/6] Minor cleanup of the spec file + +commit 0dfa317d1c5b33aeebdc21bb15d18f16a7e3cbc4 +Author: Eduardo Silva +Date: Thu Jul 22 11:25:39 2010 -0400 + + Update version to 0.11.1-git + +commit d2d8a3384f40a5ccbf2ae12841e052f63f0ce28b +Author: Eduardo Silva +Date: Thu Jul 22 11:03:24 2010 -0400 + + Security Plugin: set http status for URL rule match + +commit 9ccb145c6c2ba71aece45697a6c87dedd1382911 +Author: Eduardo Silva +Date: Thu Jul 22 10:20:47 2010 -0400 + + Strip plugins on make install + +commit 4c5e441895fbe30e32907d326c145799c67901b4 +Author: Eduardo Silva +Date: Thu Jul 22 09:57:19 2010 -0400 + + Drop status_p from headers and fix Logger plugin + +commit 76ce40169c0311aa940edfce59b1c1c26ef71e2c +Author: Eduardo Silva +Date: Tue Jul 20 15:04:18 2010 -0400 + + Fix thread_key plugin connector + +commit bc8f78bc072ba5ef163aa33bfa00d77ff81d0e98 +Author: Eduardo Silva +Date: Mon Jul 19 12:33:55 2010 -0400 + + Safe use of va_start()/vsnprintf()/va_end() + +commit a34265f1e00e4af717d335ab48c49a268a10c945 +Author: Eduardo Silva +Date: Mon Jul 19 12:13:51 2010 -0400 + + Dirty hack to fix vsnprintf() problem in 32 and 64 bits + +commit 573f51412b628a4f643b0227fdedeb104305007b +Author: Eduardo Silva +Date: Mon Jul 19 11:12:12 2010 -0400 + + Fix 64 bits warnings and issues + +commit 792f05a50ee763a9b9e80867a86b521c1f67607b +Author: Eduardo Silva +Date: Sat Jul 17 10:30:31 2010 -0400 + + Configure script: replace make by $(MAKE) + +commit 12c8cd5d413e1820481af7dd5a102a9b692d9924 +Author: Eduardo Silva +Date: Sat Jul 17 10:20:02 2010 -0400 + + Fix pointers warning + +commit d4b84332f2a54f1030957eb3e0d834bb4546cfdc +Author: Eduardo Silva +Date: Fri Jul 16 08:53:43 2010 -0400 + + Monkey 0.11.0 + +commit 924ac75d9ba4f5efd8163ef3c53522cccc2bcf47 +Author: Eduardo Silva +Date: Wed Jul 14 10:55:40 2010 -0400 + + Plugins: use compiler defined in environment + +commit fd4a7a35469ebfc6e6622816c8199621a5e0be3d +Author: Eduardo Silva +Date: Mon Jul 12 13:35:08 2010 -0400 + + Fix config.c merge + +commit 52eddac688373c6f0e46860e7324fd5a801df9df +Author: Eduardo Silva +Date: Mon Jul 12 13:25:06 2010 -0400 + + Update configure script to v0.11.0-git + +commit 51c34c1a2a13a230557584f92b4a90b761e58216 +Author: Eduardo Silva +Date: Mon Jul 12 13:24:38 2010 -0400 + + Fix merge + +commit f57f5485a1aa3c6cf92513a3c414c9803172bc72 +Merge: dff448d 30fc792 +Author: Eduardo Silva +Date: Mon Jul 12 13:20:41 2010 -0400 + + Merge v0.11.0-dev branch + +commit 30fc792384a1e564fdf707c5dab38bf8d4029ba8 +Author: Eduardo Silva +Date: Mon Jul 12 10:48:51 2010 -0400 + + Read somaxconn from procfs + +commit 28931dee0f8723d06e1ad31675945ca4ed9f4776 +Author: Eduardo Silva +Date: Mon Jul 12 10:13:13 2010 -0400 + + Palm Plugin: Set status 500 on palm server connection problem + +commit 6c88d399921bedb862c8eab11192dac46ea2faa4 +Author: Eduardo Silva +Date: Mon Jul 12 10:04:56 2010 -0400 + + Missed realloc() + +commit df8493659092a84c69f6c0a6ba68fdfae4e31ab6 +Author: Eduardo Silva +Date: Mon Jul 12 00:34:27 2010 -0400 + + Ser worker capacity inside configuration + +commit bd38084c55f7caadc9664ad1c3af3a27b79ab4f3 +Author: Eduardo Silva +Date: Mon Jul 12 00:30:06 2010 -0400 + + Cheetah! Plugin: Add new 'config' command + Remove indexfile struct + +commit 6462cf76e62e97faa3936666dd9509d30811e7da +Author: Eduardo Silva +Date: Sun Jul 11 23:52:14 2010 -0400 + + Print Monkey details before invoke process context + +commit c852ebed7aff6bcdd894d47c1451c832a1958370 +Author: Eduardo Silva +Date: Sun Jul 11 23:47:19 2010 -0400 + + Default request chunk size set to 4096 bytes + +commit 5f702e42d3b541a06772a4ace443ba2f590f5b94 +Author: Eduardo Silva +Date: Sun Jul 11 23:38:53 2010 -0400 + + New MaxRequestSize configuration directive + +commit f8f2a7f4eb175b08fc9819284d6bf030626c7e08 +Author: Eduardo Silva +Date: Sun Jul 11 23:05:34 2010 -0400 + + Request buffer size now is dynamic :) + +commit 02c92f0fec10c86eaf18a82fe2eb126a809942b3 +Author: Eduardo Silva +Date: Sun Jul 11 18:44:04 2010 -0400 + + Request error: just validate page pointer + +commit 1435fb94b021225e35fbd6ba5d7e5903f584fb3f +Author: Eduardo Silva +Date: Sun Jul 11 18:38:28 2010 -0400 + + Logger Plugin: Add 413 status 'Request Entity Too Large' + +commit 4df6376fcb2d2bc847332363d590c01535dabb3c +Author: Eduardo Silva +Date: Sun Jul 11 18:21:32 2010 -0400 + + QA: Add test and checker for 413 error + +commit 0ed8022c6981c3b2c3ec5fc3ac0c6ce639c6b902 +Author: Eduardo Silva +Date: Sun Jul 11 18:16:23 2010 -0400 + + Refactoring mk_request_error() + Do not send content-length header if HEAD method is used + +commit 370d661b54af1f0c88bf0f4a030ec55745e165dc +Author: Eduardo Silva +Date: Sun Jul 11 18:03:01 2010 -0400 + + Add status code 413: Request Entity Too Large + +commit bf291c1c46a94087b5d6a33aea2672704b43731a +Author: Eduardo Silva +Date: Sun Jul 11 11:48:18 2010 -0400 + + Fix plugin thread key API + Plugin: Fix thread event list + Plugin API: new event_del() interface + Palm Plugin: Fix + Palm Server: remove unnecessary pipe()s + More descriptive TRACE messages + +commit 72bb731716fb1d0c07b957471c5ffed45216cf7d +Author: Eduardo Silva +Date: Fri Jul 9 19:07:06 2010 -0400 + + update a line + +commit b8e50e13f1bd5e139949def5ca32cc0e08b7781e +Author: Eduardo Silva +Date: Fri Jul 9 14:50:37 2010 -0400 + + Palm Plugin: Fix request_free + +commit 8396ea6d5e99e74a30b3405d56012de540bb0494 +Author: Eduardo Silva +Date: Fri Jul 9 11:40:15 2010 -0400 + + Do not close STDIN in daemon mode + +commit a7268886df2aeb5b008902ea44f5a4d89d1bbbaf +Author: Eduardo Silva +Date: Fri Jul 9 11:12:24 2010 -0400 + + RPM SPEC: Add 'monkey' user to the system + RPM SPEC: Fix log directory permission + +commit 074e76d262d971266cc2930fa2aa92800ee04c5d +Author: Eduardo Silva +Date: Fri Jul 9 10:33:09 2010 -0400 + + RPM Spec: add logdir + +commit df6273eaa8bf5bcaaff13ecaf194230cf86703b7 +Author: Eduardo Silva +Date: Fri Jul 9 10:19:21 2010 -0400 + + Fix configuration text template line lengths + +commit 356a27c7221724f49c0ffffd3c2885c09cde1bd6 +Author: Eduardo Silva +Date: Fri Jul 9 09:53:48 2010 -0400 + + New RPM builder spec file + +commit 273ed1d3f5097e00cf475ba70ed121cb67e7ef73 +Author: Eduardo Silva +Date: Thu Jul 8 14:28:44 2010 -0400 + + Palm Plugin: little changes + +commit e0a4f72493f0bd287906417fdeb12a883fbf3e46 +Author: Eduardo Silva +Date: Mon Jul 5 16:03:26 2010 -0400 + + Palm Plugin: fix thread key var name + +commit be159a359954e9a2d1a2f23cca200d95b840f2b3 +Author: Eduardo Silva +Date: Fri Jul 2 08:37:16 2010 -0400 + + Palm: Launch each palm in a new process context + Palm: Fix auto create new child on die + Palm: Kill palm pids when the server exit + +commit bc5de8033ba88761edddd7202a97d46343f95b76 +Author: Eduardo Silva +Date: Thu Jul 1 11:12:01 2010 -0400 + + Palm: Fix POST method + +commit 9cba0a0a7ca5494f58ea2c6252ccdf402421d14c +Author: Eduardo Silva +Date: Wed Jun 30 22:55:09 2010 -0400 + + QA: remove files + +commit fdc7934d57f1196c57c4290a68e33918c219b4a4 +Author: Eduardo Silva +Date: Wed Jun 30 22:53:55 2010 -0400 + + Add missed QA log scripts + +commit 48c0af36778977475dc0e5d2800b678204d5d543 +Author: Eduardo Silva +Date: Wed Jun 30 22:40:01 2010 -0400 + + QA: Fix headers case insensitive log check + +commit d58a0a61b4de2f70c19b106ecf81515a7f2b350f +Author: Eduardo Silva +Date: Wed Jun 30 21:47:14 2010 -0400 + + Set content length inside http_range_parse() if ranges are set + +commit 83e6716334dee76368722a69036fbae0b02f4435 +Author: Eduardo Silva +Date: Tue Jun 29 20:08:56 2010 -0400 + + Add mk_string_itop() to plugin API + Logger: use new str_itop() API + Remove mk_utils_int2mkp() function + +commit 355150aa5640d261bf3c08771b4a8f1af261c8ca +Author: Eduardo Silva +Date: Tue Jun 29 15:23:36 2010 -0400 + + Faster mk_utils_int2mkp() + Add mk_string_itop() + +commit f38ab6217b55eb8c5725c61911e39eae3b38adb0 +Author: Eduardo Silva +Date: Mon Jun 28 17:21:16 2010 -0400 + + Trim each key/value configuration string + +commit 8e4dad88cd26ce75a6699aaebf5281769ff66f59 +Author: Eduardo Silva +Date: Mon Jun 28 17:17:50 2010 -0400 + + Add internal mk_string_trim() + +commit 88edd1d0397f315ffb188e15c60200f18566777f +Author: Eduardo Silva +Date: Mon Jun 28 11:26:32 2010 -0400 + + Remove deprecated maxclients and maxip from configuration struct + +commit dc1a3f090af1225e15b751fefc05f1a253914f59 +Author: Eduardo Silva +Date: Mon Jun 28 11:25:15 2010 -0400 + + Fix workers configuration value + +commit 3229fc1c8fe051fc4fba20ca063c80806611789b +Author: Eduardo Silva +Date: Sun Jun 27 12:11:14 2010 -0400 + + Good bye strftime(), it's not you, it's me :P + +commit ccec86920bfee90d5c610ad412ba39a3c609fab6 +Author: Eduardo Silva +Date: Sat Jun 26 21:48:31 2010 -0400 + + Send bad request response headers on bad request + +commit ff220b1782bb875506c32f75e931e8ec8c845a8a +Author: Eduardo Silva +Date: Sat Jun 26 16:11:55 2010 -0400 + + Replace some pthread_getspecific() calls for the new mk_cache_get() + +commit eabdee01173e11be445d0b0aa19b6c73627206ce +Author: Eduardo Silva +Date: Sat Jun 26 16:09:09 2010 -0400 + + QA: Add last_modified qa script + +commit 8fd4815879245979b191627767c1dd765a6b1ee0 +Author: Eduardo Silva +Date: Sat Jun 26 16:07:37 2010 -0400 + + Fix 'Last-Modified' response header + +commit 9ce7b4d9cf99db3191592352593bccab6fec4747 +Author: Eduardo Silva +Date: Wed Jun 23 18:49:47 2010 -0400 + + Add uri_01 log checker + +commit 07377274e993e9098182cecfba1f5c9e541c8852 +Author: Eduardo Silva +Date: Wed Jun 23 18:49:23 2010 -0400 + + QA: Add protocol test files + +commit 296c5135d00f0432254df4ffcc8da5d9220051c9 +Author: Eduardo Silva +Date: Wed Jun 23 18:49:01 2010 -0400 + + Forward Port: Validate empty protocol + +commit 11605af53081fa701f2d20ef0c8dbf9908829f1b +Author: Eduardo Silva +Date: Wed Jun 23 18:46:11 2010 -0400 + + Forward Port: Fix data type for uri_len in http.c + +commit 762a439eb2af9dc0b6cf1cee5de8c3694623f542 +Author: Eduardo Silva +Date: Wed Jun 23 18:44:08 2010 -0400 + + Forward Port: Protect mk_buffer_cat() from invalid length + +commit 4117c2b010d8982594ac7e64a8da11a699c5a0d5 +Author: Eduardo Silva +Date: Wed Jun 23 18:42:43 2010 -0400 + + QA: Add uri test files + +commit 7f1a723d158aac6ad35446e7c492260c35837241 +Author: Eduardo Silva +Date: Wed Jun 23 18:40:20 2010 -0400 + + Forward Port: Force validation of initial slash in request URI + +commit dff448d17fab961ee7947e6e630296a9a16f87f4 +Author: Eduardo Silva +Date: Wed Jun 23 17:55:36 2010 -0400 + + Monkey 0.10.3 + +commit ece8dbc85051f2ce7da69ae8b8338ab302cb6b15 +Author: Eduardo Silva +Date: Wed Jun 23 17:24:05 2010 -0400 + + QA: Add protocol_02 test + +commit a1bcc16e8cd69f0360b4b6d20367b4097b4ef08e +Author: Eduardo Silva +Date: Wed Jun 23 17:04:04 2010 -0400 + + QA: Add protocol_01 test + +commit 8b2d9447cd2d4c41d963c7b62e199cdc640ab2e3 +Author: Eduardo Silva +Date: Wed Jun 23 17:03:40 2010 -0400 + + Validate empty protocol + +commit 361d701d4fdd61eeeeee66b9f90ce0be9e2a1545 +Author: Eduardo Silva +Date: Wed Jun 23 16:33:50 2010 -0400 + + Monkey 0.10.3 + +commit fc7f1dddc75f6ef8d732ec4b1d97760f8f9b0271 +Author: Eduardo Silva +Date: Wed Jun 23 16:31:19 2010 -0400 + + Fix data type for uri_len in http.c + Check return value from mk_buffer_cat() + +commit 96e35bf0f120546af82784f456a3437b28a474b2 +Author: Eduardo Silva +Date: Wed Jun 23 15:53:55 2010 -0400 + + Protect mk_buffer_cat() from invalid length + +commit 49bd4d0ca104faca6c8fd34f0db07a76b7a279bb +Author: Eduardo Silva +Date: Wed Jun 23 15:29:12 2010 -0400 + + Monkey 0.10.3 + +commit 9edfe0c9ccc34064bb9045120025591ebe23b139 +Author: Eduardo Silva +Date: Wed Jun 23 15:21:17 2010 -0400 + + QA: Add uri_01.htt test (check first slash) + +commit bc5dd0267abb8f32c409d3475b934795bd137ad3 +Author: Eduardo Silva +Date: Wed Jun 23 15:20:44 2010 -0400 + + Merge header and log info for file size when ranges are used + +commit fc56e6a1382eb0335fcd16fdef0858302ac9e981 +Author: Eduardo Silva +Date: Wed Jun 23 08:26:06 2010 -0400 + + Force validation of initial slash in request URI + +commit 001f9d6788a4bdb6c44b5f4dad2d046bce6ea958 +Author: Eduardo Silva +Date: Wed Jun 23 08:02:07 2010 -0400 + + Missing semicolon + +commit f86008fd2deeec9fab7a43c47b9ba024e3a4c8e9 +Author: Eduardo Silva +Date: Tue Jun 22 09:20:00 2010 -0400 + + Logger Plugin: Add FORBIDDEN error message + +commit f210e376562c1cd3c87f7f787ac7f7a86594a0f6 +Author: Eduardo Silva +Date: Tue Jun 22 09:19:39 2010 -0400 + + Logger Plugin: Use unix breakline code + +commit d485ad50ba910a1061d1c27bd33507666c21c0ff +Author: Eduardo Silva +Date: Mon Jun 21 13:16:31 2010 -0400 + + Plugin API: Add header_set_http_status() call + DirListing Plugin: support new configuration mode + DirListing Plugin: Fix theme and man configuration + +commit 721a688db4e16bf623a4c5751c6ac01aafc91bb5 +Author: Eduardo Silva +Date: Mon Jun 21 12:38:28 2010 -0400 + + Logger Plugin: fix entries + +commit bbacdcb12f5db1c019c7c16634d50bb32f55ecea +Author: Eduardo Silva +Date: Sun Jun 20 12:22:51 2010 -0400 + + Logger plugin: add files + +commit b9faf647bfd0464b6ce5f8265de28c72963198bf +Author: Eduardo Silva +Date: Sun Jun 20 12:22:31 2010 -0400 + + Logger plugin: add error log support + +commit a9ced288e9e13de61e96c94d84b38e5543d2ed60 +Author: Eduardo Silva +Date: Sat Jun 19 19:35:36 2010 -0400 + + Fix 'FIXME' code + +commit 1603fdeea80376391df445a6edfe25bc906eb047 +Author: Eduardo Silva +Date: Sat Jun 19 19:32:59 2010 -0400 + + Do not free CR before check KeepAlive + +commit c76e77660c913c8b3ab151e76c085a5862cc5289 +Author: Eduardo Silva +Date: Sat Jun 19 19:10:12 2010 -0400 + + Logger Plugin: add Global configuration section + +commit a8dd3baeabaafa75c290e5eb1cc86e7af535c005 +Author: Eduardo Silva +Date: Sat Jun 19 18:44:04 2010 -0400 + + Fix configuration reader, do not override global section names + +commit 155e22d26a5ca0afc2face09c331f3c6a06b1d58 +Author: Eduardo Silva +Date: Sat Jun 19 17:54:42 2010 -0400 + + Plugin API: Export time functions + Plugin API: Set plugin thread keys before invoke prctx() + Plugin API: + Core: add mk_header_set_http_status() + Core: remove old log cache + Core: add mk_pointer protocol_p to struct request + Do not free content_length_p when sending headers + Logger Plugin: Access log working + +commit 92e1144332495c0c0fb3b89f657f4cc9d68891c5 +Author: Eduardo Silva +Date: Fri Jun 18 18:06:52 2010 -0400 + + Enable STAGE_40 + +commit b5043a203f5a7467321918fd1720de77a37c70a8 +Author: Eduardo Silva +Date: Fri Jun 18 18:04:14 2010 -0400 + + Drop logfile.c dependency + +commit 6ab9a2bc6840f49ebb5652cdf54c91eb196b0e14 +Author: Eduardo Silva +Date: Thu Jun 17 21:46:18 2010 -0400 + + Add Logger Plugin (under development) + +commit 19730b062f752401b89b9ee9f7e52638b024c1c5 +Author: Eduardo Silva +Date: Thu Jun 17 21:45:35 2010 -0400 + + Deprecate core logger + +commit 4300e297b1e74e1998ff0be05b9434a3e5ba684b +Author: Eduardo Silva +Date: Thu Jun 17 17:08:55 2010 -0400 + + Plugin API: Export mk_epoll_ calls + +commit 93bc69fb47edc63d669968b5c55cb285676b1b49 +Author: Eduardo Silva +Date: Tue Jun 15 17:38:03 2010 -0400 + + API: export mk_worker_spawn() + +commit 95a8b1867a0dcc6d4437fd9253f20a68531f2a13 +Author: Eduardo Silva +Date: Tue Jun 15 17:25:26 2010 -0400 + + Fix plugin hooks declaration + +commit b35c51d4f5c3912100cc79b079b40c9adb902969 +Author: Eduardo Silva +Date: Mon Jun 14 17:16:47 2010 -0400 + + Fix un-freed cr nodes + +commit 2109750a7af2d2888748f9df223fe750ab12943d +Author: Eduardo Silva +Date: Sat Jun 12 15:28:33 2010 -0400 + + Changelog update + +commit 07abe05218db6f412aea151019921f5cc9739afb +Author: Eduardo Silva +Date: Sat Jun 12 14:35:13 2010 -0400 + + Monkey 0.10.2 + +commit 2f3ce8bd01ffd39c4fc042690978350a52055fd6 +Author: Eduardo Silva +Date: Sat Jun 12 14:24:52 2010 -0400 + + Rename Logo image file + +commit 134a226f9da58de0f550415dcecf9474c535c5dd +Author: Eduardo Silva +Date: Sat Jun 12 14:06:47 2010 -0400 + + Close connection in handler write if process returns ABORT + +commit 8109a7409ec52aaab22e003cdaeec656123d5ca0 +Author: Eduardo Silva +Date: Sat Jun 12 13:50:26 2010 -0400 + + Load plugin trace message before load + +commit 2d76a292985125a66284b37371176f8af345fe59 +Author: Eduardo Silva +Date: Sat Jun 12 12:34:55 2010 -0400 + + Security Plugin: add trace rules + +commit 40e673d32c4e8261abb97fef0714741cb3cfc202 +Author: Eduardo Silva +Date: Sat Jun 12 12:16:29 2010 -0400 + + Adapt security plugin to new configuration model + +commit f4c72ed3b55a1100ae3bd2660530ddd777b8d7c5 +Author: Eduardo Silva +Date: Sat Jun 12 12:07:32 2010 -0400 + + Adapt palm plugin to new configuration model + +commit df7a1ce79bd4e7348163a323ec6c2066f5700d57 +Author: Eduardo Silva +Date: Sat Jun 12 11:56:24 2010 -0400 + + Adapt palm configuration file + +commit 1e570d29f48ceb2c8280577cea76f677630a646c +Author: Eduardo Silva +Date: Sat Jun 12 11:53:50 2010 -0400 + + Adapt server config to new configuration model + +commit 3b297b5767b34d8f8d99ebd0962f3df7c1b22671 +Author: Eduardo Silva +Date: Sat Jun 12 11:42:15 2010 -0400 + + Adapt mime types reader to new configuration model + +commit a870e2522902d7d4611477680bd68fc8a231ad7a +Author: Eduardo Silva +Date: Sat Jun 12 11:40:55 2010 -0400 + + Restructure configuration 'structs' + +commit b63883dc56f1d46a09b6e7fbe891225ef7310e74 +Author: Eduardo Silva +Date: Fri Jun 11 20:06:57 2010 -0400 + + Read from indented configuration + +commit 0dddda3162e5ec33742f4b8befd469290f988847 +Author: Eduardo Silva +Date: Fri Jun 11 08:32:36 2010 -0400 + + Indent configuration template + +commit 2d7f7fd0951d00b9be356fe99c68e04a1f3a894d +Author: Eduardo Silva +Date: Thu Jun 10 00:08:22 2010 -0400 + + New configuration reader: indented mode + +commit cdf629003f5f9ecdbede745212e8a0f039cf37da +Author: Eduardo Silva +Date: Tue Jun 8 15:31:45 2010 -0400 + + Update configure message + +commit a103adf31f9bfb3341a59518f47b098693c56bcd +Author: Eduardo Silva +Date: Tue Jun 8 14:40:55 2010 -0400 + + Config: skip 'value' empty left spaces + +commit 61ad3e7cd2d71fdcb1455369b33b08b9c8fb0178 +Author: Eduardo Silva +Date: Tue Jun 8 14:39:08 2010 -0400 + + Fix #6: Monkey as daemon, logger do not write log files + +commit 9215903eda3bfba69345875631fbe728b9bb5567 +Author: Eduardo Silva +Date: Mon Jun 7 14:49:01 2010 -0400 + + Colorize headers sent in MK_TRACE + +commit 28e197ba2249922f2b5efc45b2f6bfc100ef08b8 +Author: Eduardo Silva +Date: Mon Jun 7 14:36:29 2010 -0400 + + Fix: set right content length for headers + +commit 981be84767361782ebc79e93c304b9aee16e5963 +Author: Eduardo Silva +Date: Mon Jun 7 14:34:43 2010 -0400 + + Print headers sent to STDOUT as MK_TRACE message + +commit 48ae46b3a8f5faa87749274409ed6639e8a441d1 +Author: Eduardo Silva +Date: Mon Jun 7 14:31:31 2010 -0400 + + Set content-length pointer inside header_send() + +commit dd3f39e1c5ce68fab353c96c0091f9c0deea0a6d +Author: Eduardo Silva +Date: Mon Jun 7 14:04:03 2010 -0400 + + Check STAGE_30 return value for not found file request + +commit d451bf65e7cc23cb2430aae4accf9aa58a0d04b1 +Author: Eduardo Silva +Date: Mon Jun 7 13:18:03 2010 -0400 + + Return right data type for API->header_send() + +commit 0f843c580d0cf3eb7bd24f11b4f356ca152d8fc7 +Author: Eduardo Silva +Date: Mon Jun 7 10:45:58 2010 -0400 + + Remove unnecessary trace + +commit 8501f3f2099fa2a9c96274f3abe77302eae15b01 +Author: Eduardo Silva +Date: Mon Jun 7 10:29:33 2010 -0400 + + Remove security rule in security.conf + +commit 3f1f05c99ac24f9d3e827d6a58064ba4179b8007 +Author: Eduardo Silva +Date: Mon Jun 7 10:29:07 2010 -0400 + + Remove double STAGE_30 call + +commit 87bceea3be32c04ffe1648036ecf39b5558a1fd4 +Author: Eduardo Silva +Date: Wed Jun 2 14:10:32 2010 -0400 + + Set values for content_length and content_length_p in one function + +commit 1f04d77872cb7fcb9051302b3e8f1e9860e5d7bf +Author: Eduardo Silva +Date: Wed Jun 2 13:21:26 2010 -0400 + + Return FORBIDDEN error if open() fails + +commit 3f37443e79ce331b4fba108ee7500d7a6c948e94 +Author: Eduardo Silva +Date: Wed Jun 2 12:56:47 2010 -0400 + + Fix file permission check + +commit f7e11d100147a712fc4c7494453a204bee4475cb +Author: Eduardo Silva +Date: Wed Jun 2 12:09:50 2010 -0400 + + Remove trace message + +commit 5acdd396a2cb2e6a6078e129405bf6fcb146ec3f +Author: Eduardo Silva +Date: Wed Jun 2 11:29:57 2010 -0400 + + QA: Add log rule for directory redirect check + +commit d39e2e635983afac2436a8686ffc151e90918cb2 +Author: Eduardo Silva +Date: Wed Jun 2 11:22:25 2010 -0400 + + QA: Add directory redirect checker + +commit d5f007fba75c8539a4bcd3829554001fe9d50258 +Author: Eduardo Silva +Date: Wed Jun 2 11:16:21 2010 -0400 + + Fix plugin return values for STAGE_30 + Fix directory redirect + +commit 601344a416bf3bcebba035ee4d4ce3cc9c1c4237 +Author: Eduardo Silva +Date: Wed Jun 2 08:12:29 2010 -0400 + + Update plugins version to Monkey version + +commit b6f8bdceead8751592d5111d93138e1ac5e03860 +Author: Eduardo Silva +Date: Tue Jun 1 11:41:21 2010 -0400 + + Read env CFLAGS and fix some plugins variables declaration + +commit 09c24d197f25dfb700ccd83c121832e782225e28 +Author: Eduardo Silva +Date: Tue Jun 1 09:54:46 2010 -0400 + + Fix #6: Monkey as daemon, logger do not write log files + For some unknown reason, when monkey goes into daemon mode after launch + the logger worker, this last one does not write to the log files. + Issue fixed moving the daemon routine before launch workers. + +commit 7cb8abf92576bc28e3435cf8798b32a651e2296b +Author: Eduardo Silva +Date: Mon May 31 23:11:40 2010 -0400 + + Fix #7: QA script if_modified_since_test03.htt failed + Core was resetting requests nodes from client request struct + before check the KeepAlive. Also when the request client were + removed from thread index, the index was not updated. + +commit c710d7488760e1c620cf4ded083c79621b2f1353 +Author: Eduardo Silva +Date: Sat May 29 08:47:43 2010 -0400 + + Plugin: Enable STAGE 50 + +commit 16e728d524ed12c18c81b51cf6cb366c52b84fe4 +Author: Eduardo Silva +Date: Fri May 28 09:33:14 2010 -0400 + + Palm Plugin: remove dummy trace + +commit 71e7aab5b5a2edd407fd1744c96814d01adb69b5 +Author: Eduardo Silva +Date: Thu May 27 15:23:50 2010 -0400 + + Palm Server: fix debug message + +commit 1b52d13df15e91ff762359db541187ed76673005 +Author: Eduardo Silva +Date: Wed May 26 16:43:08 2010 -0400 + + Improve plugins loader + Now plugins can return -1 when the init hook is called to avoid be registered + +commit b65c1859fa7c9066f91580caadd550fa20d17de5 +Author: Eduardo Silva +Date: Wed May 26 11:51:26 2010 -0400 + + Add _mkp_exit() missed hook to plugins + +commit 3d502bd2f960f76ec31a6e72e3cc868be34eb949 +Author: Eduardo Silva +Date: Wed May 26 11:25:05 2010 -0400 + + Plugin: validate init and exit hooks + +commit 5ed3cbb26c764ea65e12879658bbee2bb83e2724 +Author: Eduardo Silva +Date: Wed May 26 10:16:34 2010 -0400 + + Fix and implement new API spec + Dirlisting: fix stages for new API + Cheetah: fix stages for new API + Security: fix stages for new API + +commit 8099c9d51aede8dfc571658f00adea1f8646d25d +Author: Eduardo Silva +Date: Fri May 21 09:44:39 2010 -0400 + + Palm Plugin: update plugin data when deleting request node + +commit 505d98b75ee10b66e7b1852d0f7b901ac2ac3651 +Author: Eduardo Silva +Date: Thu May 20 16:41:42 2010 -0400 + + Palm Server: add debug.py + +commit 88a1f3dcde4be3fd157c6cbaaf31a48d1a4ea1b2 +Author: Eduardo Silva +Date: Thu May 20 16:39:48 2010 -0400 + + Palm Server: Improve debug messages through env variable PALM_DEBUG + +commit cca96b62b5884425253bca94977dc5a024909f16 +Author: Eduardo Silva +Date: Tue May 18 22:57:11 2010 -0400 + + Palm: handle errors when executing in child + +commit 741a988013d7ce78ca439b5b5c21ad8ee4f994a4 +Author: Eduardo Silva +Date: Tue May 18 22:27:30 2010 -0400 + + Palm Plugin: do not own request if file does not exists + +commit 4a746dfa79a8593f8709754209d9dfb17da347cc +Author: Eduardo Silva +Date: Tue May 18 22:22:03 2010 -0400 + + Palm: change ports (again) + +commit f572af89a787838c9dd8b3fd321e8d0e81ce6746 +Author: Eduardo Silva +Date: Tue May 18 21:49:16 2010 -0400 + + TRACE: load plugin message + +commit 3c3c74fded312e591c622de9e0c2a0b04f6c265f +Author: Eduardo Silva +Date: Tue May 18 11:39:41 2010 -0400 + + TRACE: Fix init time for first message + +commit 990e0aea2d01512bf2259cb7f374c40225c695e6 +Author: Eduardo Silva +Date: Tue May 18 11:34:46 2010 -0400 + + Move first monkey trace message to the begin + +commit 7a315dd952bee93cb1a2d64ece7b08f73d8f9233 +Author: Eduardo Silva +Date: Tue May 18 11:29:48 2010 -0400 + + Palm Plugin: add trace for registered palms + +commit 9cab84ad6b316ee68c39356872bfebc7795f4123 +Author: Eduardo Silva +Date: Tue May 18 11:22:17 2010 -0400 + + Palm: change configuration ports + +commit 8441f6be49c06e95ac4fd62474dc6aaeb799d065 +Author: Eduardo Silva +Date: Sun May 16 22:32:05 2010 -0400 + + Palm Plugin: Add request method to environment request + +commit 5a1c793ef8775305e26457cb49b29256dac1e7b1 +Author: Eduardo Silva +Date: Sun May 16 22:04:29 2010 -0400 + + Palm: add hangup() function + +commit 0b0c433c61e4dd2d17fb903d8be11792da6eb350 +Author: Jonathan Gonzalez V +Date: Fri May 14 21:09:04 2010 -0400 + + Added CC option to all plugins Makefile.in + + Signed-off-by: Eduardo Silva + +commit 7b1a544688d658de9d5c252d30c5c3dc43e20369 +Author: Jonathan Gonzalez V +Date: Fri May 14 21:01:39 2010 -0400 + + Added a check to configure to verify that there's a compiler installed + + Signed-off-by: Eduardo Silva + +commit 6b1c9d2be01306dc46b653b4168a70daf8eb6f6a +Author: Eduardo Silva +Date: Fri May 14 18:17:02 2010 -0400 + + Optional Palm Plugin + +commit 4c2d64920177f074f1fc15483f3321e3f766959a +Author: Eduardo Silva +Date: Fri May 14 18:06:43 2010 -0400 + + Plugins: improve plugins.load details and add plugins ABOUT doc + +commit 88bfd0f098bcd94611e76900cd9fea1658930e82 +Author: Jonathan Gonzalez V +Date: Fri May 14 15:30:26 2010 -0400 + + Fix bug in configure, it wasn't looking the correct plugin dir. Added ABOUT option to added a proper comment line to plugins.load + + Signed-off-by: Eduardo Silva + +commit 09c34af7767557a9af9032af903ac63cababf036 +Author: Jonathan Gonzalez V +Date: Fri May 14 15:11:33 2010 -0400 + + Fix configure to do sed work in-line to both expressionan create Makefile directly. Replaced ENABLED for OPTIONAL and added MANDATORY for plugins compile options + + Signed-off-by: Eduardo Silva + +commit e4b7cec9f8e5dd6a2099a9bf1ec85c57ea2c0e47 +Author: Jonathan Gonzalez V +Date: Fri May 14 14:43:39 2010 -0400 + + Configure add proper cflags an defs to Makefiles at plugin dirs. Added proper #ifdef #endif to palm.c + + Signed-off-by: Eduardo Silva + +commit e010e9767db4f768ed7a2e4ef7c0517c4cd8e6fd +Author: Eduardo Silva +Date: Fri May 14 13:25:38 2010 -0400 + + Config: skip 'value' empty left spaces + +commit 905c4bc9553200b9173eb707504e14db0c644119 +Author: Eduardo Silva +Date: Fri May 14 10:55:59 2010 -0400 + + Plugin: new API call http_request_end() + +commit 343270c585eb69f6ebd86c233e61954b92f48622 +Author: Eduardo Silva +Date: Sat May 8 13:51:24 2010 -0400 + + Palm Plugin: enable content length + +commit e556adc5533c86cb6b84544e5a50b5ce9a8f8b33 +Author: Eduardo Silva +Date: Sat May 8 13:26:58 2010 -0400 + + Palm Plugin: do not use chunked transfer encoding for HTTP/1.0 + +commit 46fcc7525d207a579a39530249bb13a4bb79db14 +Author: Eduardo Silva +Date: Sat May 8 10:40:07 2010 -0400 + + Palm Plugin: Use real path instead of request uri + +commit c07531bd851afffe27f485b0a3c1720f0b296849 +Author: Eduardo Silva +Date: Sat May 8 09:43:56 2010 -0400 + + Palm Plugin: Fix sockets and send final zero chunk + +commit 0cd799e85831d1e51bf61b13184b8939b2e2ce4f +Author: Eduardo Silva +Date: Fri May 7 15:05:35 2010 -0400 + + Remove silly palm server code and remove tcp no delay in palm client + +commit 03ae7eb204862161312c7ddd63ecc8fcae0a5a0e +Author: Eduardo Silva +Date: Fri May 7 14:12:54 2010 -0400 + + epoll: check error event after EPOLLIN & EPOLLOUT + +commit b22ded92a67ab3e4af435230634795c948a0b9d7 +Author: Eduardo Silva +Date: Wed May 5 09:54:35 2010 -0400 + + Do not start if socket server have failed + +commit 6a6f810d3d143748d111655c619cc0df5d9274a0 +Author: Jonathan Gonzalez V +Date: Tue May 4 13:43:19 2010 -0400 + + Added declratino of mk_palm_request_get_by_http() to request.h of palm + + Signed-off-by: Eduardo Silva + +commit b4c7a78a7c8d3ac85f3bc0c5ab8f76ad11d25194 +Author: Eduardo Silva +Date: Fri Apr 30 13:40:08 2010 -0400 + + Change plugin events and palm plugin hooks + +commit a2100cf1e23a62813ec3fcfc1d17bc170e49f840 +Author: Eduardo Silva +Date: Thu Apr 29 16:54:57 2010 -0400 + + Plugin API: rename get_somaxconn() to sys_get_somaxconn() + +commit 60e1742bd255588d6ca3f65c1cf10efae352ef07 +Author: Jonathan Gonzalez V +Date: Thu Apr 29 16:45:51 2010 -0400 + + Added bind, listen, create_socket and server to liana and replace + + Signed-off-by: Eduardo Silva + +commit e1bf6e52f944c594bbe43ff484b2d895072fd0bd +Author: Eduardo Silva +Date: Thu Apr 29 16:12:33 2010 -0400 + + Palm Plugin: free resources + +commit d29250f4b09649b6d3d7a6d296cd8788211506ff +Author: Eduardo Silva +Date: Thu Apr 29 15:53:01 2010 -0400 + + Palm Plugin: fix missed epoll notification + +commit 5d0c533a76b0f9fc045dfaac243ec4e60978c574 +Author: Eduardo Silva +Date: Thu Apr 29 14:17:59 2010 -0400 + + Palm Plugin: change some trace messages + +commit 3b070c50155c31adc945d239b3d5d1ea1b59a1e8 +Author: Jonathan Gonzalez V +Date: Thu Apr 29 13:25:11 2010 -0400 + + Moved mk_socket_connect to the proper function inside of liana plugin + + Signed-off-by: Eduardo Silva + +commit 77b7d7bb2425e163ab0f9a04a00327dd56653fb1 +Author: Eduardo Silva +Date: Thu Apr 29 13:24:44 2010 -0400 + + Palm Plugin: set socket TCP_CORK to OFF after send headers + +commit 71ac4e0bea6cb03f4764f19a2fc76be90c511e87 +Author: Eduardo Silva +Date: Thu Apr 29 13:17:56 2010 -0400 + + Palm Plugin: remove deprecated function + +commit 8478bd0035e79bf2c6513b10f112aa23c71e3309 +Author: Eduardo Silva +Date: Thu Apr 29 13:05:19 2010 -0400 + + Palm Plugin: set socket status + +commit 5150567186bf2b5322512fa11ed06bf5f0227193 +Author: Eduardo Silva +Date: Thu Apr 29 12:49:57 2010 -0400 + + Connection: use right plugin read returned value + +commit 4f8ba77d40f130c085bbd0a3e91ea06ed19591b5 +Author: Eduardo Silva +Date: Thu Apr 29 12:45:55 2010 -0400 + + Palm Plugin: fix return value for read() + +commit 18ed002a9584a76e92907ace72913f53a3c07735 +Author: Eduardo Silva +Date: Thu Apr 29 12:42:39 2010 -0400 + + Remove silly message 'Aqui va' + +commit 8ab028f8491da993626bce4cd975ca7cc82aca8d +Author: Jonathan Gonzalez V +Date: Thu Apr 29 12:14:39 2010 -0400 + + Replaced write() and read() for mk_api->socket_(send|read) + + Signed-off-by: Eduardo Silva + +commit eed08188a0cf441d27bab0fc5fa0cc2cc4ea3504 +Author: Jonathan Gonzalez V +Date: Wed Apr 28 16:48:02 2010 -0400 + + Added some missing .h at the top of request.c, fix Makefile to link request.o. + + Signed-off-by: Eduardo Silva + +commit 9b45505cadf6c86d62fe30b1caec1961408d1eb5 +Author: Eduardo Silva +Date: Tue Apr 27 16:41:11 2010 -0400 + + Palm: split request code + +commit a6ff7c0c65f34eb012ca9ab487451fdc71918c15 +Author: Jonathan Gonzalez V +Date: Tue Apr 27 15:46:37 2010 -0400 + + Some order in plugin.c. Added more callbacks realted to sockets in the plugin api. Proposed .gitignore + + Signed-off-by: Eduardo Silva + +commit b5fb90872ca66cbe86c12b71e53cfbb652cc92f8 +Author: Eduardo Silva +Date: Tue Apr 27 14:55:00 2010 -0400 + + Plugin event: return hook return values + +commit 6082f8400fab686c8f3b61cc0a372709d48d2cfd +Author: Eduardo Silva +Date: Tue Apr 27 14:52:19 2010 -0400 + + Epoll: set ret to -1 in every cycle + +commit db34b2f0bf87c5d9afc8dd9c705fc9be315319b7 +Author: Eduardo Silva +Date: Tue Apr 27 11:53:47 2010 -0400 + + Fix epoll interface events + +commit a5dab47ef17bbd250244c6dd23cab495dc25a2d3 +Author: Eduardo Silva +Date: Mon Apr 26 17:46:04 2010 -0400 + + Palm Server: os.wait() on child die + +commit 9dc53e21d4c5f992238d7098918963f45e716302 +Author: Eduardo Silva +Date: Mon Apr 26 16:49:44 2010 -0400 + + Scheduler: remove incomplete client_request from list + +commit 1b7cc37a52ee11c14ae6be4b35dcf0d6076a115e +Author: Eduardo Silva +Date: Mon Apr 26 15:58:14 2010 -0400 + + Epoll: add mk_epoll_del() interface + +commit 9f3be00c19541b776a62d7e8b27bdd638db7ad84 +Author: Eduardo Silva +Date: Mon Apr 26 15:12:59 2010 -0400 + + Plugin: event add now requires EPOLL modes + +commit 78e8e4a9f38ca5a7abade8e3b5d0d616cd93dd32 +Author: Eduardo Silva +Date: Mon Apr 26 14:18:47 2010 -0400 + + Add plugin handlers for events + +commit 0e3fc059a6765a90ced3eb9b73c159d1d9168857 +Author: Jonathan Gonzalez V +Date: Mon Apr 26 13:01:56 2010 -0400 + + Deleted some trailing whitespaces. Added a method to Request on palm server. Fixed palm plugin to work with the new api + + Signed-off-by: Eduardo Silva + +commit 4805774da7cf47af18674b325c231f77150cc38b +Author: Eduardo Silva +Date: Mon Apr 26 12:52:18 2010 -0400 + + Plugin API: Document event_* hook calls + +commit 141a4e631ad0254a702df57891353767b5ee6ced +Author: Eduardo Silva +Date: Mon Apr 26 12:43:55 2010 -0400 + + Plugin: remove old STAGE_60 + +commit 53a5e4c2456b7d71713d308a1fded91b4cb13165 +Author: Eduardo Silva +Date: Mon Apr 26 12:41:14 2010 -0400 + + Plugin: Add new event plugin hooks + +commit 1b2c755bf94f00896b934b4a0de05d845444d6e6 +Author: Eduardo Silva +Date: Mon Apr 26 12:03:17 2010 -0400 + + Liana Plugin: remove cast + +commit b995809ab33dc78c5f21e2f93711a5d7a683bce5 +Author: Eduardo Silva +Date: Mon Apr 26 11:56:47 2010 -0400 + + Plugin: use right return data type for exported functions + +commit e2119ef7817799b68216a80e4e236b00ea87bd74 +Author: Eduardo Silva +Date: Mon Apr 26 11:41:11 2010 -0400 + + Rename m_build_buffer() to mk_string_build() and move it to str.c + +commit a2769ecd9ec34ef4cc1ba99d62f5c464393a655e +Author: Eduardo Silva +Date: Sun Apr 25 11:56:32 2010 -0400 + + Plugin API: Add API definition + +commit a8f8963d2303b8290f307d96a2a4d61b82c8dbc7 +Author: Eduardo Silva +Date: Sun Apr 25 01:13:17 2010 -0400 + + Plugin API: Add function definitions + +commit 2f65eba33206de81902cae94aa2f92e1d47fe411 +Author: Eduardo Silva +Date: Thu Apr 22 17:01:51 2010 -0400 + + Cheetah: colorize plugin category tags + +commit 27c028e68f9c64870da9d75dbbd0bbda6a43bbd4 +Author: Eduardo Silva +Date: Thu Apr 22 16:51:21 2010 -0400 + + Enable DirListing plugin + Core: fix directory http restriction + +commit 72b1ec2932fa8fc855d26b7a0ef22d77702748ba +Author: Eduardo Silva +Date: Thu Apr 22 14:23:02 2010 -0400 + + Rename api.txt to API.txt + +commit 55892b050fb3148d38d540454904ab33cab69626 +Author: Eduardo Silva +Date: Wed Apr 21 20:49:10 2010 -0400 + + Liana: Accept socket and set non-block inmediately + +commit bbcd028276780c3611f6149188d0a6fcc381c99e +Author: Eduardo Silva +Date: Wed Apr 21 20:47:10 2010 -0400 + + Plugin: change type for neti* map + +commit d9fa53c3d0a54e62a86a2134197d3adbdd990bdb +Author: Eduardo Silva +Date: Wed Apr 21 13:07:23 2010 -0400 + + Liana: code cleanup + +commit c45e302e4cffa3fcd66b859bd30185f933a83f5b +Author: Eduardo Silva +Date: Wed Apr 21 13:03:53 2010 -0400 + + New Liana Network Plugin + +commit 1945e06be0a9bba0b69331ff21371415c4decea1 +Author: Eduardo Silva +Date: Wed Apr 21 13:03:17 2010 -0400 + + Plugin: validate NETWORK IO + +commit c71471b1a434bee6d84d651170e5ac835cfbf8bb +Author: Eduardo Silva +Date: Wed Apr 21 12:58:25 2010 -0400 + + Configure: optional ENABLED file under mandatory plugins directory + +commit 8ea12e29118da08294ae6dc25da0d40abeff301b +Author: Eduardo Silva +Date: Wed Apr 21 12:44:47 2010 -0400 + + Core: add wrappers for network io calls + +commit 4b57e6fd888daf9d783d1c86ca61e731f45c961d +Author: Eduardo Silva +Date: Wed Apr 21 11:50:20 2010 -0400 + + Plugin: add TRACE detailed message when NETWORK IO/IP plugin are cincomplete + +commit 359fdcadb0cae86924cb0e81e9600b2324632e70 +Author: Eduardo Silva +Date: Wed Apr 21 11:37:35 2010 -0400 + + Plugin: restrict to one I/O and IP network plugin + +commit 284b3eba5cc211fc298984e66c8991a68356725e +Author: Eduardo Silva +Date: Wed Apr 21 11:22:38 2010 -0400 + + Plugin: add net_io.sendfile hook + +commit 16feb3d280f1eb1f1c7f113977d5d18887eaff11 +Author: Eduardo Silva +Date: Wed Apr 21 11:17:48 2010 -0400 + + Plugin API: add _mkp_network_io_send_file + +commit bb18a3cf9de4abae15e2adda572364cb8b4b7adb +Author: Eduardo Silva +Date: Wed Apr 21 09:57:01 2010 -0400 + + Plugin: Fix reference under trace context + +commit b3d267a8685dbbd420bf7d2538f3d68ea5ff7519 +Author: Eduardo Silva +Date: Tue Apr 20 23:14:15 2010 -0400 + + Plugin: free plugin struct if it fails + +commit 85ef77ad48e34939308b9aa65843ee0a5d0d5add +Author: Eduardo Silva +Date: Tue Apr 20 23:11:07 2010 -0400 + + Plugin: fix NETWORK_* validation + +commit e1c46f1f8f86b218640fa7519533d7da225ce5a8 +Author: Eduardo Silva +Date: Tue Apr 20 23:09:34 2010 -0400 + + Plugin: Validate calls for NETWORK_IO and NETWORK_IP + +commit fbac72567e0d716f5581061bb573a1e507113277 +Author: Eduardo Silva +Date: Tue Apr 20 23:01:45 2010 -0400 + + Cheetah Plugin: Add NETWORK IO/IP + +commit 67d02bbe5a7ec3874efc7f75505f1d7dd3bcbf98 +Author: Eduardo Silva +Date: Tue Apr 20 21:08:35 2010 -0400 + + Cheetah API: add CORE THREAD CONTEXT + +commit 151b76d31c73d7b6753b23a430a50f470252c584 +Author: Eduardo Silva +Date: Tue Apr 20 21:05:37 2010 -0400 + + Cheetah Plugin: adapt code to new API + +commit 7bd98e2b42b340f0581c86f2dc1845d3247d5993 +Author: Eduardo Silva +Date: Tue Apr 20 19:59:01 2010 -0400 + + Security Plugin: adapt code to new API + +commit 5b5187b75a529891eabc33ac8326d911434c6c2e +Author: Eduardo Silva +Date: Tue Apr 20 19:50:13 2010 -0400 + + Plugin: Add stages 50 and 60 to run command + +commit d5ea021bbf50a8b87dcd0c134eff00a4ba43503b +Author: Eduardo Silva +Date: Tue Apr 20 19:44:12 2010 -0400 + + Plugin: set global stage map + +commit c958e5f1a7923e334d69b773e9bb94b88af40b0e +Author: Eduardo Silva +Date: Tue Apr 20 17:58:58 2010 -0400 + + Fix data type + +commit 7aaf23da52c68fab31beb9dad4f3ca8b1acc9be9 +Author: Eduardo Silva +Date: Tue Apr 20 17:45:36 2010 -0400 + + Plugin: New internal structure + +commit 214d0d820734ba23a54bbf8d082225984dc639d1 +Author: Jonathan Gonzalez V +Date: Tue Apr 20 12:27:40 2010 -0400 + + Repalce __uint32_t for int, we don't need to use __uint32_t + + Signed-off-by: Eduardo Silva + +commit a1cecf6364aa9d814be656be09a0b60de3479ad1 +Author: Eduardo Silva +Date: Tue Apr 20 12:09:16 2010 -0400 + + Plugin API: description fixes + +commit 55919adde457f7cae9816b0ad3315452e4810fd4 +Author: Eduardo Silva +Date: Mon Apr 19 22:57:40 2010 -0400 + + Disable plugins + +commit a05898d496ca31c9e948eda126236a46cf7a2006 +Author: Eduardo Silva +Date: Mon Apr 19 22:57:17 2010 -0400 + + Plugin API: use spec definitions + +commit 82957c6dc5669f9d5e0f133b055a73bc7bfd0368 +Author: Eduardo Silva +Date: Mon Apr 19 17:20:18 2010 -0400 + + Cleanup utils.h + +commit 79887c974b2ca79d85fc7e23c4fc3050286bf971 +Author: Eduardo Silva +Date: Mon Apr 19 17:17:05 2010 -0400 + + Deprecate SendFile() + +commit 817dc521016ea33e8d5c71048b588707535d68cc +Author: Jonathan Gonzalez V +Date: Mon Apr 19 16:59:28 2010 -0400 + + Create layer to handler the send of data using a socket + + Signed-off-by: Eduardo Silva + +commit b446620f0632a0cada30c9df7940f91f3a9a1529 +Author: Eduardo Silva +Date: Mon Apr 19 14:34:34 2010 -0400 + + Plugin API: little style change + +commit b44a645ab4a13d1986e64f0d3320152c95bc0351 +Author: Eduardo Silva +Date: Fri Apr 16 17:28:42 2010 -0400 + + Plugin API: Change data type names and minor fixes + +commit ac924b118dcd6e588cfeb977e96d028252669220 +Author: Eduardo Silva +Date: Fri Apr 16 14:33:32 2010 -0400 + + Plugin API: Add a list of Monkey functions exported to each plugin + +commit 7760b28036d893be26e00f39017de0526156dad6 +Author: Eduardo Silva +Date: Fri Apr 16 13:37:36 2010 -0400 + + Plugin API: Add mandatory hooks + +commit 354680601f978469898f302f46b0f92238e04764 +Author: Eduardo Silva +Date: Fri Apr 16 13:16:03 2010 -0400 + + Plugin API: Add function hook names + +commit 5473daaf2674fdc374b3de53387c86324e9a246a +Author: Eduardo Silva +Date: Fri Apr 16 12:57:38 2010 -0400 + + Add Plugin API spec + +commit 13a23ecbda005e21537aee68bf07d5d7654d3928 +Author: Eduardo Silva +Date: Sat Apr 10 19:00:50 2010 -0400 + + Update branch version + +commit 6151a552c7b263afd3dd1dbe1d5cb65a36f9f595 +Merge: 5df493b 88db354 +Author: Eduardo Silva +Date: Sat Apr 10 18:59:24 2010 -0400 + + Update configure script + +commit 88db3540cd7fcd22eaba8f2f4a225996960acf39 +Author: Eduardo Silva +Date: Fri Apr 9 20:24:30 2010 -0400 + + Update ChangeLog + +commit 456fa7adae97f9a2a5e2b9358f1c7229662f5d29 +Author: Eduardo Silva +Date: Fri Apr 9 20:22:37 2010 -0400 + + Monkey 0.10.1 + +commit 9c0b03f7b2175df327ffe5f8734f827284be64f4 +Author: Eduardo Silva +Date: Fri Apr 9 16:43:12 2010 -0400 + + Makefile: remove 'Running Monkey' message + +commit 07ba1cc1d225c373f9ea2a930d6933b57be2e46a +Author: Eduardo Silva +Date: Fri Apr 9 16:39:50 2010 -0400 + + Configure: add DESTDIR support to Makefile + +commit 31bf65ca0a0fe2ab070292f1f4f1f9821da432ab +Author: Eduardo Silva +Date: Thu Apr 8 10:53:21 2010 -0400 + + Config: fix reader for line with multiple values + +commit 9006e228ae771ea70483f29f14eb37fbccf895c7 +Author: Eduardo Silva +Date: Thu Apr 8 09:52:34 2010 -0400 + + Configure: move env vars to global context + +commit d4cbe4cebf3215a9137ff447cd539dd638d45e50 +Author: Eduardo Silva +Date: Mon Apr 5 02:37:50 2010 -0400 + + Update changelog + +commit f8873bf50e6a5dc3333189c73cf9ad52ac105ffd +Author: Eduardo Silva +Date: Mon Apr 5 02:31:25 2010 -0400 + + Monkey 0.10.0 + +commit d5e41dab115fcda61e89d3de6998a1aa53e3832f +Author: Eduardo Silva +Date: Sun Apr 4 00:13:34 2010 -0400 + + Configure: fix test validation + +commit aaae7cba11f4d87f339cc6b3f66561c2087b447a +Author: Eduardo Silva +Date: Sat Apr 3 12:35:29 2010 -0400 + + Configure: fix test + +commit 566fff86e2b19bb4b78cd9603d86a0d8cad6cd3f +Author: Eduardo Silva +Date: Sat Apr 3 11:41:31 2010 -0400 + + Do not read SOMAXCONN using deprecated sysctl() + +commit 7e11eb5d2000d574340a919c8c33a006384faa52 +Author: Eduardo Silva +Date: Sat Apr 3 11:40:21 2010 -0400 + + Configure: get DEFS from environment + +commit 454a52b0ec8aa54edfe70db9a5fd1ef3b909dc1e +Author: Eduardo Silva +Date: Sat Apr 3 11:31:16 2010 -0400 + + New Macro DEPRECATE_SYSCTL + +commit 96659604becde82325beb0e4ea6c64fd42e1edbf +Author: Eduardo Silva +Date: Sat Apr 3 09:48:14 2010 -0400 + + Configure: read STRIP enviroment var for binary stripping + +commit 689982d72cc273c0dfcb47b1fe92148ef77f7baf +Author: Eduardo Silva +Date: Fri Apr 2 21:05:43 2010 -0400 + + Cheetah. remove dummy .c file + +commit ca56f2d3b948de35a02dd94207d37a34bf583841 +Author: Eduardo Silva +Date: Mon Mar 29 14:14:28 2010 -0400 + + Cheetah: change some breaklines + +commit 0e8323b723db0c605fcc400ffc1e4eff67f0fe44 +Author: Eduardo Silva +Date: Mon Mar 29 12:34:43 2010 -0400 + + Cheetah: New 'clear' and '?' commands + +commit 4347b4d42c05a7914602b1c6c93965b21c83ffb6 +Author: Eduardo Silva +Date: Wed Mar 24 15:03:23 2010 -0400 + + More code cleanups + +commit bc12a003630e471dcefaa1c9abfd9b10f629f321 +Author: Eduardo Silva +Date: Wed Mar 24 14:56:51 2010 -0400 + + Remove old getdir configuration variable and code cleanup + +commit f3c8491671eeef106c2272f4d504174080074499 +Author: Eduardo Silva +Date: Wed Mar 24 14:43:00 2010 -0400 + + Cheetah: Add plugin version to status command + +commit 2f5a60f18b4b23a7c38b9cdaa6a7e444f63ccee1 +Author: Eduardo Silva +Date: Wed Mar 24 14:35:07 2010 -0400 + + Cheetah: colorize the shell + +commit 6e61c3783dd1c0383634d06bc5c0546adc1f92a4 +Author: Eduardo Silva +Date: Wed Mar 24 10:14:41 2010 -0400 + + Configure: default shell to bash / fix install permissions + +commit 3384597042e1488464bc277f75c6e1b5b32ebb4e +Author: Eduardo Silva +Date: Mon Mar 22 14:06:24 2010 -0400 + + QA: Checklog, add rule for query.htt + +commit 13af8147a9a5f7fd849425502d7460f2547e2684 +Author: Eduardo Silva +Date: Mon Mar 22 13:36:17 2010 -0400 + + Monkey 0.10.0-rc5 + +commit 5ee340cc98cb2401c1cab07df50981a302509618 +Author: Eduardo Silva +Date: Mon Mar 22 13:32:14 2010 -0400 + + QA: Checklog, add rule for simple.htt + +commit fc47daab1e7f37f4da448828eaf674d41cf4d11e +Author: Eduardo Silva +Date: Mon Mar 22 13:32:03 2010 -0400 + + QA: Checklog, add rule for redit_301.htt + +commit 242dec902ccc52fc22e8d2c40c65c7a249b3365d +Author: Eduardo Silva +Date: Mon Mar 22 13:31:20 2010 -0400 + + Logger: register 301 and 302 status in acccess log + +commit 58bc216d3845bcc20500a1e5db603ab821ac0cae +Author: Eduardo Silva +Date: Mon Mar 22 12:58:06 2010 -0400 + + QA: Checklog, add rules for ranges_* + +commit d0bedd1488ffd5731f934161ba3c20a617123b93 +Author: Eduardo Silva +Date: Mon Mar 22 12:38:51 2010 -0400 + + Core: Register partial content status in access logfile + Logger: Register length of partial content instead of file size + +commit 68a93e9c89205f58b9ebaddf99f6b69f14958652 +Author: Eduardo Silva +Date: Mon Mar 22 11:22:07 2010 -0400 + + Logger: write size 0 for HEAD method request + +commit 552f879cfc09abec99a30340a1daa80dbf57d056 +Author: Eduardo Silva +Date: Mon Mar 22 10:25:46 2010 -0400 + + QA: Checklog, add rules for post_* + +commit 85d824e81432f9aec59686f503cda6fb50a59638 +Author: Eduardo Silva +Date: Mon Mar 22 10:25:26 2010 -0400 + + QA: Checklog, add rules for path_transversal* + +commit 80b1c63c1345268332b69db3470113047dc6508b +Author: Eduardo Silva +Date: Mon Mar 22 08:46:06 2010 -0400 + + QA: Why post_test02.htt sometimes fail? + +commit f591349d633dc387d7bfec32c1bc94ec86c0f90a +Author: Eduardo Silva +Date: Sun Mar 21 20:02:12 2010 -0400 + + QA: Checklog, two new script for if_modified_since + +commit cc4f43007f79b252a2d9ddd77eb8cd10d68b2f17 +Author: Eduardo Silva +Date: Sun Mar 21 19:55:49 2010 -0400 + + Enable log register for '304 Not Modified status' + +commit 90ffabde40a48010f4a079db060b6e1bb73bbe66 +Author: Eduardo Silva +Date: Sun Mar 21 19:29:52 2010 -0400 + + QA: Add new rules scripts for checklog tool + +commit 78d47394c886595420c6e8b969860d5d87ac411d +Author: Eduardo Silva +Date: Sun Mar 21 19:28:26 2010 -0400 + + Little fixes for checklog tool + +commit cf308dc26e03c32d8859ad245f43533c3955ee63 +Author: Eduardo Silva +Date: Sat Mar 20 20:23:14 2010 -0400 + + Improve checklog messages + +commit 8af3091a19845652202b208fd05e1e547c09834f +Author: Eduardo Silva +Date: Sat Mar 20 17:47:10 2010 -0400 + + QA: New checklog program, check access and error logs based on rules + +commit 0d9fed0966f49b9fb133f8bb01996a22e655eb3d +Author: Eduardo Silva +Date: Sat Mar 20 17:46:27 2010 -0400 + + QA: Add new option to run_tests.sh: -l, check logfiles after each check + +commit 3ae5a2f1969140c2b5e8edea908708a581542398 +Author: Carlos Ghan +Date: Sat Mar 20 16:28:30 2010 -0300 + + Add mk_utils_get_somaxconn() function + +commit 5272a1ca131d382b6b1dae9b9e7eee517b6e0b25 +Author: Carlos Ghan +Date: Sat Mar 20 16:25:55 2010 -0300 + + Revert "Add mk_utils_get_somaxconn function" + + This reverts commit eca13bdb3e2e2896fe8cd586b6fd4799747983f9. + +commit eca13bdb3e2e2896fe8cd586b6fd4799747983f9 +Author: android +Date: Sat Mar 20 16:02:00 2010 -0300 + + Add mk_utils_get_somaxconn function + +commit 378858f7f1c4ede46a24534799e40f7e0f310a91 +Author: Eduardo Silva +Date: Thu Mar 18 18:39:43 2010 -0400 + + Fix error log, add EXIT_ERROR macro + +commit f6073febf9fbbe565accac24066f5da9f7480180 +Author: Eduardo Silva +Date: Thu Mar 18 11:41:40 2010 -0400 + + Configure: Do not copy README and INSTALL from lang directory + +commit 4dcaeb433029b41851e173b54adb41281a2fa5f7 +Author: Eduardo Silva +Date: Thu Mar 18 07:39:36 2010 -0400 + + Monkey 0.10.0-rc4 + +commit 19ab24c589910a991fd147e9d6a14111c0cc9467 +Author: Eduardo Silva +Date: Thu Mar 18 07:36:46 2010 -0400 + + Update ChangeLogs + +commit 41c5814e1806507e68e795232495032e38ec9527 +Author: Eduardo Silva +Date: Thu Mar 18 07:31:12 2010 -0400 + + Update README information + +commit 8c0d05ab919779d05dd364e76fa9cd66c6662759 +Author: Eduardo Silva +Date: Thu Mar 18 07:20:30 2010 -0400 + + Configure: remove old 'lang' and 'cgibin' options + +commit 9a034287cc60536e66a832bfd07cd02195ba21c9 +Author: Eduardo Silva +Date: Thu Mar 18 07:18:34 2010 -0400 + + Fix configure script for make install + +commit 585ea1b61686f562eeb61dfcacdcebd72eb9dbd1 +Author: Eduardo Silva +Date: Thu Mar 18 07:01:52 2010 -0400 + + Change configure script email address + +commit 9e3297ce72b4b560bc27989ae6132a444cc8fbb1 +Author: Eduardo Silva +Date: Wed Mar 17 20:10:14 2010 -0400 + + Remove old nostalgic internal doc + +commit e75aea23a746d7a9071c030486fda4dab59fc563 +Author: Eduardo Silva +Date: Wed Mar 17 20:09:01 2010 -0400 + + Remove old comments + +commit 1fb4f46dff0fd2c26dea106aaabd2d04a67e912f +Author: Eduardo Silva +Date: Wed Mar 17 14:35:33 2010 -0400 + + MK_TRACE: Get MONKEY_TRACE value just on start up + +commit 59f97f3a9a12fb3368e1cb77db11b07c03910ebc +Author: Eduardo Silva +Date: Wed Mar 17 10:15:33 2010 -0400 + + MK_TRACE: Read MONKEY_TRACE env var to focus on specific source files + +commit 59fbca2af7af16a9b2b9a450a9aab774ae47ed3e +Author: Eduardo Silva +Date: Wed Mar 17 10:10:10 2010 -0400 + + Improve comment + +commit b4f3f464a06cfb707541079401fc7e94b90fe754 +Author: Eduardo Silva +Date: Wed Mar 17 10:07:37 2010 -0400 + + Remove comment + +commit 1d6339c6d27a3cedade92b85a380a9daad7a06d5 +Author: Eduardo Silva +Date: Wed Mar 17 06:30:19 2010 -0400 + + Fix connection header responses + +commit 369cc1ea57dca21fe63195654793e1c499243d93 +Author: Eduardo Silva +Date: Wed Mar 17 06:00:15 2010 -0400 + + QA: Add scripts to check connection header on HTTP/1.1 + +commit 6e00e9e0f24ddec2b990e4acc6d57958c7adea3b +Author: Eduardo Silva +Date: Tue Mar 16 20:50:31 2010 -0400 + + QA: Add scripts to check connection header on HTTP/1.0 + +commit a83c61ef5477f8364f9bd4d7d884fb9e0101304c +Author: Eduardo Silva +Date: Tue Mar 16 20:22:26 2010 -0400 + + Comment block debug + +commit 552d2bab317270f5a4a1dfa3bcfedfc9fbde7960 +Author: Eduardo Silva +Date: Tue Mar 16 20:19:03 2010 -0400 + + Fix Headers TOC parser, use body length as limit + +commit 817ae134f3ccc302d48b19715306906c5b416428 +Author: Eduardo Silva +Date: Tue Mar 16 18:11:24 2010 -0400 + + Close request if 'Connection: close' was specified + +commit 12b7719ad682a099689201262f0d4c9aecce1b21 +Author: Eduardo Silva +Date: Tue Mar 16 17:57:06 2010 -0400 + + Send Connection header for HTTP/1.0, for HTTP/1.1 just if a KA was specified + +commit 298b24d41cbcc08762ef4bbc5bdc4968d5365002 +Author: Eduardo Silva +Date: Tue Mar 16 16:20:55 2010 -0400 + + Fix Pipelining check + +commit ae9dc05f992f97b4a81652b7e53b2508b5ebeb8d +Author: Eduardo Silva +Date: Tue Mar 16 13:20:52 2010 -0400 + + Add CRLF to default mimetype + +commit 3513dc9ef9b11d037e0637d784ad0165860b4e93 +Author: Eduardo Silva +Date: Tue Mar 16 12:34:53 2010 -0400 + + Monkey 0.10.0-rc3 + +commit c9384332d6361bac86a0486e5ff256f9bb24d6cb +Author: Eduardo Silva +Date: Tue Mar 16 10:12:48 2010 -0400 + + Fix conx timeout, for KA use KeepAliveTimeout value + +commit 8777601d9c0c48bdaa518d3ebb63801c5b866d52 +Author: Eduardo Silva +Date: Tue Mar 16 10:01:38 2010 -0400 + + Fix timeout check / update scheduler for KA connections + +commit a930ebd8948c4f40b7de1253cb767596d403f209 +Author: Eduardo Silva +Date: Tue Mar 16 09:34:07 2010 -0400 + + Fix access log / EXIT_NORMAL value + +commit bcdfe84d57033359604485a1566d256d8768cd76 +Author: Eduardo Silva +Date: Tue Mar 16 09:25:04 2010 -0400 + + Fix error log formatter + +commit c9970f74590ef1df28ffb2a7fe30af4e9e988358 +Author: Eduardo Silva +Date: Tue Mar 16 09:03:20 2010 -0400 + + Fix content type header for error pages + +commit 2499c5f6a9baf05539ad5d2cf80f9535778e2025 +Author: Eduardo Silva +Date: Tue Mar 16 08:58:30 2010 -0400 + + QA: Add script to test hexadecimal request + +commit 152ba4b48fb3b656a3a350eb4b6af7f4a9a54d4f +Author: Eduardo Silva +Date: Tue Mar 16 08:58:12 2010 -0400 + + mk_utils_buffer_cat() requires buffer lengths + +commit 339e5437fee655259f2d4d2ce6d5a4125e7170ab +Author: Eduardo Silva +Date: Mon Mar 15 00:16:12 2010 -0400 + + Little improve in pipelining exception + +commit 79ba6d1c763c0ec10099d5f50bf5aa524c043b8a +Author: Eduardo Silva +Date: Sun Mar 14 23:56:37 2010 -0400 + + Fix broken Pipelining support + +commit 2a5dfc7f9f4862de227ffe6e0d6683397090c9bd +Author: Eduardo Silva +Date: Thu Mar 11 19:12:52 2010 -0300 + + Monkey 0.10.0-rc2 + +commit d591a1f080e7c9bd39eb41f4297fe40d2482fb18 +Merge: 4a98db4 306b7d1 +Author: Eduardo Silva +Date: Thu Mar 11 18:35:14 2010 -0300 + + Merge branch 'master' of git+ssh://repo.or.cz/srv/git/MonkeyD + +commit 4a98db4b8fced0fd11bddebd938c06b7bbc58219 +Author: Eduardo Silva +Date: Thu Mar 11 18:33:22 2010 -0300 + + Change mimetype's list order + +commit 306b7d1b85c6d87d8ebe25bd3d297d0b7281b4ef +Author: Carlos Ghan +Date: Thu Mar 11 19:05:22 2010 -0200 + + Fix line width in utils.h + +commit 623c267466ad47db6130222755175d1ccffb112f +Author: Carlos Ghan +Date: Thu Mar 11 18:57:57 2010 -0200 + + Adjust buffer size in mk_utils_int2mkp + +commit d5ce48f646aa2c61b4a2230f4ab6cf7bba80f55f +Author: Carlos Ghan +Date: Thu Mar 11 18:47:50 2010 -0200 + + Remove unused function mk_utils_toupper + +commit ae20aa03cac2621a55f7b58e60d73a71c3d84a39 +Author: Carlos Ghan +Date: Wed Mar 10 19:46:21 2010 -0200 + + Add path traversal tests to QA package + +commit 41cc8bfb7d8f067abc639c7eac46a26bc4500f13 +Author: Eduardo Silva +Date: Wed Mar 10 13:10:36 2010 -0300 + + Mimetype: free memory used by 'type' + +commit 75b4743cc86b1f460242f606edf86a35e726006f +Author: Eduardo Silva +Date: Wed Mar 10 13:06:41 2010 -0300 + + Mimetype config reader: use new config.c API + +commit 9c944b02362d09ab4f88539ff8298062421528d8 +Author: Eduardo Silva +Date: Wed Mar 10 13:02:01 2010 -0300 + + Fix config reader, do not read empty spaces + +commit 41ab255740030383bbc82fdd7cd1029b8690e208 +Author: Eduardo Silva +Date: Wed Mar 10 12:29:41 2010 -0300 + + Just allow HTTP method and protocol request in uppercase + +commit b941b74d318878f0710934d14df71c95eefed2af +Author: Eduardo Silva +Date: Wed Mar 10 12:02:29 2010 -0300 + + Fix mimetype add overflow + +commit 4f51da08d9bc4abaffb87fb639714d5373573ac5 +Author: Eduardo Silva +Date: Wed Mar 10 01:04:01 2010 -0300 + + Revert mimetype changes + +commit 9fe3146871e92b7b94d3b6a3c348925959548f35 +Author: Eduardo Silva +Date: Tue Mar 9 21:59:00 2010 -0300 + + Improve response headers composer + +commit f3273bee74e4ec848c58e8ba5308c93deaee6b09 +Author: Eduardo Silva +Date: Tue Mar 9 18:17:20 2010 -0300 + + Remove MK_IOV_HEADER_VALUE + +commit 175ae3ce5dc37767cc6a7499bc0d8fbf79d7018a +Author: Eduardo Silva +Date: Tue Mar 9 16:38:49 2010 -0300 + + Pre alloc IPv4 memory buffer + +commit 77450cdb45f62f676904f5af92e182f4431734fe +Author: Eduardo Silva +Date: Tue Mar 9 16:26:44 2010 -0300 + + Free ipv4 mk_pointer + +commit f30a6f206c329520db702ac4cea05f7dbebae3c7 +Author: Eduardo Silva +Date: Sun Mar 7 14:34:14 2010 -0300 + + Abort dummy connections + +commit 676590f43bc3eaafcfe097ff77a919104eccc7a3 +Author: Carlos Ghan +Date: Sun Mar 7 12:53:35 2010 -0300 + + Fix bug in backward directory check (Directory Transversal Vulnerability) + +commit ddb98ea2fd573d398f7399575c0302df1fa3d380 +Author: Eduardo Silva +Date: Sat Mar 6 00:58:22 2010 -0300 + + Remove htdocs/php directory + +commit fe006c18627474d7308352d36053f4a20d5ba2b0 +Merge: fed4b4c b509b0a +Author: Eduardo Silva +Date: Fri Mar 5 22:09:15 2010 -0300 + + Merge branch 'master' of git+ssh://repo.or.cz/srv/git/MonkeyD + +commit fed4b4c670060907b4094bc91c3f9a5bd9060585 +Author: Eduardo Silva +Date: Fri Mar 5 22:01:32 2010 -0300 + + Change Website URL in default index.html + +commit 5df493be908591a92574fb497e8e7480ae753ed2 +Author: Eduardo Silva +Date: Wed Mar 3 15:44:09 2010 -0300 + + Set non-blocking socket on accept with accept4() + +commit af406812ec7bdbf9d0aa85f5cb508960106a078d +Merge: 90d308d b509b0a +Author: Eduardo Silva +Date: Wed Mar 3 14:36:19 2010 -0300 + + Merge branch 'master' into v0.11.0-dev + +commit b509b0aa20832bafecca73de8bef68820e10b73d +Author: Eduardo Silva +Date: Wed Mar 3 14:26:44 2010 -0300 + + Cheetah: Remove connections counter + +commit f021ec45b944692cef51b19157e223a91419d739 +Author: Eduardo Silva +Date: Wed Mar 3 14:20:07 2010 -0300 + + Remove connections counter + +commit 90d308d9ec799424c2e6c37c4352ffcb1f1b7625 +Author: Eduardo Silva +Date: Wed Mar 3 09:06:05 2010 -0300 + + Update version number to 0.11.0-dev + +commit 7665dde054961a1933a19534c8ed5a8141c9127c +Author: Eduardo Silva +Date: Wed Mar 3 08:54:38 2010 -0300 + + Add missed plugins Makefile + +commit 91b45a755e0feaf5f1994e175f446101a391c9eb +Author: Eduardo Silva +Date: Wed Mar 3 08:52:08 2010 -0300 + + Add DirListing module + +commit 82930bcf08f8c82bcea45e6b3ecd6b1b16e935a4 +Author: Eduardo Silva +Date: Wed Mar 3 08:49:38 2010 -0300 + + Add Palm Plugin + +commit dd0c1e749c1b37db33ead939d8c6b74d687c8ef5 +Author: Eduardo Silva +Date: Wed Mar 3 08:47:18 2010 -0300 + + Add Palm server + +commit 94f8ca3d923f8af10b4a423d2674b41867cf278f +Author: Eduardo Silva +Date: Tue Mar 2 17:53:11 2010 -0300 + + Monkey 0.10.0-rc1 + +commit 3393ae7a35bd6fb69ae1ff20b7da23f5a782b427 +Author: Eduardo Silva +Date: Tue Mar 2 17:38:52 2010 -0300 + + Remove development code + +commit d49af57b2d5bf2b6e4254bf3a57e646f130f9ef1 +Author: Eduardo Silva +Date: Mon Mar 1 22:40:30 2010 -0300 + + Add cast to trace formatter + +commit 9093e2628fe89baee318cb2c80ac293059018146 +Author: Eduardo Silva +Date: Mon Mar 1 22:26:40 2010 -0300 + + Add Eduardo's email to copyright header files + +commit 2e294fd900c2829150a9f6d0bed92000cd0fcd15 +Author: Eduardo Silva +Date: Mon Mar 1 22:23:57 2010 -0300 + + Update Copyright date in files + +commit 34345f8dbc2b874615230acdad104a5142d46f51 +Author: Eduardo Silva +Date: Mon Mar 1 19:01:19 2010 -0300 + + Change Monkey HTTP signature + +commit 42e2c966da6db4f725cc0ec8e90cad97a3ef760f +Author: Eduardo Silva +Date: Mon Mar 1 18:35:19 2010 -0300 + + Remove old data + +commit 38a4520838fd7d71c4182efc077ad5427bde3a4a +Author: Eduardo Silva +Date: Mon Mar 1 18:30:39 2010 -0300 + + Minor fixes + +commit 6df45ac3ae32b2a18d77b87801c6477c2ebdd555 +Author: Eduardo Silva +Date: Sat Feb 20 12:08:29 2010 -0300 + + Add TRACE message when connection arrives + +commit 02d5c2db9409a732732af472ae96d21b296edefe +Author: Eduardo Silva +Date: Fri Feb 19 18:04:50 2010 -0300 + + Palm Plugin: add mk_plugin_send_chunk() + +commit 4c052c3510696edb98b61746f613060f5c0f7a71 +Author: Eduardo Silva +Date: Fri Feb 19 17:15:04 2010 -0300 + + Experimental Palm Plugin (disabled by default) + +commit 5241718aa79a27fe67a0d1e796599982c48f610b +Author: Eduardo Silva +Date: Fri Feb 19 17:11:34 2010 -0300 + + Configure script: do not try to compile plugins if they contains a file called DISABLED' + +commit 2696771d2b11070e1a1980454c2d4efe82fa207b +Author: Jonathan Gonzalez V +Date: Fri Feb 19 16:51:23 2010 -0300 + + Remove line that say something about run monkey in benchmark mode, this option doesn't exists + + Signed-off-by: Eduardo Silva + +commit e71941aa183a63be1c58c9eabc5808d8d3c39561 +Author: Jonathan Gonzalez V +Date: Fri Feb 19 16:50:43 2010 -0300 + + Initialize var for colors in mk_utils_trace + + Signed-off-by: Eduardo Silva + +commit f16599603132c6049a4128e19198efdcf421bed5 +Author: Jonathan Gonzalez V +Date: Fri Feb 19 16:37:26 2010 -0300 + + Initialize the var event at mk_epoll_add_client() + + Signed-off-by: Eduardo Silva + +commit aeb80aaf5bda55baf74c7c9a65a9519942dd25d2 +Author: Eduardo Silva +Date: Fri Feb 19 16:55:34 2010 -0300 + + Add some TRACE messages + Remove old socket_timeout function + Code cleanup + +commit 531de6c29da45dac8d2de492e78e12bf1ba817dc +Author: Eduardo Silva +Date: Thu Feb 18 16:48:48 2010 -0300 + + Add TRACE messsage when calling plugin stages + +commit 1a0f7211d2931c7236f21cf9180de9159938e65e +Author: Eduardo Silva +Date: Thu Feb 18 15:57:58 2010 -0300 + + Fix trace message without compiler conditional + +commit 0e176c1afe3af0d21e9d7a54c53a1303b5ca1bf1 +Author: Eduardo Silva +Date: Thu Feb 18 15:37:29 2010 -0300 + + Add 'trace enable' message + +commit 202bf06978457559fe7eed2c2f9d28d698ac2d75 +Author: Eduardo Silva +Date: Thu Feb 18 15:32:10 2010 -0300 + + Improve TRACE colors output (just for dark background terminals) + +commit 9645a0513233041a3e7c7e72c1efa23e1f401e7a +Author: Eduardo Silva +Date: Thu Feb 18 11:24:06 2010 -0300 + + Plugin API: Export PLUGIN_TRACE macro function + +commit 15f021f3ccfd8ea453bcbac343a8bc8df8947fee +Author: Eduardo Silva +Date: Thu Feb 18 11:01:37 2010 -0300 + + New TRACE mode, configure with --trace to enable trace messages + +commit 26402a33dea877b29f9e1654a21b2c41479d6c4e +Author: Eduardo Silva +Date: Tue Feb 16 00:25:00 2010 -0300 + + Remove old files: modules.c and modules.h + +commit 48188460d235d4e752f32305f236d9b4b3b3ee3b +Author: Eduardo Silva +Date: Tue Feb 16 00:13:38 2010 -0300 + + Remove trash + +commit a9ce2ded6d5d243852718c6ad83c29793f204526 +Author: Eduardo Silva +Date: Tue Feb 16 00:09:14 2010 -0300 + + Plugin: New interface for STAGE 40, it allows async calls to read + and write events on demand by async plugins + Plugin: Removed sub call stage_40 loop + +commit bc0a375465dfd547e25b57c5caa4f3e00f622c36 +Author: Eduardo Silva +Date: Sun Feb 14 21:12:32 2010 -0300 + + Logger: move specific values to header + +commit a79268333bea7a29a9b412b9819ff8f7126fa548 +Author: Eduardo Silva +Date: Sun Feb 14 13:56:39 2010 -0300 + + Config: Add new Listen directive to restrict the incoming connection to a specific network interface + +commit c95bf34111a974cee3d48e618f179bf687a781d9 +Author: Eduardo Silva +Date: Sat Feb 13 23:50:33 2010 -0300 + + Add --debug option description to configure help + +commit 45e7e540a2493dda5800de3e1725948be94556c4 +Author: Eduardo Silva +Date: Fri Feb 12 18:35:37 2010 -0300 + + Cheetah: CTRL-D runs 'quit' command + +commit 9bb65d647dfe57a8b2ecd5f259e5956679c5792a +Author: Eduardo Silva +Date: Fri Feb 12 18:31:52 2010 -0300 + + Cheetah: Fix segfault when pressing Ctrl-D + +commit 100bd0be93f5ebc31b3ab85bd37abe569c5f7715 +Author: Eduardo Silva +Date: Fri Feb 12 18:04:51 2010 -0300 + + Log Error: add URI requested to 404 and 501 status message + +commit b5a0b534072c86b75ef839de42540e593862b610 +Author: Jonathan Gonzalez V +Date: Fri Feb 12 17:18:01 2010 -0300 + + Fix to use mk_pointer_set and mk_mem_malloc_z + + Signed-off-by: Eduardo Silva + +commit ea5164fa5a943d587fdd3a05197a3e40ccda9fa1 +Author: Jonathan Gonzalez V +Date: Fri Feb 12 17:06:24 2010 -0300 + + Fix mk_config_get_host to create a pipe only if the (Access|Error)Log entry exists. Fix mk_logger_worker_init to check if the pipe exist before add it to the list + + Signed-off-by: Eduardo Silva + +commit cc0ac7eea72d9e400432bdc4e1b147341aa2924b +Author: Jonathan Gonzalez V +Date: Fri Feb 12 17:04:33 2010 -0300 + + Change char *ipv4 for mk_pointer ipv4 in sched_connection. Fix all the code to use the new form + + Signed-off-by: Eduardo Silva + +commit 99416fd62ffa9082654e1a7fbd05898fc4bb83cd +Author: Jonathan Gonzalez V +Date: Fri Feb 12 15:29:10 2010 -0300 + + Added option --debug so it will use -g to compile by default it will use '-O2 -Wall' and move strip to 'make install + +commit 4fedc5c542d8b58afb49d81b5d8302a1b0468722 +Author: Eduardo Silva +Date: Fri Feb 12 14:06:58 2010 -0300 + + Add compiler name and version to welcome message + +commit 589c614558a8a6c951285fb09deba18f7d8ae06e +Author: Eduardo Silva +Date: Fri Feb 12 13:18:52 2010 -0300 + + Plugin: add mk_plugin_preworker_calls(), it allows + to each plugin to set a pthread key (plugins runs + under thread context + +commit 0b3e2b44a4daefe86135ed1f8049d882299d5dbb +Author: Eduardo Silva +Date: Fri Feb 12 13:00:54 2010 -0300 + + Replace header files mode from width 8 to 4 + +commit 6ac9c63d074d2ee99152ac151cd4a05254ed7d6a +Author: Jonathan Gonzalez V +Date: Thu Feb 11 22:55:12 2010 -0300 + + Added .gitignore so 'git status' will not show any *.so,*.o,Makefile and *~ + + Signed-off-by: Eduardo Silva + +commit 411a933bf9721ee700dd68cc90e6d0b68922ad58 +Author: Jonathan Gonzalez V +Date: Thu Feb 11 22:46:36 2010 -0300 + + Change the FSF address and update LICENSE with the new address and some texts + + Signed-off-by: Eduardo Silva + +commit d5fea5c1bdc0b1026057ada429971a01c2bce960 +Author: Eduardo Silva +Date: Thu Feb 11 14:33:26 2010 -0300 + + QA: Remove range test 04 until httest fix their bug + +commit 6d567eaeea3330000546a9f36258c0340f1208c7 +Merge: 0e9bac7 09b403e +Author: edsiper +Date: Thu Feb 11 13:54:38 2010 -0300 + + Merge branch 'master' of git://repo.or.cz/MonkeyD + +commit 0e9bac71af626a0e77bbd6801749361aad645aec +Author: edsiper +Date: Thu Feb 11 13:54:22 2010 -0300 + + QA: Add missed scripts + +commit 09b403ea9b6eb5d0fb61db7cf5a75b59222f01e2 +Merge: 2079cff bce7ace +Author: Eduardo Silva +Date: Thu Feb 11 13:50:25 2010 -0300 + + Merge branch 'master' of git://repo.or.cz/MonkeyD + +commit 2079cffb07b93697e746392f4a94c8adb7963964 +Author: Eduardo Silva +Date: Thu Feb 11 13:48:32 2010 -0300 + + Plugins: Add _mk_plugin_stage_40_loop() call + +commit bce7ace91fd6ebde6889f942db2015740edc7754 +Author: Carlos Ghan +Date: Wed Feb 10 07:07:31 2010 -0300 + + Q/A test improvements + +commit dbc1569b94258fd83f93aabacc2a00e454b90ab8 +Author: Eduardo Silva +Date: Thu Jan 21 13:26:33 2010 -0300 + + Using Apache development C Language Style + http://httpd.apache.org/dev/styleguide.html + +commit 2d4ff8a01731a8e4e27a33f1a21ab777f4494c04 +Author: Eduardo Silva +Date: Thu Jan 21 13:18:05 2010 -0300 + + Improve plugin handler return values and actions + +commit 00754101ddc997daae4ff4eff4634c8871e6c117 +Author: Eduardo Silva +Date: Mon Jan 4 17:13:27 2010 -0300 + + Configuration reader: add 'read line by values' + +commit 5485636390b0a94641e9445f4ac6ac2d426f0d40 +Author: Eduardo Silva +Date: Mon Jan 4 16:53:42 2010 -0300 + + Reduce worker client capacity to 50% in order to allow on each request open a new file descriptor + +commit 4b70581f6b1105c06a20f691cc86c62f6eb097cc +Author: Eduardo Silva +Date: Mon Jan 4 14:26:59 2010 -0300 + + Configure: add --plugdir option to specify target directory for plugins + +commit b6f1e1fa7e92d29770b337d16ade1ed1bea34498 +Author: Eduardo Silva +Date: Sat Jan 2 18:32:58 2010 -0300 + + Add old entries to Changelog + +commit d2cce9a9d499e307cc344da7f6f6f84cbf3d7be3 +Author: Eduardo Silva +Date: Sat Jan 2 17:51:41 2010 -0300 + + Update configure + +commit 5a86cec7a07b0c8f18217e62ce654feb5e1c2c4a +Author: Eduardo Silva +Date: Sat Jan 2 11:52:10 2010 -0300 + + Security plugin: add shortname + +commit 06ec147ff5c0d831a3fcf8ed43ae9fc713811bbf +Author: Eduardo Silva +Date: Sat Jan 2 11:45:26 2010 -0300 + + Cheetah plugin: add shortname + +commit 61113ec23373dffbdb967266ed92c3710fe55554 +Author: Eduardo Silva +Date: Sat Jan 2 11:39:32 2010 -0300 + + Plugin: Load plugin and give new configuration directory assigned + Dirlisting plugin: use new directory assigned + +commit c896b0f3d8d300d0a66340dd38c10970af14eb9b +Author: Eduardo Silva +Date: Fri Jan 1 11:50:59 2010 -0300 + + Move plugins configuration files to conf/plugins/MODULENAME + +commit 102a110a8f76b42fec0622a39c207573e1fd3293 +Author: Eduardo Silva +Date: Fri Jan 1 11:44:29 2010 -0300 + + Drop old configuration and adapt configure + +commit 0c9cb7bec6f34b50f82f0a2bcfed757c6f152374 +Author: Eduardo Silva +Date: Fri Jan 1 11:18:35 2010 -0300 + + Remove 'extras' (old modules interface) + +commit 32522cd411b77bbff2d93ecd68813c3f2138a124 +Author: Eduardo Silva +Date: Fri Jan 1 11:12:04 2010 -0300 + + Deprecate CGI interface + Palm Server: add debug environment var 'PALM_DEBUG' + +commit a5583817722804f8256973b808213820a5f33351 +Author: Eduardo Silva +Date: Tue Dec 29 17:49:41 2009 -0300 + + Palm: change website url + +commit d9291f5eb85bfe9bedf05fce9b4fa3f8ae8b039b +Author: Eduardo Silva +Date: Tue Dec 29 17:32:20 2009 -0300 + + Plugin API: Add mk_plugin_load_symbol + +commit 4b3615e4b0d55497a8e1a5f16125a89b082d6af0 +Author: Eduardo Silva +Date: Wed Dec 9 14:04:14 2009 -0300 + + Add MK_PLUGIN_STAGE_00 to plugin stages + +commit f2fe4903d7a990e8aa5c926f0a1d803dae58b5c8 +Author: Eduardo Silva +Date: Tue Dec 8 08:26:42 2009 -0300 + + Plugin: read configuration file using config API + +commit 3d77acb11f5daed074ca427abcf1e214006eb2e8 +Author: Eduardo Silva +Date: Tue Dec 8 08:19:23 2009 -0300 + + Plugin API: Export mk_iov_print + +commit 90bf701569e08d8b04884a15719879cc1494592c +Author: Eduardo Silva +Date: Mon Dec 7 15:03:26 2009 -0300 + + Plugin: Export mk_socket_xyz calls + +commit 5b9c80d0f90941818b525ad5c8a36c055ae9f181 +Author: Eduardo Silva +Date: Mon Dec 7 13:59:26 2009 -0300 + + Add dummy stage MK_PLUGIN_STAGE_00 + Plugin: Export mk_pointer_set() as pointer_set() + +commit 51f470c08ce1015a1b40398c2942eff6a50c5b3a +Author: Eduardo Silva +Date: Mon Dec 7 12:52:31 2009 -0300 + + Add mk_string_line() + +commit 7b1576ba1898c5c38c2332a75f7b4a5ae0b1b046 +Author: Eduardo Silva +Date: Mon Dec 7 09:50:47 2009 -0300 + + Config reader: value ends when LR is found + +commit 517eaa5e729ff42b178d59772e59b106e3c17dc3 +Author: Eduardo Silva +Date: Mon Dec 7 09:50:08 2009 -0300 + + Remove palm from main configuration reader + +commit cd44d282f0b0ff2670af1fb99b783034e2973426 +Author: Eduardo Silva +Date: Mon Dec 7 09:23:43 2009 -0300 + + Do not allow backward directory requests '..' + +commit f75e14248da2a646fefb3ac3e168689b7e0153ec +Author: Eduardo Silva +Date: Mon Dec 7 07:25:45 2009 -0300 + + Initialize uninitialized variables + +commit 1fc574ba7ab8278900b903f5cf339618a2ad2272 +Author: Eduardo Silva +Date: Sun Dec 6 22:07:54 2009 -0300 + + iov: buf to free non-zero allocation + +commit f9aebdc3ddba3ee560e37a28b73a5ecccc6898c4 +Author: Eduardo Silva +Date: Sun Dec 6 22:01:48 2009 -0300 + + Set iov struct to zero + +commit 56a17e76f3cc1876aca26920f6608bcfdba2c9fb +Author: Eduardo Silva +Date: Fri Dec 4 12:06:21 2009 -0300 + + Add MK_PLUGIN_STAGE_30 + Security Plugin: add rules for URI + +commit df12846d397b6dc8c4349a116ec9d82901ed84e4 +Author: Eduardo Silva +Date: Thu Dec 3 23:51:37 2009 -0300 + + Deprecate deny.c + +commit 90518c21544f7c98812c6e805a34841b8ff486ae +Author: Eduardo Silva +Date: Thu Dec 3 23:49:12 2009 -0300 + + Add security plugin file configuration + +commit ab2df2c02746c3aac65b9b34cf8dd38fe7b9c2f3 +Author: Eduardo Silva +Date: Thu Dec 3 23:48:57 2009 -0300 + + New Plugin: Security + +commit 814a1b4344edae09863090bfd5c1c8047c5cf8bc +Author: Eduardo Silva +Date: Thu Dec 3 23:47:50 2009 -0300 + + Add MK_PLUGIN_STAGE_20 + +commit 61bd256b545184b51169cbbb46bda74dd2698927 +Author: Eduardo Silva +Date: Thu Dec 3 18:36:44 2009 -0300 + + Plugins :: Export new mk_config_* calls + +commit e30ce56348f1cb8f3b053fb0d560211957ec556b +Author: Eduardo Silva +Date: Thu Dec 3 15:21:59 2009 -0300 + + Refactoring read/write handlers and pointers + +commit 4a2cc99fa9716ba4f0448e8dce320ea912fd3976 +Author: Eduardo Silva +Date: Wed Dec 2 12:20:48 2009 -0300 + + Change connection status when server will send content + +commit 5bed1d4b2ef1e5068de0135ad0e3f1481a22e0e9 +Author: Eduardo Silva +Date: Wed Dec 2 07:09:13 2009 -0300 + + Add CFLAGS environment variable to Makefiles + +commit 3d4d69d119bae7b057b9f37b554d2fea486820cf +Author: Eduardo Silva +Date: Tue Dec 1 16:51:13 2009 -0300 + + New configuration files handler + +commit 4b9978014a07532c5b7c416f143100ec735a75ff +Author: Eduardo Silva +Date: Tue Dec 1 10:17:37 2009 -0300 + + Add plugins README file + +commit 63efae9c1334eb84e2316df16075a2657456d0e2 +Author: Eduardo Silva +Date: Tue Dec 1 10:13:22 2009 -0300 + + Dirlisting :: validate file/directory struct + +commit 3f58cb866131c9117299deb7a36e52dad0aea696 +Author: Eduardo Silva +Date: Tue Dec 1 10:11:26 2009 -0300 + + Move plugins directory to root path + +commit d086213a240a59266e2752257816803c1057f1de +Author: Eduardo Silva +Date: Sun Nov 29 20:22:59 2009 -0300 + + If URI is not found, before to send 404, check if a plugins on stage 40 would like to handle it + +commit 78bb4001fd3ccaa1ddb8ad023dbae3d0a0f6dc11 +Author: Eduardo Silva +Date: Sat Nov 28 16:37:43 2009 -0300 + + On error, do not send content if it has not been set + +commit 13dfe273ddbbfd723ec5cf8e173cae52d723d554 +Author: Eduardo Silva +Date: Sat Nov 28 16:32:12 2009 -0300 + + error to set_default_page return pointer + +commit 085d9cb8980b3c2aac91741f3ffcec098379647a +Author: Eduardo Silva +Date: Sat Nov 28 13:33:28 2009 -0300 + + Fix configure Makefile creator for plugins + +commit 3f72ff8ab491f41a4214079b5e169396b9eafe1b +Author: Eduardo Silva +Date: Sat Nov 28 13:24:23 2009 -0300 + + Update URL in welcome message + +commit d7f899b5b504bce9f75193884ea939e9662a188f +Author: Eduardo Silva +Date: Fri Nov 27 13:56:03 2009 -0300 + + Plugins :: Add _mk_plugin_worker_init() callback + +commit 3fb5bb5e3b0b95775431c7fc93b2d1a56d5d8525 +Author: Eduardo Silva +Date: Wed Nov 25 13:24:10 2009 -0300 + + EPoll: add handlers for close and timeout events + +commit 5cfe72a405985422482e3fcbe541735f4f8c7421 +Author: Eduardo Silva +Date: Wed Nov 25 13:09:03 2009 -0300 + + Fix gcc warnings + +commit 30ced4a77bdc65d99b45b76f4c7a4eba982e299f +Author: Eduardo Silva +Date: Wed Nov 25 11:54:02 2009 -0300 + + Remove unnecessary casts + +commit ac64677397669db7b60c5a306363feff2ec727f3 +Author: Carlos Ghan +Date: Wed Nov 25 09:58:47 2009 -0300 + + Fix Charlie email in QA/README + +commit 85ae250851e330498c7d92ac8478f27e7e71b08c +Author: Carlos Ghan +Date: Wed Nov 25 09:57:54 2009 -0300 + + QA package + +commit 7a0dabad9e36f2e24e13f875345dd27e9e7197e8 +Author: Eduardo Silva +Date: Wed Nov 25 08:59:25 2009 -0300 + + Fix method check length + +commit 9e4a9a32674069b23d2d2a0047007826be5fcef4 +Author: Eduardo Silva +Date: Tue Nov 24 16:05:53 2009 -0300 + + Fix TCP_CORK usage + +commit f3a99cccc9cc4f26a73392b2e0fc5b09764f93aa +Author: Eduardo Silva +Date: Tue Nov 24 13:56:09 2009 -0300 + + EPoll: change handlers struct and calls + Rename conn_switch.c to connection.c + +commit cd7e2623b05b6dfd82f1a4c100ae3a4755aa9790 +Author: Eduardo Silva +Date: Mon Nov 23 13:54:19 2009 -0300 + + Deprecate CheckFile() and CheckDir() + Config: do not handle AddScript directive + +commit e313dbca4a21715411d8783e528ef65f1bef0e40 +Author: Eduardo Silva +Date: Mon Nov 23 13:49:02 2009 -0300 + + Free client request struct when client hung up + +commit 792ccef8b207e14a23b0af1e232078ae6b2cdd0e +Author: Eduardo Silva +Date: Fri Nov 20 14:16:54 2009 -0300 + + Do not send Connection close header for clients < HTTP/1.1 + +commit 23a70887740bc4e43937376a7923be9b562e1fae +Author: Eduardo Silva +Date: Thu Nov 19 21:05:06 2009 -0300 + + HTTP: Optimize request parser + +commit c78896f7fa2b20a776511f8a9450607cb8e69dce +Author: Eduardo Silva +Date: Thu Nov 19 15:32:52 2009 -0300 + + IOV: Free iov->buf_to_free allocation + Dirlisting plugin: Free tag entries + +commit bbc10cf70689dfb6bca1c1e1612e685852f94647 +Author: Eduardo Silva +Date: Mon Nov 16 14:06:10 2009 -0300 + + HTTP: Close connections if KeepAlive is not specified + +commit 754f49d9de0b62e5ead1b70bf9cd29b6e2257323 +Author: Eduardo Silva +Date: Mon Nov 16 13:54:08 2009 -0300 + + Dirlisting Plugin: send chunked data just for HTTP/1.1 clients + +commit 13c1cf14533cfe32cb76b21cf1ae3212885b7711 +Author: Eduardo Silva +Date: Mon Nov 16 13:41:05 2009 -0300 + + Chunked Transfer Encoding: fix length + +commit 21105f9b770beed6ec638ce6e917920e47381323 +Author: Eduardo Silva +Date: Sat Nov 14 18:24:46 2009 -0300 + + Plugin API: export mk_pointer_set + Dir listing Plugin: set content type to html + +commit 939f6731ef3878dd818e810ef4eda1e9d867fc4e +Author: Eduardo Silva +Date: Sat Nov 14 18:11:59 2009 -0300 + + Fix directory validation after handler + +commit 9c251fc1a7cb30e6057f034f522e738cd0ff6826 +Author: Eduardo Silva +Date: Sat Nov 14 17:51:38 2009 -0300 + + Cheetah Plugin: little 'help' text changes + +commit d0d8124cc519a641dc66ab33c09802b85e2a682d +Author: Eduardo Silva +Date: Sat Nov 14 17:34:18 2009 -0300 + + Cheetah Plugin: New option 'plugins' to list loaded plugins + +commit 9e848ba129761c6614229ff81b0cc3aa0e8584e0 +Author: Eduardo Silva +Date: Sat Nov 14 16:56:29 2009 -0300 + + Forbidden access to directories without handler + +commit ec344b77cc40494a408232d36649bf3a0ed04697 +Author: Eduardo Silva +Date: Sat Nov 14 16:45:13 2009 -0300 + + Push Directory Listing plugin + +commit 64deaf01865e92109f48870a746e3b18198aa0eb +Author: Eduardo Silva +Date: Sat Nov 14 16:43:33 2009 -0300 + + Plugin and Core: Add functional STAGE_40 (handlers) + Plugin: Add directory listing plugin! + +commit 6ffe561b1cc8c657333cd0b5140c623e955d5262 +Author: Eduardo Silva +Date: Sat Nov 14 11:21:47 2009 -0300 + + Merge struct file_info into struct request + +commit 769143fb8e7c3f071bbc0bbb9e4d73ce55de00e3 +Author: Eduardo Silva +Date: Sat Nov 14 11:12:57 2009 -0300 + + Plugin API: Export 16 monkey functions + Dirlisting Module: use new API + +commit 877762e2cde8b3257277831046cf9a236b3571c2 +Author: Eduardo Silva +Date: Wed Nov 11 11:46:09 2009 -0300 + + Configure: disable plugins by default + +commit cb923808a681bdf246d5e551f2f0a52b97d8f1c1 +Author: Eduardo Silva +Date: Wed Nov 11 07:39:43 2009 -0300 + + Remove dir_html + +commit c7adfc26c6ab0660c41d17bb4a04cae243f4ef23 +Author: Eduardo Silva +Date: Tue Nov 10 22:52:49 2009 -0300 + + free request comments + +commit e461cb259490bb969381b797cf444ec29b8cf9a5 +Author: Eduardo Silva +Date: Tue Nov 10 22:43:30 2009 -0300 + + Free client request headers->content_length_p + +commit 74d0a70b664083375c367ef12398c8a3b46ed7f8 +Author: Eduardo Silva +Date: Tue Nov 10 21:05:32 2009 -0300 + + Free client request log->size_p + +commit 6b6f5f7b56fed6209ff99e669fb0f6d79283a8bb +Author: Eduardo Silva +Date: Sun Nov 8 21:44:35 2009 -0300 + + Full connection Timeouts + +commit b487878a2bdcebd9132d88c290052c782a3a5e6e +Author: Eduardo Silva +Date: Fri Nov 6 19:17:15 2009 -0300 + + Add Timeout for processing connections + +commit 36ff69b5d14f434f1885d2ae00c9513d6b50bd2c +Author: Eduardo Silva +Date: Fri Oct 30 14:55:10 2009 -0300 + + Remove benchmark mode, we do not needed anymore :D + +commit 10fda15061fe9ecde667922058c129de4e80798e +Author: Eduardo Silva +Date: Fri Oct 30 14:37:44 2009 -0300 + + Remove dir_html feature + +commit 9b17eea1825fbdfb7f93734fe3575c6067755a57 +Author: Eduardo Silva +Date: Tue Sep 29 02:30:13 2009 -0400 + + Plugins loader autoconfigutarion + +commit 320235c5e70cddf726860075e476e318a1a010d9 +Author: Eduardo Silva +Date: Mon Sep 28 22:18:33 2009 -0400 + + Plugin API: add malloc() + +commit af15c044d5e51a3383c2b0d538ce6ee12fc11d36 +Author: Eduardo Silva +Date: Mon Sep 28 18:32:14 2009 -0400 + + First plugin: Cheetah\! + +commit a947c4b95548f59d055378d696376cc63b3157c0 +Author: Eduardo Silva +Date: Mon Sep 28 18:31:25 2009 -0400 + + Plugins: recognize plugins dir + +commit 023332cfea456a308a76136df65cbdcc6124391f +Author: Eduardo Silva +Date: Mon Sep 28 14:19:30 2009 -0400 + + Remove cheetah code from core + +commit 5cb0fe6dadda62bfa9b24d4ac7f905cf91a9d858 +Author: Eduardo Silva +Date: Mon Sep 28 12:43:48 2009 -0400 + + Plugin: Add STAGE_10 Loader + +commit 586a3192d028b082762f1d48fff813d1fce1657c +Author: Eduardo Silva +Date: Fri Sep 25 14:23:51 2009 -0400 + + Plugin: add register calls + +commit 3338ba5f12e53c867c54c2bfe501bcaf5daa282a +Author: Eduardo Silva +Date: Fri Sep 25 07:35:20 2009 -0400 + + Plugin: set to null next node + +commit a88c1bfd6648cf5da5e64d1c602e6727224b2675 +Author: Eduardo Silva +Date: Thu Sep 24 22:11:40 2009 -0400 + + Plugin loader + +commit 4e224354585557a928dde0efd1f2097ff9e6d14c +Author: Eduardo Silva +Date: Wed Sep 9 11:19:16 2009 -0400 + + Client request struct: add init connection time + +commit 2fc827a77c0d5ade9f49dba7425b5404a13d8865 +Author: Eduardo Silva +Date: Tue Sep 8 20:39:07 2009 -0400 + + Cheetah: Sync active/closed requests counter with keepalive + Cheetah: Update counters just if cheetah is running + +commit d70d554536fcb17f5264e484bd34da891ffc69f4 +Author: Eduardo Silva +Date: Tue Sep 8 13:42:34 2009 -0400 + + Cheetah: first try for worker memory usage + +commit ee0f73b425ad3786a1ea4066dd22737edc38ec05 +Author: Eduardo Silva +Date: Mon Sep 7 13:37:04 2009 -0400 + + Cheetah: show task id in workers list + +commit 88849c2e9196a99ad23be26be7a44c38a60e8238 +Author: Eduardo Silva +Date: Mon Sep 7 13:36:36 2009 -0400 + + Workers export task id (pid) + +commit 19aa64a01847cce57a8c2a4ac6f68f9e125975f7 +Author: Eduardo Silva +Date: Sun Sep 6 21:30:27 2009 -0400 + + Cheetah: Print running username in 'status' + +commit 967d9f047886ceb50456835ece57379ffa5f2039 +Author: Eduardo Silva +Date: Sat Sep 5 10:55:34 2009 -0400 + + Fix #34: mk_string_casestr is not ignoring case + +commit a55ebcb5b8e7c167ad9ddbde6af960aa11be65d2 +Author: Eduardo Silva +Date: Sat Sep 5 08:48:52 2009 -0400 + + Add Monkey favicon.ico + +commit dd071fafd8f3b62cc7d2e32c1ee6ae1823633ed7 +Author: Eduardo Silva +Date: Thu Sep 3 21:11:17 2009 -0400 + + New Cheetah Shell !!! + Add connections counter + Fix broken pipes on threads, avoid signal + Fix Post method validation + +commit 9de9fffc73b70cdac7e5ffe67fb212dc97cfb7e4 +Author: Eduardo Silva +Date: Sun Aug 30 16:57:50 2009 -0400 + + User home string to mk_pointer + +commit a21165c689be874f924c884404aaa145f63eee4e +Author: Eduardo Silva +Date: Sun Aug 30 14:11:25 2009 -0400 + + Fix KeepAlive struct cleaner for next connection + +commit c6aca66f83ed9f4f859661a4aba83c90b7b3704b +Author: Eduardo Silva +Date: Sun Aug 30 12:43:57 2009 -0400 + + HTTP: Default Keep Alive connections for HTTP/1.1 + +commit 270ed5731f05e231c4ac31fee7bbdc88bb48a88b +Author: Eduardo Silva +Date: Sat Aug 29 23:20:11 2009 -0400 + + Little internal changes + +commit bef7eb7196db16c839a43a80c66ab276d0482862 +Author: Eduardo Silva +Date: Sat Aug 29 21:24:25 2009 -0400 + + Set TCP_CORK off after first sendfile() chunk of data + +commit 2af8085e9ce5b02b2133c2e99373fb72e4020f1e +Author: Eduardo Silva +Date: Sat Aug 29 18:38:28 2009 -0400 + + Logfile: use clock cache for unix time + +commit faddaa90fc747e36501654def75b885df8fc0128 +Author: Eduardo Silva +Date: Sat Aug 29 18:32:25 2009 -0400 + + Do not re-check first method + +commit 93367fe47503cfc9c7b2cb64b720301109902729 +Author: Eduardo Silva +Date: Thu Aug 27 09:59:31 2009 -0400 + + Move back socket server to accept + +commit 9167765ad3a7a399721a7707adbb669e8fcd1dd5 +Author: Eduardo Silva +Date: Thu Aug 27 09:44:24 2009 -0400 + + Fix compiling warning + +commit d6bbcd1302e5100aaaf4d1ee6046d37c609ddfe1 +Author: Eduardo Silva +Date: Sun Aug 23 21:36:08 2009 -0400 + + Fix bind error message + +commit a960c90a9e6ed88c3f52dd69121f123da3fa7366 +Author: Eduardo Silva +Date: Tue Jul 28 19:31:00 2009 -0400 + + No delay socket server + +commit 8d9957b21f4de9979c79f93caf6a86596649bbde +Author: Eduardo Silva +Date: Tue Jul 28 13:59:33 2009 -0400 + + Remove redundant time conversion + +commit 603698fc2c2bcc1596f70fa99c190fb1b7ef112d +Author: Eduardo Silva +Date: Tue Jul 28 13:40:12 2009 -0400 + + Fix check pending Post method + +commit 06c12d4fb5964d2d5a54c06947171f658aec6fdd +Author: Eduardo Silva +Date: Tue Jul 28 09:20:15 2009 -0400 + + Server accept() after epoll notification + +commit 7015754e680a1b27d22675ccc1c6da4c398ffeee +Author: Eduardo Silva +Date: Mon Jul 27 22:10:02 2009 -0400 + + content type to mk_pointer + +commit 072304af9ff00bf28766df07c5040e63917edc90 +Author: Eduardo Silva +Date: Mon Jul 27 21:12:07 2009 -0400 + + Reduce iovec entries + +commit 0ed4a449c37c8cfe8da5c669d0e0255bc7d30c75 +Author: Eduardo Silva +Date: Fri Jul 17 09:01:31 2009 -0400 + + Remove old CGI call: M_CGI_change_dir + +commit 39a800a2e9af055a919d20b762e256e2f3f8978f +Author: Eduardo Silva +Date: Thu Jul 16 01:38:15 2009 -0400 + + Catch write() return value + +commit 8efce2435d757dc0c907c19c4fcacb47243ebd7a +Author: Eduardo Silva +Date: Thu Jul 16 01:35:42 2009 -0400 + + Add debug macro DEBUG_HEADERS_OUT + +commit 8e10b37e0bdeb40535a584ab97eb4f82adf6ff51 +Author: Eduardo Silva +Date: Thu Jul 16 01:29:37 2009 -0400 + + Global egid and euid + +commit dac19c2fbaaa8129ca6634d2c838423154de33ad +Author: Eduardo Silva +Date: Sun Jul 5 13:53:00 2009 -0400 + + Rename HowItWorks doc to HowItUsedToWork + +commit 50859e6b2279711bb2414309e98c9e8aed270f0c +Author: Eduardo Silva +Date: Sun Jul 5 12:32:07 2009 -0400 + + Remove old configuration directive for header and footer files + +commit dfa23a0584b5ed124cc915ecd2a4a7dd6265aa3c +Author: Eduardo Silva +Date: Sat Jul 4 22:32:02 2009 -0400 + + dir_html :: list symbolic links + +commit b2fbd73c583b22c585de1c8fb77733497cd694fe +Author: Eduardo Silva +Date: Sat Jul 4 22:24:21 2009 -0400 + + dir_html :: Do not show hidden files + +commit 55ccebb42408d684349a307d8654e9289c970ca4 +Author: Eduardo Silva +Date: Sat Jul 4 13:47:24 2009 -0400 + + Add body NULL byte when receiving request + +commit bd0a0577b1d619e25a2d76b129fabbe843d9a607 +Author: Eduardo Silva +Date: Mon Jun 29 22:48:34 2009 -0400 + + Fix status 501 message + +commit c4e655c73ac12dcdf0060ccf5cfa8d3e03c8bc3d +Author: Eduardo Silva +Date: Sun Jun 28 20:38:38 2009 -0400 + + Adjust init details, port added + +commit 251073b94eac963e91cfdbe8da751cbb72f2be38 +Author: Eduardo Silva +Date: Sun Jun 28 11:48:38 2009 -0400 + + Fix query string limits + +commit 18937e3eac72b9cb8fc244dcecdaa296c8be657c +Author: Eduardo Silva +Date: Sun Jun 28 11:16:58 2009 -0400 + + Remove old macro + +commit c04c25bce0c5fdcc581bdb03ecd6a96d37fec13f +Author: Eduardo Silva +Date: Sun Jun 28 00:06:47 2009 -0400 + + Add Palm files license + +commit a8b016473703cc61e77bc6f68552d4f6f9fd081c +Author: Eduardo Silva +Date: Sun Jun 28 00:01:58 2009 -0400 + + Add Palm Server + +commit 22b5b5d6eee5bf44c420294c46dede70eddc5373 +Author: GreenFox +Date: Sat Jun 27 21:56:18 2009 -0400 + + Fix #29: add ico image/x-icon to mime type to support favicon.ico. Removed duplicate mime declare + +commit f65b6950013726642c017f6431aeaa7cf24532ab +Author: Eduardo Silva +Date: Sat Jun 27 21:48:32 2009 -0400 + + Fix #28: Crafted request produces Denial Of Service + +commit 646a287a0b2662ebb4bfcfa85c0ec00ed7956f8f +Author: Eduardo Silva +Date: Sat Jun 27 20:44:39 2009 -0400 + + read :: Do not omit last byte + +commit 0b9440830a2b6c8b79b90795276a7a56592f8624 +Author: Carlos Ghan +Date: Sat Jun 27 20:09:31 2009 -0400 + + Fix #26: Fix POST method + +commit 0881b47840c9923759356e46617f59058e3e5eee +Author: Carlos Ghan +Date: Sat Jun 27 19:05:49 2009 -0400 + + Fix #27 Small english typo + +commit b98f347846110fdffed48bf586e8dea88cdf06d9 +Author: Eduardo Silva +Date: Sat Jun 27 18:36:05 2009 -0400 + + dir_html :: merge new tags - part 2 + +commit e56a4efcceba47f7256dbd475973a2e307559f36 +Author: Eduardo Silva +Date: Mon Apr 27 23:24:05 2009 -0400 + + dir_html :: merge new tags, part 1 + +commit bcb5047702fa37b92dbdd7f77e6430525285ecbe +Author: Eduardo Silva +Date: Sat Mar 21 16:09:56 2009 -0400 + + New sanity check: test if O_NOATIME can be used + +commit 02328c50bc25cb69843c78a938af8a8ef4e1b91c +Author: Eduardo Silva +Date: Sat Mar 21 10:22:19 2009 -0400 + + Add validation to open() when serve static files + +commit caec1541cb2f1fb1828732b58106a6d4d7ce891a +Author: Carlos Ghan +Date: Sat Mar 21 10:17:44 2009 -0400 + + Fix #25: Cannot serve files when execution user is changed + +commit 4e1a6d091b221c70582dd56f231b7b75433dc2e4 +Author: Eduardo Silva +Date: Sat Mar 21 10:14:47 2009 -0400 + + Fix function parameter + +commit 0b5e234802e9a1cc5e5d93a2feb747e0c74a052e +Author: Eduardo Silva +Date: Fri Mar 20 17:34:21 2009 -0400 + + Check for logfile permission + +commit 947bb00838d4e345aeee53c85fb6a1aa5786cea3 +Author: Eduardo Silva +Date: Fri Mar 20 08:34:30 2009 -0400 + + Change default security configuration + +commit 9604701f6818e74ce2f09d886e24526286c39f59 +Author: Carlos Ghan +Date: Thu Mar 19 16:15:32 2009 -0400 + + Fix #16: Set workers default + +commit 1bda3836279370030bf5ff4cbcc5495eae78feb8 +Author: Carlos Ghan +Date: Thu Mar 19 16:04:54 2009 -0400 + + Fix #18: Wrong content-length when sending error responses + +commit a55a7844bf3720baed7b7400917e13ffaf7af54c +Author: Eduardo Silva +Date: Thu Mar 19 10:15:14 2009 -0400 + + Reduce unnecessary strlen() calls + +commit 0812e887dc729f79a24970128a5bc50c5ee89572 +Author: Eduardo Silva +Date: Wed Mar 18 17:51:16 2009 -0400 + + replacing strncpy w memcpy + +commit 8ef0021ab95a387aac15d0a7ec735c7126336f57 +Author: Eduardo Silva +Date: Wed Mar 18 16:17:23 2009 -0400 + + Little changes to improve speed + +commit b8800d620d39048f46c83a74fa507e7f39ecfe58 +Author: Eduardo Silva +Date: Mon Mar 16 15:36:50 2009 -0400 + + Use memcpy in mk_string_copy_substr instead of strncpy + +commit 6077fce3c1e541182f336ec2d9708b18243be773 +Author: Eduardo Silva +Date: Mon Mar 16 15:09:34 2009 -0400 + + mk_mem_alloc_z() now uses bzero() + +commit ff08b195ea8924f8e909d20f353123944db8357a +Author: Carlos Ghan +Date: Mon Mar 16 14:24:11 2009 -0400 + + Fix #24: no memory freed + +commit 5a9c836775efaf63fb66611b891ed17c28e134d5 +Author: Carlos Ghan +Date: Mon Mar 16 14:18:02 2009 -0400 + + Fix #22: Memory leak at dirhtml, no freed memory + +commit 25db2a83e560b680dfeb76f85f4ec06e4729322f +Author: Carlos Ghan +Date: Mon Mar 16 14:01:01 2009 -0400 + + Fix #20: Uninitialized request_index + +commit 2c81b5f499295cf291903dbb4ef3cfe1ea36a18c +Author: Carlos Ghan +Date: Mon Mar 16 13:56:02 2009 -0400 + + Fix #23: Feature that allow to show directory of local users is not working + +commit ad3001370f7accf191ed17d134ab919bdb17ef5b +Author: Carlos Ghan +Date: Mon Mar 16 12:40:14 2009 -0400 + + Fix #23: Wrong size in mk_mem_mallox_z + +commit 2b615b515a7063684933f059754d1aa3ab2fb056 +Author: Carlos Ghan +Date: Sat Jan 3 10:39:35 2009 -0500 + + Fix empty content-length when status = 301 (Moved Permanently) + +commit 538f7094c2ee5991dae6f3ee62d33ee5b6e8ce27 +Author: Carlos Ghan +Date: Sat Jan 3 10:35:56 2009 -0500 + + Fix regression in mk_request_header_find + +commit 646917d6d9a9514402cd567f418efba7cadfdd50 +Author: Eduardo Silva +Date: Fri Jan 2 15:17:26 2009 -0500 + + Avoid memory allocation when checking method + +commit a6e890d0f2a6e93d9b8a1d14de192f5eb6ee45e3 +Author: Eduardo Silva +Date: Fri Jan 2 14:47:37 2009 -0500 + + Improve client list using an index + +commit 965ceed5165d73c387c125d0d7d41505985c70e8 +Author: Eduardo Silva +Date: Fri Dec 26 13:45:51 2008 -0500 + + Reset header TOC before use it + +commit ded951e87690c130d09f6a3b35a4886b9987acaa +Author: Eduardo Silva +Date: Fri Dec 26 11:39:54 2008 -0500 + + Add header TOC + +commit a964699b995f714860483263f87b651e1bcffe90 +Author: Eduardo Silva +Date: Thu Dec 25 20:19:25 2008 -0500 + + Tune monkey using file descriptor system limit + +commit 973978aefac6fffdd5ede21c5c41de768d49d932 +Author: Eduardo Silva +Date: Thu Dec 25 12:46:38 2008 -0500 + + Cleanup code + +commit 5cae27bb6c812b2ac733abeb8422db15aa39cca3 +Author: Eduardo Silva +Date: Thu Dec 25 12:17:45 2008 -0500 + + New server loop call, cleanup code + +commit ee243ce40581ccbc52fe3437fbb587f1ea93ef3a +Author: Eduardo Silva +Date: Thu Dec 25 11:44:53 2008 -0500 + + Remove old convention for header and footer files for directories shown + +commit 3dd7a1a0e5923fe5c6cbf00a7e72fbd01f75da1a +Author: Eduardo Silva +Date: Thu Dec 25 11:40:15 2008 -0500 + + Rename signal calls + +commit 06b2a42d2ead814e5e78e9a582e1ab54df769ae2 +Author: Eduardo Silva +Date: Thu Dec 25 11:26:57 2008 -0500 + + Separate worker call + +commit 33ad589f69e9b3efdb2de9e5da995465b0b05a8d +Author: Eduardo Silva +Date: Thu Dec 25 11:02:52 2008 -0500 + + Socket server creation cleanup + +commit d2fc71d3951eadbd0b6c33994df082e23e7c5a55 +Author: Eduardo Silva +Date: Thu Dec 25 09:50:18 2008 -0500 + + Close directory file descriptor + +commit 20b59dbad078dc5085bd9be0675dce4497f8435e +Author: Eduardo Silva +Date: Thu Dec 25 01:56:38 2008 -0500 + + Fix worker logger I/O timeout + +commit c27a816dc24bc08db9b6554b8ed947452c51ef81 +Author: Eduardo Silva +Date: Thu Dec 25 01:02:04 2008 -0500 + + Fix get ip from socket + +commit 1157205b8f45ef083ffe9e386dad97737a55e469 +Author: Eduardo Silva +Date: Wed Dec 24 17:40:24 2008 -0500 + + Renaming functions and avoid gcc warnings + +commit 0069fdcee6dd60ae9b7ec449afe3b2ac595cc717 +Author: Eduardo Silva +Date: Wed Dec 24 17:04:47 2008 -0500 + + Palm, alloc buffer just for process request + +commit 538d126a33a6ecaaa112cae23be0ea88085f2320 +Author: Eduardo Silva +Date: Wed Dec 24 17:03:36 2008 -0500 + + Replacing deprecated inet_ntoa() with inet_ntop() + +commit 2df74272f5c39cb06ea2c451c2c36ca00a496987 +Author: Eduardo Silva +Date: Tue Dec 23 21:03:15 2008 -0500 + + Free uri processed + +commit 9bbf67c55720345456023a4ef9c26546df6fe959 +Author: Eduardo Silva +Date: Mon Dec 22 21:21:59 2008 -0300 + + Close connection when client has not sent the full request and server buffer is full + +commit 30887e6dcb2e6c0e317e3eedfdc4b44e181b4b9d +Author: Eduardo Silva +Date: Sun Dec 21 23:07:43 2008 -0300 + + Fix end post method string in header check + +commit dbc90438f6b7e33a1eb806db7b5ec56baf883a61 +Author: Eduardo Silva +Date: Sun Dec 21 19:05:11 2008 -0300 + + Replacing bad english expression + +commit 443ff906d3f671ff072f52950132cc090f086358 +Author: Carlos Ghan +Date: Sun Dec 21 18:37:09 2008 -0300 + + Fix iov.c, thanks to charlie + +commit 3c101c86d5239158f0a941e7256e9ce83eefc2f9 +Author: Eduardo Silva +Date: Sun Dec 21 18:06:42 2008 -0300 + + Fix #11: Reading beyond array due to missing list terminator, bug discovered and patched by Charlie + +commit 69c84c334549fdc78257b6e9760bb72803d19792 +Author: Eduardo Silva +Date: Sun Dec 21 17:55:31 2008 -0300 + + Fix invalid log error status, thanks to Charlie for report this bug + +commit c5a522ea8fec30fe1eecb9ad26dd40ca4a706e69 +Author: Eduardo Silva +Date: Fri Dec 19 09:24:55 2008 -0500 + + Improve uri check and code cleanup + +commit a7628885af7f1c9e85e55cf9817d1ba519da17c7 +Author: Eduardo Silva +Date: Mon Dec 15 18:10:33 2008 -0500 + + Reset iov buf to free idx + +commit b3fb2d534225e7bb8cfed676deed423b169bddc8 +Author: Eduardo Silva +Date: Mon Dec 15 07:56:31 2008 -0300 + + Add header iov struct cache + +commit d1fb540a868b28d485adde1e621fe42cd82d9531 +Author: Eduardo Silva +Date: Mon Dec 15 07:25:01 2008 -0300 + + Fix Ticket #8: Fix logged method (in access.log), HEAD method, thanks charlie! + +commit 3cea704d31d8faaafcea51b8dd134636e0df145e +Author: Eduardo Silva +Date: Mon Dec 15 07:17:39 2008 -0300 + + Fix ticket #7: A little fix in content-range response (thanks to Charlie!) + +commit 9af2c78dbb2a2963553d7a8835b0cf397daebe63 +Author: Eduardo Silva +Date: Sun Dec 14 18:25:51 2008 -0300 + + Add cache for log iov struct + Improves to Palm protocol + Remove unnecessary calls + on mk_mem_free, do not check if pointer is NULL + +commit f5152b5c343541c018609e64e786de6b3a41210f +Author: Eduardo Silva +Date: Mon Dec 1 18:59:30 2008 -0300 + + Experimental "Palm protocol" support + Add missed clock.c file to configure script + Remove old functions + +commit c387f495f524cde4075a72babecdb294d28884cf +Author: Eduardo Silva +Date: Wed Nov 26 00:51:17 2008 -0300 + + set socket TCP_NODELAY flag + little fixes + +commit e7a00c8b855b2b31c91562e7a49413e1c3cc5a9f +Author: Eduardo Silva +Date: Mon Nov 24 22:23:50 2008 -0300 + + Using mk_pointer for content length + Fix content-type sent in header + +commit eb938f18cb84b7840030fb9e333503b7820a82bc +Author: Eduardo Silva +Date: Mon Nov 24 21:35:44 2008 -0300 + + iov add separator CRLF and LF + +commit 6bfe6b01876ab0de601170a7eeaf35c20d5cab85 +Author: Eduardo Silva +Date: Mon Nov 24 19:23:21 2008 -0300 + + Ticket #5: Byte-range request misbehavior (thanks to Carlos Ghan) + +commit 1204932a53b7a7040381345eb201995ed95606ff +Author: Eduardo Silva +Date: Mon Nov 24 19:15:44 2008 -0300 + + Ticket #4: Byte-range request will crash monkeyd (thanks to Carlos Ghan) + +commit b524ce25d6d4f0e9885a2392a7b283cc11ace84d +Author: Eduardo Silva +Date: Mon Nov 24 19:12:34 2008 -0300 + + header.c code cleanup + +commit 922c180a96e87a5928eaaf302c1876ac25fa50f7 +Author: Eduardo Silva +Date: Mon Nov 24 18:56:21 2008 -0300 + + Use mk_pointer for iov static data + +commit c344a1ab277aceb5b91530b84f133c8e0a518fe4 +Author: edsiper +Date: Mon Nov 24 16:42:00 2008 -0500 + + Improve mimetype calls + +commit 02cc8108f1f9ddf92a6bbb383478cb6606684523 +Author: edsiper +Date: Mon Nov 24 15:00:28 2008 -0500 + + Add GTM time to clock worker + +commit e50e4959238aedb6fa8fe7a167edd0cb146a699e +Author: edsiper +Date: Mon Nov 24 12:48:33 2008 -0500 + + Keep http status as str + +commit 77b227df74e37773c14d71f8a68708f2ba299ebe +Author: Eduardo Silva +Date: Sat Nov 22 09:46:15 2008 -0300 + + Remove old PutTime() func + +commit 7425d2d9f9530870d8d3b743e7a8d0122f4a5784 +Author: Eduardo Silva +Date: Sat Nov 22 09:42:09 2008 -0300 + + New timer clock to replace the amount of strftime() calls + Request headers to mk_pointer + +commit c4b9c5597c8e78286cbc57269c3c0b8f0cfa9ef6 +Author: edsiper +Date: Fri Nov 21 11:08:31 2008 -0500 + + Improve mk_string_search performance + +commit bb0fd6da25c580b048a35831029ebd4c05f5255d +Author: Eduardo Silva +Date: Thu Nov 20 07:07:02 2008 -0300 + + remove string search debug message + +commit a3297cb186b502abacd38768f54a047b5867ce3e +Author: Eduardo Silva +Date: Thu Nov 20 07:03:22 2008 -0300 + + Header responses to mk_pointers + http decides when request reader stop to read client request + Post method working again + Restricted CRLF on headers, no more support for LFLF + Close socket when client close connection without bytes sent + +commit bdb928d30ddcc1409fa57f4bea85e50d3d141d23 +Author: Eduardo Silva +Date: Mon Nov 17 07:06:53 2008 -0300 + + remove comments + +commit f5331effeb20374b22e291207f6295a0170541f2 +Author: Eduardo Silva +Date: Mon Nov 17 07:03:02 2008 -0300 + + #2 Fix denied URL checking @ deny.c (Charlie) + +commit f9201766137018e3ed0256c632a9c059563eb36e +Author: Eduardo Silva +Date: Mon Nov 17 07:01:21 2008 -0300 + + Fix double-slash problem in URI when requesting a directory (Charlie) + +commit 5ddcdbea4f500f1b48950ec02a552078329a7a12 +Author: Eduardo Silva +Date: Sat Nov 15 11:37:43 2008 -0300 + + Fix query string parser + +commit d61b5fde821f0c6f5d706958c87402b169fd03e7 +Author: Eduardo Silva +Date: Sat Nov 15 09:28:00 2008 -0300 + + Fix logger + missed protocol + +commit 43feae5b5df59e5e994812b54abbcb11ec89a5ba +Author: Eduardo Silva +Date: Sat Nov 15 08:53:26 2008 -0300 + + Fix first header parser + +commit aef0b2695940cc3382e675fabaa5679464bb29cf +Author: Eduardo Silva +Date: Fri Nov 14 22:49:09 2008 -0300 + + missed 501 Method text + +commit 9e34a8a4ca852df6fec9453c097ed275e64549b0 +Author: Eduardo Silva +Date: Fri Nov 14 22:46:37 2008 -0300 + + Add response: 501 Method Not Implemented + +commit 0108d692e2bb6bf8a0a5c06f56ab717b77c01d9a +Author: Eduardo Silva +Date: Fri Nov 14 22:06:03 2008 -0300 + + mk_pointer fix (Thanks to Charlie) + +commit 7ebd110d70523d8bfe13c2b98c06187211f0187f +Author: Eduardo Silva +Date: Tue Nov 11 06:58:05 2008 -0300 + + conn_switch.c header + +commit a16ab122072dabe9b10ace22ce4bb250107ef6f3 +Author: Eduardo Silva +Date: Mon Nov 10 22:22:31 2008 -0300 + + dir_html :: fix toc free + +commit 544802787f523c7c92740201896a3b0a181a0530 +Author: Eduardo Silva +Date: Sun Nov 9 22:27:18 2008 -0300 + + dir_html :: free memory + +commit 81663c76c825d461d023e9ce64edb2ed2d0e7cd3 +Author: Eduardo Silva +Date: Sun Nov 9 09:25:48 2008 -0300 + + Add DEBUG file with debug available macros + +commit af1dfdcb4d0ff7bcefebcdd374e0aa1487032d17 +Author: Eduardo Silva +Date: Sun Nov 9 09:25:29 2008 -0300 + + dir_html :: contributors list + +commit 7fe47dc094868be029b1b43057d6a6aa6e9f441f +Author: Eduardo Silva +Date: Sun Nov 9 09:17:23 2008 -0300 + + dir_html :: using linked list instead of realloc array + +commit 6e02483185f6fe1c98e893764c7709337356c1ff +Author: Eduardo Silva +Date: Tue Oct 21 00:51:03 2008 -0300 + + dir_html :: add new logo to guineo theme + +commit 5a002775c0b5e17ee0802e05a6008486287facb3 +Author: Eduardo Silva +Date: Tue Oct 21 00:32:29 2008 -0300 + + New index page + new logo + +commit fc9807908d1e9146f228ed8268efdb979e1bcaf1 +Author: Eduardo Silva +Date: Mon Oct 20 21:10:49 2008 -0300 + + dir_html :: add chunked transfer encoding + +commit be633b0fb03c18fa367bdd9760fd10d395a1607e +Author: Eduardo Silva +Date: Mon Oct 20 19:49:22 2008 -0300 + + iov :: add offset support + +commit 5cd05a86ced0dcd6c60c4f91a1d0c7aa391ad31c +Author: Eduardo Silva +Date: Mon Oct 20 18:46:33 2008 -0300 + + Fix banana script (thanks to Carlos) + +commit ba612d89233054f1e8988ddd347be036f64c53bd +Author: Eduardo Silva +Date: Mon Oct 20 18:38:49 2008 -0300 + + dir_html :: test close connection + +commit f43b46275a004336c75a1cadf7daab5fa28ed6fd +Author: Eduardo Silva +Date: Sun Oct 19 02:58:22 2008 -0300 + + dir_html :: dynamic mem for midification time + +commit f01aadf03a489bf051641a05a4e46f0602931ba0 +Author: Eduardo Silva +Date: Sat Oct 18 00:21:42 2008 -0300 + + dir_html :: realloc entries + Complete exit on ctrl-c press + Add macro DEBUG_IOV + iov with debug print array size error + +commit 7ba641fccd0d8e5679a5f7f5c10805843fec2c58 +Author: Eduardo Silva +Date: Thu Oct 16 02:14:37 2008 -0300 + + dir_html :: no slash for modificaton time + +commit 012e67ac588db8ca0a10c361c184e5c5a75db40d +Author: Eduardo Silva +Date: Thu Oct 16 02:09:08 2008 -0300 + + dir_html :: add entry modification time + +commit 9db021996ac43c89150d897bfd61c9fbbb2549c8 +Author: Eduardo Silva +Date: Tue Oct 14 23:29:00 2008 -0300 + + dir_html :: size to human readable, thanks to Felipe Astroza + +commit a4fb04acd577c04349874ef8902a9b123a0e84f7 +Author: Eduardo Silva +Date: Mon Oct 13 23:14:20 2008 -0300 + + dir_html :: add size type + +commit 7df80a21617e29b06414121e16fdb33004041cf6 +Author: Eduardo Silva +Date: Mon Oct 13 20:17:05 2008 -0300 + + dir_html :: guineo template improves + add entry size + +commit cb91fbb94225b7a4be5caf77fafd4a5cfd89c7ac +Author: Eduardo Silva +Date: Sun Oct 12 12:21:53 2008 -0300 + + http :: allow case sensitive check + +commit 66679c7f39b18f7f44c88c67392f56219be77026 +Author: Eduardo Silva +Date: Sun Oct 12 12:17:25 2008 -0300 + + dir_html :: internal improvements + +commit 3b3be2446418fc7abe12bc69d466f50746739f37 +Author: Eduardo Silva +Date: Fri Oct 10 19:26:22 2008 -0400 + + Fix directory redirect + +commit 1972bf6a1aa24012ec92f34ea50611ad485c5871 +Author: edsiper +Date: Thu Oct 9 18:28:43 2008 -0400 + + Fix hex to string parser + +commit ee683c0a34e0977308da02e69901e3c1cfd0541d +Author: edsiper +Date: Tue Oct 7 14:04:01 2008 -0400 + + dir_html :: sort entries + +commit b34646518e537048fbc8f64e6365910c9d81af13 +Author: Eduardo Silva +Date: Mon Oct 6 23:44:54 2008 -0400 + + dir_html :: send html + +commit b2f1f63a653105289fd8be8d1049017b2bafa140 +Author: Eduardo Silva +Date: Tue Sep 30 20:00:39 2008 -0400 + + dir_html: compose theme to stdout + +commit 92aab3c4495476f2fa3428bd90f4b5e3f9e183d5 +Author: Eduardo Silva +Date: Sun Sep 28 22:28:32 2008 -0400 + + Testing creating dynamic response template + +commit f27e8ecfd458c816200d3c18715786c7da827da9 +Author: Eduardo Silva +Date: Sun Sep 28 10:08:24 2008 -0400 + + DEBUG_THEME: show tag instead NULL + +commit 10d3df3ce0aced117e0ca04e28d3477318078b35 +Author: Eduardo Silva +Date: Sun Sep 28 10:03:56 2008 -0400 + + Add DEBUG_THEME feature + +commit 26a74a13d2a80e1beb8ab732d91c1c62ea56124a +Author: Eduardo Silva +Date: Sat Sep 27 21:27:08 2008 -0400 + + Parsing theme to template struct + +commit 5c54312c7cbda975f364f6332dc2634e68f06a4a +Author: Eduardo Silva +Date: Sat Sep 27 09:49:04 2008 -0400 + + dir_html: Parsing theme + +commit 6a526bb44af303a8b8122808f05fbdd64d9a92fb +Author: Eduardo Silva +Date: Thu Sep 25 09:46:13 2008 -0400 + + testing dirhtml_conf + +commit 66615f981ab98d096dae25fb0588bb434e4d5eaa +Author: Eduardo Silva +Date: Thu Sep 25 07:38:52 2008 -0400 + + add mk_file_to_buffer func + +commit 0c953534f1889f3baadf9a56fa1a88858a81d80e +Author: Eduardo Silva +Date: Thu Sep 25 07:22:48 2008 -0400 + + Initial dirhtml support + +commit 96237ea8a195fa73abb884833dcce2462e89e356 +Author: Eduardo Silva +Date: Tue Sep 16 19:58:58 2008 -0400 + + Do not allow keep alive if client has not requested + +commit 3432c233e09f941899d643fba000a6e0109eccee +Author: Eduardo Silva +Date: Tue Sep 16 19:55:38 2008 -0400 + + little fixes dir_html + +commit 6a786ad323e78e60bc81529cf1db1889d1b5556c +Author: Eduardo Silva +Date: Mon Sep 8 20:21:22 2008 -0400 + + dir_html 2/3 + +commit 36e37427ec2d6d29dcf3d549f2f4e3caf9bb1369 +Author: Eduardo Silva +Date: Sun Aug 3 21:17:49 2008 -0400 + + Headers & new dir_html 1/3 + Reducing memory allocation on sending headers + +commit ad88177e27ab339d8694a20ca05a4699911c1ef8 +Author: Eduardo Silva +Date: Wed Jul 23 21:41:35 2008 -0400 + + ups + +commit b941b49de531e6805fe8c88165f69a1ce4304509 +Author: Eduardo Silva +Date: Wed Jul 23 21:39:23 2008 -0400 + + Send content-length in header when error pages are created + Deleting old vhost convention + Fix bug when directory shower runs more than one time + +commit 3383230e0dda2160404b30d89d36bbe465021562 +Author: Eduardo Silva +Date: Tue Jul 22 21:52:53 2008 -0400 + + Handle log errors 2/2 + +commit 7c6ae0e2168b293c32af681acdf8db112a364b92 +Author: Eduardo Silva +Date: Tue Jul 22 05:33:58 2008 -0400 + + Handle log errors 1/2 + +commit c6c3b0db1bf3620123fcd1c71f1b474367db6df0 +Author: Eduardo Silva +Date: Sun Jul 13 22:10:45 2008 -0400 + + Logger: add client ip address + +commit 54d43688d2e7f472ac5d2e163f5ca8a2c44a5225 +Author: Eduardo Silva +Date: Sun Jul 13 21:41:59 2008 -0400 + + Renaming request calls + +commit 162cf432a5b3204b42d2b9d16e0b3f46aa89bf4b +Author: Eduardo Silva +Date: Sun Jul 13 19:48:41 2008 -0400 + + enable mk_string_search_n + +commit 9e3e03d0ddc124068c000020ee92b341b677104b +Author: Eduardo Silva +Date: Sun Jul 13 18:29:58 2008 -0400 + + Using mk_pointer to handle request header + +commit 65dc1fecf6e21b69da89d8ac1f185ecb20eb8788 +Author: Eduardo Silva +Date: Mon Jul 7 21:10:45 2008 -0400 + + New mk_pointer + +commit b660f9cd91b6ec2a4373ff55be0dbed00639f3e2 +Author: Eduardo Silva +Date: Sun Jul 6 19:56:46 2008 -0400 + + Little optmz + +commit eb7b16f171f719597cf6f68317f940e5c35b80a9 +Author: Eduardo Silva +Date: Thu Jul 3 22:07:34 2008 -0400 + + Optimize buffer builder + +commit c183fe2a89bce1fa1258d8e0674631c625d626d4 +Author: Eduardo Silva +Date: Tue Jul 1 00:17:27 2008 -0400 + + Worker logger + +commit e586ee3dc1418d8cdc5bf9d78c036260fbdbcd68 +Author: edsiper +Date: Tue Jun 24 09:32:21 2008 -0400 + + add memory.c and str.c + +commit cf7d0f66392daa893857408c3d9ff314d9785b2a +Author: edsiper +Date: Tue Jun 24 09:31:29 2008 -0400 + + Code reorganization + +commit 1ac323d1bf94f5709ff86035d9d5a0e875a6d5d1 +Author: Eduardo Silva +Date: Sun Jun 22 12:58:08 2008 -0400 + + Symlink fix + +commit 0588038329de27879da323099b1305b54c7e2add +Author: Eduardo Silva +Date: Sat Jun 21 16:08:13 2008 -0400 + + Close connection on error + +commit 0d8f033bf8143ae170d2fdae0c01ad787c8154df +Author: Eduardo Silva +Date: Sat Jun 21 16:01:29 2008 -0400 + + Fix symlink check + +commit 338cd5fd241ba4c58de77ac26760aefce6507f43 +Author: Eduardo Silva +Date: Sat Jun 21 09:49:57 2008 -0400 + + Improve string search + +commit 48c24f7c477dcf8bedc727344bf6b3c34e370375 +Author: Eduardo Silva +Date: Thu Jun 12 20:01:28 2008 -0400 + + Partial download (ranges) working again + +commit 1bc2c11931b979ff069b273daf207e337e74aa96 +Author: Eduardo Silva +Date: Thu Jun 12 19:49:49 2008 -0400 + + KeepAlive alive again + +commit 44ea3c861afed4ecf7bc63bc7eee9014784528f1 +Author: Eduardo Silva +Date: Tue Jun 10 20:39:02 2008 -0400 + + close connection on sendfile() error + +commit 9acefc842023b80ff77d6be42fdf8cc952bacdba +Author: Eduardo Silva +Date: Tue Jun 10 20:37:22 2008 -0400 + + Less I/O on SendFile + +commit 895c573e040b73a296b518152d292a74cd56f654 +Author: Eduardo Silva +Date: Tue Jun 10 07:25:19 2008 -0400 + + remove silly cmp + +commit da1ac85e3238c5ab20d01083871efda0acfeccdc +Author: Eduardo Silva +Date: Mon Jun 9 21:20:09 2008 -0400 + + remove sendfile option from configure + +commit f10de3bcc2edb92795cf59f2cdfa74f1ce117412 +Author: Eduardo Silva +Date: Mon Jun 9 21:17:51 2008 -0400 + + Nostalgic commit: deleting old SendFile() + +commit 2abc9697945e1306be6b3784b915b3a0a2734e55 +Author: Eduardo Silva +Date: Mon Jun 9 20:07:01 2008 -0400 + + keep alive's back + +commit 8c746aadbc7a6d34fd316f21793acebf4ea82060 +Author: Eduardo Silva +Date: Fri Jun 6 20:22:31 2008 -0400 + + Fix Bug: method not allowed, thanks to Felipe (aka max) + +commit 7277b323704e9cd6ee176e74a007b8c0e893731b +Author: Eduardo Silva +Date: Fri Jun 6 20:02:24 2008 -0400 + + new connection switch + +commit e9f0c789d42fd9e49869dd1380bc4e8c103eaf5e +Author: Eduardo Silva +Date: Thu Jun 5 23:10:34 2008 -0400 + + new file.c + +commit 8512ddca1f4d9c57daebe841349c051f416e0f8a +Author: Eduardo Silva +Date: Thu Jun 5 23:09:50 2008 -0400 + + Lot of improves in memory and I/O + +commit 138ea37b1766bbecd616c4b0e016a61a39ea2325 +Author: Eduardo Silva +Date: Wed Jun 4 20:02:33 2008 -0400 + + new http.c file + +commit 6facb4ad9f8da893279317a8aec3135e72e6f9dc +Author: Eduardo Silva +Date: Wed Jun 4 19:49:13 2008 -0400 + + Little fixes + +commit 4d5162695fdc7ef0dc776a5d9e1d75ed7bd47f06 +Author: Eduardo Silva +Date: Tue Jun 3 23:06:44 2008 -0400 + + new strip arg and add of strcasestr + +commit 1a4c4c85167bec9895977aa9860be14af133f3a1 +Author: Eduardo Silva +Date: Tue Jun 3 21:30:58 2008 -0400 + + Little improve when free_list_requests() is called + +commit 63ca0ce5afe71025d2509ca51ce7263ccaca7cf0 +Author: Eduardo Silva +Date: Tue Jun 3 21:22:04 2008 -0400 + + Free some used memory + +commit bf5cbdb8ab48ae6574ae5d719d2da4cbf290d18b +Author: Eduardo Silva +Date: Tue Jun 3 20:08:42 2008 -0400 + + Async sendfile() + +commit 7e754de9e48fcb726028c73a8ccae4abadefb4fc +Author: Eduardo Silva +Date: Tue Jun 3 10:02:29 2008 -0400 + + Missed header file + +commit b00ca0bf969f428e99c563e1507310653fca7871 +Author: Eduardo Silva +Date: Tue Jun 3 07:54:28 2008 -0400 + + mk_header_iov_free can free specified buffers in struct iov + +commit 3d8553024399c1d74144da65b1859452e75e099a +Author: Eduardo Silva +Date: Mon Jun 2 23:32:42 2008 -0400 + + New header handler + +commit 27d9b0788ce0c8929500f5fd06cf436be9061189 +Author: Eduardo Silva +Date: Sun Jun 1 22:00:25 2008 -0400 + + Indent M_Method_send_headers() + +commit 47e026380a0310c320d4a44c6fddee64e7c070fb +Author: Eduardo Silva +Date: Sun Jun 1 21:34:25 2008 -0400 + + remove WTF! send headers code + +commit 03de80253bda392e2949bca9bca8416b71dc5134 +Author: Eduardo Silva +Date: Sun Jun 1 21:25:44 2008 -0400 + + Using TCP_CORK + +commit aa0f64e60264c10b0f6a4a7dfc7b445deba7b19f +Author: Eduardo Silva +Date: Sun Jun 1 19:34:16 2008 -0400 + + Scheduler fixes: a bug causing write to sockets before read data has been fixed, no visible broken connections with benchmark test. + Delete unused functions and remove some silly debug comments + +commit 59f282de2fdbbefbe67e23c0881543fd5ddf3d81 +Author: Eduardo Silva +Date: Fri May 30 21:07:07 2008 -0400 + + Scheduler improves, now using pthread_keys + Fix bug on broken connection + +commit e64f65ac977469aecead7c1c3645c900d29e6047 +Author: Eduardo Silva +Date: Thu May 29 23:46:12 2008 -0400 + + Comment some debug lines + +commit 2934b421b903e55185f587fab3e65427deb66c52 +Author: Eduardo Silva +Date: Thu May 29 23:40:13 2008 -0400 + + New network handler/scheduler + +commit 4fd7179f981378b28476c6f46bec68bc24439e19 +Author: Eduardo Silva +Date: Thu May 29 07:32:54 2008 -0400 + + Delete old headers + +commit 23ca2eb6721df92d69bbaa1af0c3c8f53de47e57 +Author: Eduardo Silva +Date: Thu May 29 07:31:46 2008 -0400 + + Delete invalid line + +commit 611990a22ce8ccc7be9b3c367e0bf1de93d2e076 +Author: Eduardo Silva +Date: Thu May 29 07:27:40 2008 -0400 + + Moving to epoll + +commit 3ff9f481734df23e440233a40ecc6c27a2f0e8b2 +Author: Eduardo Silva +Date: Tue Mar 25 23:59:21 2008 -0300 + + Missed header + +commit c05169bdfbee0e5ccb101c6f19faa22c2e63c357 +Author: Felipe Astroza +Date: Mon Mar 24 17:25:15 2008 -0400 + + mk_thread use flags and mutex defined by POSIX. + + The main problem to create an own implementation using FUTEX is: + There're necessary pieces of assembler code in order to use atomic operations, which makes + a little difficult port the current code between different archs. + Check the GNU libc repository, they have done this in pthread. + +commit 742be85595570e99ede8f03bc2a9133a7e42d514 +Author: Eduardo Silva +Date: Sat Mar 15 17:39:43 2008 -0400 + + Clean dirty msg + +commit 236de82434d0cb3d15911f2c9a5a4a31628f8d45 +Author: Eduardo Silva +Date: Sat Mar 15 17:39:09 2008 -0400 + + Testing logger-worker thread + +commit 8acef78282055a74c3d3976a9d467b672f60c7ac +Author: Eduardo Silva +Date: Thu Mar 13 00:05:25 2008 -0400 + + Back to single-thread mode + +commit e605067c62fbdd08f11641e2711f8a21513fddb0 +Author: Eduardo Silva +Date: Fri Feb 29 20:19:21 2008 -0300 + + Missed mk_common.c + +commit 8ff37a36c6ad5f176072a04dca7a4753854c336d +Author: Eduardo Silva +Date: Wed Feb 20 22:20:17 2008 -0300 + + pre-threading improves (Felipe) + +commit 232f05edffc947d0393a05072056bb962c215bbc +Author: Eduardo Silva +Date: Mon Feb 11 09:32:54 2008 -0300 + + Testing a pre-threading mode ;) + +commit 11aa96aabba0e76139e822dc108b4573e26d5843 +Author: Eduardo Silva +Date: Sat Feb 2 10:11:01 2008 -0300 + + Fix parser for POST request without content-length header + +commit 62cd0e38fea60df9914482fb2766a77869b658e6 +Author: Eduardo Silva +Date: Fri Feb 1 17:29:13 2008 -0300 + + POST method improves + +commit c61d267cac6904d82181f45eb280544973f9b938 +Author: Eduardo Silva +Date: Fri Feb 1 16:14:36 2008 -0300 + + Update CGI module to new structure + +commit 655369834b7fb4562f21672917848d6274770a55 +Author: Eduardo Silva +Date: Fri Feb 1 00:27:45 2008 -0300 + + host signature improves + +commit 629ecce1ab5cac296b138bd9391656c35905a409 +Author: Eduardo Silva +Date: Thu Jan 31 01:02:14 2008 -0300 + + Config: look for host configuration files under 'sites' + +commit 41ff8bf4b99984292e30c7661eaca64fa47cbed5 +Author: Eduardo Silva +Date: Wed Jan 30 20:35:52 2008 -0300 + + Update french translation scripts + +commit 14a512e99cc467462f671b54a20556b1649af10f +Author: Eduardo Silva +Date: Wed Jan 30 20:25:44 2008 -0300 + + Update spanish translation scripts + +commit dcb528ad51527ff7f63310efcf5dfc4afb32f59b +Author: Eduardo Silva +Date: Wed Jan 30 20:10:58 2008 -0300 + + Add missed 'sites' dir + +commit d771ad279f24af604000697f44b556aa1464340a +Author: Eduardo Silva +Date: Wed Jan 30 20:09:44 2008 -0300 + + Update configure script in order to create the new configuration files + +commit 16e27b46c47312ccde11b71511961fe396b33409 +Author: Eduardo Silva +Date: Wed Jan 30 17:47:42 2008 -0300 + + Remove old alloc() glib-2.0 compatibility + +commit dd9024bf0eb1ae5d2bbef97da4159cc1e4df9c99 +Author: Eduardo Silva +Date: Wed Jan 30 17:40:10 2008 -0300 + + Internal changes: vhost, configuration files + +commit 33d7c536140e4ef3bc2bc5079bc1a6ebd6937be8 +Author: Eduardo Silva +Date: Mon Jan 28 15:02:18 2008 -0300 + + Configure script: create bin and logs directories + +commit beb5b3e5780f1828f4fe70b6bae6899a207e3ddb +Author: Eduardo Silva +Date: Mon Jan 28 11:38:58 2008 -0300 + + remove old func def + +commit d20fa1310d341279c208058acb09bcad6c95c6d5 +Author: Eduardo Silva +Date: Mon Jan 28 11:37:55 2008 -0300 + + New option in configure script to force monkey do not use the sendfile() syscall + +commit 738f77f8d74e166cdb50446ce2a6c1a1b646a487 +Author: Eduardo Silva +Date: Sun Jan 27 22:46:38 2008 -0300 + + Use linux sendfile() system call to send static files + +commit 644f26433872148241089d28455709d345a66f07 +Author: Eduardo Silva +Date: Fri Jan 25 15:38:13 2008 -0300 + + Allow keepalive connections on HTTP/1.0 + +commit e6a0def4529729590c20e8ca2e6e9496f70d5129 +Author: Eduardo Silva +Date: Fri Jan 25 14:53:44 2008 -0300 + + Add benchmark mode + +commit e314a6a6ec373737eb61ce18546c31fe8be95b10 +Author: Eduardo Silva +Date: Fri Jan 25 07:39:50 2008 -0300 + + Fix closing connection + +commit 202c4489f3949b30eefd85e52c9f4a82d415a2ae +Author: Eduardo Silva +Date: Thu Jan 24 21:27:31 2008 -0300 + + Enable logs and keepalive + +commit 9561969192ee47a768fc3d32b025e2c3e59fbfbd +Author: Eduardo Silva +Date: Thu Jan 24 18:54:04 2008 -0300 + + Allow HEAD method on pipelined requests + +commit b8a3054dc1b98ae7276919f6b67032047c59a3d8 +Author: Eduardo Silva +Date: Thu Jan 24 18:49:41 2008 -0300 + + Fix protocol check + +commit 29a59ad689801ed334161c140d943e94beae074b +Author: Eduardo Silva +Date: Thu Jan 24 18:27:02 2008 -0300 + + Force pipelined request to GET method + +commit 01b4f5e740e8d4434ac233127aabcd0c43235f15 +Author: Eduardo Silva +Date: Thu Jan 24 16:33:47 2008 -0300 + + Improve remove_space() + +commit 3b034ed407f6b0f27da242b206cc76ec730be901 +Author: Eduardo Silva +Date: Thu Jan 24 16:30:34 2008 -0300 + + New request header checks + +commit 393d5a0c0552f9744ad039cac8b937a3d1b0665e +Author: Eduardo Silva +Date: Thu Jan 24 12:15:27 2008 -0300 + + Set pipelined connection + +commit c6906df327397bec608935d7bdfd92e51dc45874 +Author: Eduardo Silva +Date: Thu Jan 24 11:40:22 2008 -0300 + + Improve free request list + +commit 38cba9f3025f1103cb08aed736122e7cc33093e2 +Author: Eduardo Silva +Date: Thu Jan 24 02:11:04 2008 -0300 + + Fix free_request() + +commit 61bba201db3673155671e1fefa2ae6f82c77e336 +Author: Eduardo Silva +Date: Thu Jan 24 00:56:59 2008 -0300 + + Missed return value + +commit f3596f167a878d8dc93eea7fa49f9af412401468 +Author: Eduardo Silva +Date: Thu Jan 24 00:52:44 2008 -0300 + + Fix request parser: allow different end strings + +commit c6ac76f9d73cd2ce1b81783b62f10b23b597e587 +Author: Eduardo Silva +Date: Wed Jan 23 07:00:49 2008 -0300 + + Improve request parser + +commit 1a3032d8292105b2ef66936c1cfef21f9a7d8b43 +Author: Eduardo Silva +Date: Wed Jan 23 05:38:12 2008 -0300 + + Fix memory issues and some comments translation + +commit d8ae52d964ec7cc70d6d5cb084b731e8cbdd6af1 +Author: Eduardo Silva +Date: Tue Jan 22 19:28:06 2008 -0300 + + Add DEBUG function + +commit 2e426f18d80211a7123f11dff3ed6bb2cb52a5e2 +Author: Eduardo Silva +Date: Tue Jan 22 18:50:55 2008 -0300 + + Update process module + +commit ea18051bbe7ec6ac4f4ded168561e82cf1a0d3e4 +Author: Eduardo Silva +Date: Tue Jan 22 18:45:42 2008 -0300 + + Update user module in order to use new client structure + +commit 4a476936a656f2034c8a1a3610fca6ab7bd77b7c +Author: Eduardo Silva +Date: Tue Jan 22 18:40:59 2008 -0300 + + Update cgi module in order to user new client structure + +commit b29396485e8b6b428012648aa27fb55bd2a42861 +Author: Eduardo Silva +Date: Mon Jan 21 20:44:51 2008 -0300 + + Updating dir_html.c + +commit 7f533489ab8e4fc0eb8252475d8678480a89f08d +Author: Eduardo Silva +Date: Mon Jan 21 20:40:38 2008 -0300 + + Using struct client_request + +commit 749ef3cf9879feef026ebf70d2ce96b64d80aa82 +Author: Eduardo Silva +Date: Mon Jan 21 20:31:16 2008 -0300 + + request.c: cleanup code + +commit fbd9b3a9361cfa3411092d6a7c5bda3d1c2cd115 +Author: Eduardo Silva +Date: Mon Jan 21 19:46:55 2008 -0300 + + Replacing old vars + +commit bba620a52f3448faeb517db3192c6ccd9778756b +Author: Eduardo Silva +Date: Mon Jan 21 19:14:33 2008 -0300 + + change version name to 'git' + +commit 49a5cd928f82f2141c3e6e9d7ea8114c9e36a6a3 +Author: Eduardo Silva +Date: Mon Jan 21 18:58:12 2008 -0300 + + Parsing pipelined connections + +commit bc30b2a79d9f82ac2764bb065895c7306476f714 +Author: Eduardo Silva +Date: Mon Jan 21 18:49:10 2008 -0300 + + Initial import: version 0.9.2 diff --git a/src/fluent-bit/lib/monkey/ChangeLog.old b/src/fluent-bit/lib/monkey/ChangeLog.old new file mode 100644 index 000000000..11e5b52b3 --- /dev/null +++ b/src/fluent-bit/lib/monkey/ChangeLog.old @@ -0,0 +1,233 @@ +Monkey HTTP Daemon - ChangeLog +============================== + +v0.9.2 (2008/01/16): + - Translations: New translation of Monkey+PHP to + polish language and a funny 1337!, thanks + to Sugarush! + + - Bug fix: negative memory allocation when a request + doesn't contain a '?' string. Thanks to Daniel + Hope for discover this problem and submit a patch! + +v0.9.1 (2004/04/13): + - BUG FIXES: Thanks to Rob and Tavis of gentoo security + team for report it. A bug found causes a DoS when it's + requested a file with 0 bytes of lenght and another one + that was found on cgi.c where exist the possibility to + run any code we wished before the connection be closed. + +v0.9.0 (2004/10/28): + - Some internal changes. + - Fixed bug in if_modified_since feature. + - POST_TIMEOUT value changed to value 10 to fix a problem + found with lagged connections (thanks to Federico Fuga). + - A little Virtualhost bug has been fixed. + - Fixed limit of max persistent connections for virtualhosts. + - Persistent connection now works with directory nagivation. + - Fixed GetDir problem with special vhost configurations. + - Fixed 'close connection on dir request without / '. + - Memory leak fixes :) . + +v0.8.5 (2004/08/28): + - Now monkey works on NetBSD (Matthew Gream) + - Fixed a lot of memory leaks, thanks to Matthew Gream. + +v0.8.4-2 (2004/06/10) : + - A bug found on users home feature has been fixed (oops!). + +v0.8.4 (2004/06/10) : + - Length of client IP now it's checked, are not allowed + anormal IP strings (thanks to BSD Chile team for + report possible bugs). + +v0.8.4-RC2 (2004/06/08) : + - Fixed bug found on get_real_string() (thanks to Luigi for + report this bug). + - Header and footer files now are hidden to dir listing. + - SymLink, Max_IP and Timeout initial values are been added + to configuration (src/config.c). + - Fixed check path of Addscript var on src/config.c. + +v0.8.4-RC1 (2004/06/03) : + - New Binary size: 44.8KB (compiled with gcc-3.3)!!!. + - Better memory management!!!. + - A lot of snprintf and sprintf has been replaced. + - A lot of internal changes, now all headers are sent to + the same time (same buffer), now response from server + to client it's a little more faster. Ah, now you can + test monkey with Apache Benchmark without problems. + - New translation of Monkey+PHP to portuguess has been added. + - New mutex has been added to thread_counter var + (mutex_thread_counter). + - Glibc needs __USE_XOPEN to be defined in order to add + a prototype for strptime (src/utils.c) + - Fixed 'if' warning produced by src/deny.c. + +v0.8.3 (2004/05/28) : + - Added Check for Symbolic links (allow/deny). + - Added French translation (thanks to Dominique Voillemot). + - Fixed Cache comparison check. + - Fixed header date time of file, now server send time + in GMT. + +v0.8.2 (2004/02/10) : + - Fixed 'server signature' overwrite address. + - Fixed DoS bug caused by get_real_string() (function rewrited). + - Fixed bad timeout response when a persistent connection have + a timeout. + +v0.8.1 (2004/01/14) : + - Little corrections in system to set limit of connections from + same IP address. + - Fixed response 301 with a little delay in response to HTTP/1.1 request. + +v0.8.0 (2003/10/18) : + - Added a new feature to limit maximum of clients from same + IP address connected to server. + - New translation of Monkey+PHP document to Russian, thanks to Toto. + - Fixed little problem with files with length = 0, persistent + connection now in this case are closed. + - Now make clean don't remove bin/banana file. + +v0.7.2 (2003/09/09) : + - Added a new feature to show information by + directories, are two new variables in monkey.conf:header_file + and footer_file. This allow define a special file to be + showed when a full directory is shown. + - CGI support has been optimized. Post method is more + faster. + +v0.7.1 (2003/05/30) : + - Little bugs has been fixed in resume and virtualhost + supports. + - pthread_mutex_* functions has been added. + - strtok() has been replaced with strtok_r(). + - Some english translation has been fixed. + - Bug fixed in free_request(). + +v0.7.0 (2003/05/11) : + - Resume support has been added. + - Added MySQL module. This allow you register the log + entries in a MySQL database (UNDER DEVELOPMENT!, just for + test it). + - New variable 'Include' in monkey.conf has been added, this + allow you include another files in main configuration + (Implemented by Rodrigo Mayorga). + - Some little problems reading config files has + fixed (thanks to Olatunji Oluwabukunmi). + - Added new functions to validate malloc(), free() and + strdup(). + - Deny_Check() now check query string. + - Added validation to return value of pipe(). + - Include directory has been moved into src/. + - Memory leaks has been fixed. + - Codes cleanup. + +v0.6.3 (2003/04/07) : + - New variable 'VirtualForceGetDir' in VirtualHost section, + this variable force to show full directory information. + - Some header files has been included (T). + - Bug searching path component in cgi_alias() has been + fixed. Thanks to 'T' for report this problem. + - Code cleanup. + - Persistent connection support has been fixed. + - License updates. + +v0.6.2 (2003/03/24) : + - Post_Method() security fixes: Request with post buffer + more long than MAX_REQUEST_BODY would cause the server to + fail, denying service to other (Matthew Murphy). + - Post_Method() security fixes: Request without + 'Content-Type' header make crash monkey (Eduardo). + - Added http_status.h file (JCI). + +v0.6.1 (2002/12/31) : + - ISO 8859-15 character table has been added to chars.c. + - Header files has been added for every module. + - New variable in monkey.conf 'HideVersion', allow hide + the version of the WebServer to clients. + - Information about Server Protocol has been added. + - Fixed a little problem when are checked access + permission of files , 'Forbidden' header now is sent + in all cases, cgi.c and request.c files has been modified. + +v0.6.0 (2002/12/28) : + - Hexa URI request support has been added. + - include/chars.h file has been added. + - New way to control subprocess (process.c). + - Optimized chunked transfer encoding. + +v0.5.2 (2002/12/02) : + - Makefile now work with $CC and $STRIP environment vars. + - If some script fail now server report an 'Internal Server + Error' to client. + - '505 Internal Server Error' header has been fixed. + - AddScript function has been fixed. Now check if path + of binary files is an valid regular file. + - A little problem with extensions of files has been fixed. + - MAX_REQUEST_URI size has been increased. (Glenn Neidermeier) + - Referer header has been added. + - Some little bugs located into add_log_pid() and + remove_log_pid() functions from logfile.c file has been + fixed. + +v0.5.1 (2002/10/29) : + - Chunked transfer coding has been added. + - Removed uninstall option from Makefile . + - Virtualhost configuration has been changed. + - Overflow in User_main has been fixed. + - cgi_send() has been rewritten. + - Post method: some security fixes. + +v0.5.0 (2002/09/22) : + - Persistent connections counter fixed. + - Monkey+PHP document updates. + - Changelog and home page has been translated into english. + - New document HowToWorks.txt has been added. + - New variable ServerName was added to monkey.conf. + - Timeout now works from begin to the end of request. + - Cookie support was added. + - Configure script now checks if pthread lib exist. + - Post_Method() fixes. + +v0.4.2 (2002/09/16) : + - Modificacion en configure script -> src/Makefile. + - Traduccion de monkey+php al Ingles (Davidlhor Bueso). + - Pequeños cambios en request.c y cgi.c . + - Cambios en la verificacion de metodos. + +v0.4.1-1 (2002/09/03) : + - Correcion en falla de seguridad en Set_Page_Default(). + +v0.4.1 (2002/09/03) : + - Modificaciones en configure script. + - No registro de errores en archivo de log corregido. + - Agregado Banana script para controlar monkey. + - Eliminacion de la opcion '-m stop'. + - Correccion en opcion -c sin argumento. + - Denegacion de conexion persistente a clientes HTTP/1.0. + +v0.4.0 (2002/06/15) : + - Correcciones en soporte CGI para VirtualHost. + - Nuevo soporte para conexiones persistentes. + - Nueva variable de configuracion "MaxClients". + - Actualizaciones en script configure. + - Pequena correccion en mimetype.c . + - Implementado soporte basico de multithreading. + - Reestructuracion de variables. + +v0.1.1 (2001/06/05) : + - Nueva variable Indexfile en monkey.conf + - Optimizacion de codigo (redundancias) + +v0.1 (2001/05/30) : + - Nuevo archivo de configuracion monkey.conf + - Implementado Content-Lenght + - Reconocimiento e implementacion de MimeTypes + - Correccion de Get Method + - Negacion a Methods no implementados + - Resstructuracion de directorios raiz + +v0.0.5 (2001/05/17) : + - Primera version diff --git a/src/fluent-bit/lib/monkey/FUZZ.md b/src/fluent-bit/lib/monkey/FUZZ.md new file mode 100644 index 000000000..9074cdfac --- /dev/null +++ b/src/fluent-bit/lib/monkey/FUZZ.md @@ -0,0 +1,33 @@ +# Fuzz Monkey + +## Prepare and Build + +Set the compiler path: + +``` +$ export CC=PATH/TO/honggfuzz/hfuzz_cc/hfuzz-clang +``` + +Build Monkey Fuzz tool with the following options: + +``` +$ cd build/ +$ cmake -DMK_LOCAL=On -DMK_DEBUG=On \ + -DMK_LIB_ONLY=On -DMK_SYSTEM_MALLOC=On \ + -DMK_FUZZ_MODE=On ../ +$ make +``` + +the build process will generate two executables: + +- mk_fuzz_me: to be used with honggfuzz for the Fuzzing process +- mk_check: used to validate a crash/fix + +## Run HonggFuzz with mk-fuzz-me + +Fuzz Monkey using Apache corpus and wordlist: + +``` +$ cd /path/to/honggfuzz/examples/apache-httpd/ +$ honggfuzz -Q --logfile out.log -f corpus_http1 -w ./httpd.wordlist -- /path/to/mk-fuzz-me +``` diff --git a/src/fluent-bit/lib/monkey/INSTALL b/src/fluent-bit/lib/monkey/INSTALL new file mode 100644 index 000000000..391318ed4 --- /dev/null +++ b/src/fluent-bit/lib/monkey/INSTALL @@ -0,0 +1,52 @@ + Monkey HTTP Server - Install + ============================ + + For optimum performance, I recommend that Monkey be compiled with GCC >= + 2.95.3 and be running on a Linux OS with kernel >= 2.6.32 (minimum) and + Kernel >= 3.9 preferred.. + + Like every source program we must run 'configure' script and later + 'make': + + #./configure + # make + + Optionally, you have the option of 'make install', which will copy the main + directory of monkey where it has been specified in the configure script. + + CONFIGURATION + =============== + monkey.conf is generated by ./configure (see above) and saved in conf/monkey.conf. + In this configuration file you can set the default port, and settings such as workers, + timeouts, default user directions, etc. + + Running Monkey + ============== + + bin/monkey + + or + + bin/monkey -D (to run monkey in background mode) + + Optionally, you can specify the directory where the configuration files + are found, this can be done the following way: + + bin/monkey -D -c conf/ + + This argument (conf/) was thought of for those wishing to have Monkey + running for various users, in distinctive Ports and it's own + configuration files. For more information see 'conf/monkey.conf'. + + For more info try -h option. + + Testing Monkey + ============== + +To see that Monkey is running, make a request from a browser, like lynx +or netscape: + + # lynx 127.0.0.1:2001 + + Note: In this example the '2001' corresponds to the connection port + assigned on 'conf/monkey.conf'. diff --git a/src/fluent-bit/lib/monkey/LICENSE b/src/fluent-bit/lib/monkey/LICENSE new file mode 100644 index 000000000..f433b1a53 --- /dev/null +++ b/src/fluent-bit/lib/monkey/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/src/fluent-bit/lib/monkey/NOTICE b/src/fluent-bit/lib/monkey/NOTICE new file mode 100644 index 000000000..83a93c316 --- /dev/null +++ b/src/fluent-bit/lib/monkey/NOTICE @@ -0,0 +1,12 @@ +Monkey HTTP Server +================== +Copyright 2001-2014 Monkey Software LLC + +This product includes software developed at +Monkey Software LLC (http://monkey.io). + +note: +----- +Starting from May 8th 2014, the source code on this directory +is Licensed under the Apache License v2.0 and Copyrighted to +Monkey Software LLC. diff --git a/src/fluent-bit/lib/monkey/README.md b/src/fluent-bit/lib/monkey/README.md new file mode 100644 index 000000000..26040a45e --- /dev/null +++ b/src/fluent-bit/lib/monkey/README.md @@ -0,0 +1,59 @@ +# Monkey Server + +[Monkey](http://monkey-project.com) is a fast and lightweight Web Server for Linux. It has been designed to be very scalable with low memory and CPU consumption, the perfect solution for Embedded Linux and high end production environments. + +Besides the common features as HTTP server, it expose a flexible C API which aims to behave as a fully HTTP development framework, so it can be extended as desired through the plugins interface. + +For more details please refer to the [official documentation](http://monkey-project.com/documentation/). + +## Features + +- HTTP/1.1 Compliant +- Hybrid Networking Model: Asynchronous mode + fixed Threads +- Indented configuration style +- Versatile plugin subsystem / API +- x86, x86_64 & ARM compatible +- More features: + - SSL + - IPv6 + - Basic Auth + - Log writer + - Security + - Directory Listing + - CGI + - FastCGI + - Much more! +- Embeddable as a shared library + +## Requirements + +When building Monkey it needs: + +- CMake >= 2.8 +- Glibc >= 2.5 +- GNU C Compiler >= 3.2 + +Monkey requires the following components on runtime: + +- Linux Kernel >= 2.6.32 +- Pthreads support + +## Writing Scalable Web Services + +If you are interested into use [Monkey](http://monkey-project.com) as a base platform build scalable web services, we recommend you check our [Duda I/O](http://duda.io) project made for that purpose. + +## Join us! + +Monkey is an open organization so we want to hear about you, we continue growing and you can be part of it!, you can reach us at: + +- Mailing list: http://lists.monkey-project.com +- IRC: irc.freenode.net #monkey +- Twitter: http://www.twitter.com/monkeywebserver +- Linkedin: http://www.linkedin.com/groups/Monkey-HTTP-Daemon-3211216 +- Freecode: http://freecode.com/projects/monkey (R.I.P) + +If you want to get involved, please also refer to our [Contributing](https://github.com/monkey/monkey/blob/master/CONTRIBUTING.md) guidelines. + +## Author + +Eduardo Silva diff --git a/src/fluent-bit/lib/monkey/api/CMakeLists.txt b/src/fluent-bit/lib/monkey/api/CMakeLists.txt new file mode 100644 index 000000000..8833735ef --- /dev/null +++ b/src/fluent-bit/lib/monkey/api/CMakeLists.txt @@ -0,0 +1,18 @@ +set(src + test.c) + +add_executable(api_test ${src}) + +set(src + errors.c + ) + +add_executable(api_error ${src}) + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + target_link_libraries(api_test monkey-core-static mk_core ws2_32) + target_link_libraries(api_error monkey-core-static mk_core ws2_32) +else() + target_link_libraries(api_test monkey-core-static) + target_link_libraries(api_error monkey-core-static) +endif() diff --git a/src/fluent-bit/lib/monkey/api/errors.c b/src/fluent-bit/lib/monkey/api/errors.c new file mode 100644 index 000000000..44e9c35fa --- /dev/null +++ b/src/fluent-bit/lib/monkey/api/errors.c @@ -0,0 +1,103 @@ +#include +#include + +#include +#include +#include + +#define API_ADDR "127.0.0.1" +#define API_PORT "2020" + +/* Main context set as global so the signal handler can use it */ +mk_ctx_t *ctx; + +static void signal_handler(int signal) +{ + write(STDERR_FILENO, "[engine] caught signal\n", 23); + + switch (signal) { + case SIGTERM: + case SIGINT: + mk_stop(ctx); + mk_destroy(ctx); + _exit(EXIT_SUCCESS); + default: + break; + } +} + +static void signal_init() +{ + signal(SIGINT, &signal_handler); + signal(SIGTERM, &signal_handler); +} + +void cb_ok_200(mk_request_t *request, void *data) +{ + int i = 0; + (void) data; + char tmp[32]; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + for (i = 0; i < 100; i++) { + int len; + + len = snprintf(tmp, sizeof(tmp) - 1, "test %i\n", i); + mk_http_send(request, tmp, len, NULL); + } + mk_http_done(request); +} + +void cb_error_404(mk_request_t *request, void *data) +{ + int i = 0; + (void) data; + char tmp[32]; + + mk_http_status(request, 404); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + for (i = 0; i < 100; i++) { + int len; + + len = snprintf(tmp, sizeof(tmp) - 1, "test %i\n", i); + mk_http_send(request, tmp, len, NULL); + } + mk_http_done(request); +} + +int main() +{ + int vid; + + signal_init(); + + ctx = mk_create(); + if (!ctx) { + return -1; + } + + mk_config_set(ctx, + "Listen", API_PORT, + NULL); + + vid = mk_vhost_create(ctx, NULL); + mk_vhost_set(ctx, vid, + "Name", "mk_lib", + NULL); + + mk_vhost_handler(ctx, vid, "/200", cb_ok_200, NULL); + mk_vhost_handler(ctx, vid, "/404", cb_error_404, NULL); + mk_info("Service: http://%s:%s/404", API_ADDR, API_PORT); + mk_start(ctx); + + sleep(3600); + + mk_stop(ctx); + mk_destroy(ctx); + + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/api/test.c b/src/fluent-bit/lib/monkey/api/test.c new file mode 100644 index 000000000..ffb96f135 --- /dev/null +++ b/src/fluent-bit/lib/monkey/api/test.c @@ -0,0 +1,186 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +#include +#include + +#include +#include +#include + +#define API_ADDR "127.0.0.1" +#define API_PORT "8080" + +/* Main context set as global so the signal handler can use it */ +mk_ctx_t *ctx; + +void cb_worker(void *data) +{ + mk_info("[api test] test worker callback; data=%p", data); +} + + +void cb_sp_test_task_detail(mk_request_t *request, void *data) +{ + (void) data; + + mk_http_status(request, 200); + mk_http_send(request, "CB_SP_TEST_TASK_DETAIL", strlen("CB_SP_TEST_TASK_DETAIL"), NULL); + mk_http_done(request); +} + +void cb_sp_test_task_main(mk_request_t *request, void *data) +{ + (void) data; + + mk_http_status(request, 200); + mk_http_send(request, "CB_SP_TEST_TASK_MAIN", strlen("CB_SP_TEST_TASK_MAIN"), NULL); + mk_http_done(request); +} + +void cb_main(mk_request_t *request, void *data) +{ + int i; + (void) data; + + mk_http_status(request, 200); + + for (i = 0; i < 20; i++) { + mk_http_send(request, "first", 5, NULL); + mk_http_send(request, "second", 6, NULL); + mk_http_send(request, "third", 5, NULL); + } + mk_http_done(request); +} + +void cb_test_chunks(mk_request_t *request, void *data) +{ + int i = 0; + int len; + char tmp[32]; + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + for (i = 0; i < 4; i++) { + len = snprintf(tmp, sizeof(tmp) -1, "test-chunk %6i\n ", i); + mk_http_send(request, tmp, len, NULL); + } + mk_http_done(request); +} + +void cb_test_big_chunk(mk_request_t *request, void *data) +{ + size_t chunk_size = 1024000000; + char *chunk; + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + chunk = calloc(1, chunk_size); + mk_http_send(request, chunk, chunk_size, NULL); + free(chunk); + mk_http_done(request); +} + + +static void signal_handler(int signal) +{ + write(STDERR_FILENO, "[engine] caught signal\n", 23); + + switch (signal) { + case SIGTERM: + case SIGINT: + mk_stop(ctx); + mk_destroy(ctx); + _exit(EXIT_SUCCESS); + default: + break; + } +} + +static void signal_init() +{ + signal(SIGINT, &signal_handler); + signal(SIGTERM, &signal_handler); +} + +static void cb_queue_message(mk_mq_t *queue, void *data, size_t size, void *ctx) +{ + size_t i; + char *buf; + (void) ctx; + (void) queue; + + printf("=== cb queue message === \n"); + printf(" => %zu bytes\n", size); + printf(" => "); + + buf = data; + for (i = 0; i < size; i++) { + printf("%c", buf[i]); + } + printf("\n\n"); +} + + +int main() +{ + int i = 0; + int len; + int vid; + int qid; + char msg[800000]; + + signal_init(); + + ctx = mk_create(); + if (!ctx) { + return -1; + } + + /* Create a message queue and a callback for each message */ + qid = mk_mq_create(ctx, "/data", cb_queue_message, NULL); + + mk_config_set(ctx, + "Listen", API_PORT, + //"Timeout", "1", + NULL); + + vid = mk_vhost_create(ctx, NULL); + mk_vhost_set(ctx, vid, + "Name", "monotop", + NULL); + + mk_vhost_handler(ctx, vid, "/api/v1/stream_processor/task/[A-Za-z_][0-9A-Za-z_\\-]*", + cb_sp_test_task_detail, NULL); + + mk_vhost_handler(ctx, vid, "/api/v1/stream_processor/task", + cb_sp_test_task_main, NULL); + + mk_vhost_handler(ctx, vid, "/test_chunks", cb_test_chunks, NULL); + mk_vhost_handler(ctx, vid, "/test_big_chunk", cb_test_big_chunk, NULL); + mk_vhost_handler(ctx, vid, "/", cb_main, NULL); + + + mk_worker_callback(ctx, + cb_worker, + ctx); + + mk_info("Service: http://%s:%s/test_chunks", API_ADDR, API_PORT); + mk_start(ctx); + + for (i = 0; i < 5; i++) { + len = snprintf(msg, sizeof(msg) - 1, "[...] message ID: %i\n", i); + mk_mq_send(ctx, qid, &msg, len); + } + + sleep(3600); + + mk_stop(ctx); + mk_destroy(ctx); + + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/cmake/FindLibkqueue.cmake b/src/fluent-bit/lib/monkey/cmake/FindLibkqueue.cmake new file mode 100644 index 000000000..131fc98a3 --- /dev/null +++ b/src/fluent-bit/lib/monkey/cmake/FindLibkqueue.cmake @@ -0,0 +1,18 @@ +find_path(LIBKQUEUE_INCLUDE_DIR sys/event.h + PATHS + "/usr/include" + "/usr/local/include" + PATH_SUFFIXES "kqueue" +) + +find_library(LIBKQUEUE_LIBRARY + NAMES libkqueue.so + PATHS /usr/lib /usr/local/lib +) + +if (LIBKQUEUE_INCLUDE_DIR AND LIBKQUEUE_LIBRARY) + set(LIBKQUEUE_FOUND TRUE) + set(LIBKQUEUE_LIBRARIES ${LIBKQUEUE_LIBRARY}) +else (LIBKQUEUE_INCLUDE_DIR AND LIBKQUEUE_LIBRARY) + set(LIBKQUEUE_FOUND FALSE) +endif (LIBKQUEUE_INCLUDE_DIR AND LIBKQUEUE_LIBRARY) diff --git a/src/fluent-bit/lib/monkey/conf/CMakeLists.txt b/src/fluent-bit/lib/monkey/conf/CMakeLists.txt new file mode 100644 index 000000000..1a5b9e6ea --- /dev/null +++ b/src/fluent-bit/lib/monkey/conf/CMakeLists.txt @@ -0,0 +1,17 @@ +# Generate conf/monkey.conf +configure_file( + "${PROJECT_SOURCE_DIR}/conf/monkey.conf.in" + "${PROJECT_BINARY_DIR}/conf/monkey.conf" + ) + +# Generate (copy) conf/monkey.mime +configure_file( + "${PROJECT_SOURCE_DIR}/conf/monkey.mime.in" + "${PROJECT_BINARY_DIR}/conf/monkey.mime" + ) + +# Generate conf/sites/default +configure_file( + "${PROJECT_SOURCE_DIR}/conf/sites/default.in" + "${PROJECT_BINARY_DIR}/conf/sites/default" + ) diff --git a/src/fluent-bit/lib/monkey/conf/monkey.conf.in b/src/fluent-bit/lib/monkey/conf/monkey.conf.in new file mode 100644 index 000000000..32e626320 --- /dev/null +++ b/src/fluent-bit/lib/monkey/conf/monkey.conf.in @@ -0,0 +1,166 @@ +# Monkey HTTP Server - Configuration +# ================================== +# These are the main variables and their descriptions, defined in respect +# to the configuration of the different types of directives. + +[SERVER] + # Listen: + # ------- + # The Listen directive maps the port and optionally restricts the + # network interface from where Monkey will be listens for incoming + # connections. Multiple Listen directives are allowed. + # + # The Listen directive requires a port number, preceded by an + # optional IPv4 or IPv6 address separated by a colon (:). + # IPv6 addresses must be enclosed in brackets ([]), e.g: + # + # Listen 127.0.0.1:2001 + # Listen [::1]:2001 + + Listen @MK_CONF_LISTEN@ + + # Workers: + # -------- + # Monkey launches threads to attend clients; each worker thread is capable + # of attending more than one client request at one time. The amount of + # clients that can be handled by each thread is calculated using the + # number of file descriptors allowed by the system. If this variable + # is set to 0 monkey will launch one thread per processor. + + Workers @MK_CONF_WORKERS@ + + # Timeout: + # -------- + # The largest span of time, expressed in seconds, during which you should + # wait to receive the information or waiting time for the remote host to + # accept an answer. (Timeout > 0) + + Timeout @MK_CONF_TIMEOUT@ + + # PidFile: + # -------- + # File where the server guards the process number when starting. + + PidFile @MK_PATH_PIDPATH@/@MK_PIDFILE@ + + # UserDir: + # -------- + # Directory name for users home (~/user). + + UserDir @MK_CONF_USERDIR@ + + # Indexfile: + # ---------- + # Number of the initial file of aperture when calling a directory. + + Indexfile @MK_CONF_INDEXFILE@ + + # HideVersion: + # ------------ + # For security reasons, sometimes people want to hide the version of his + # own webserver to clients (values on/off). + + HideVersion @MK_CONF_HIDEVERSION@ + + # Resume: + # ------- + # Allow clients to request files by ranges (values on/off). + + Resume @MK_CONF_RESUME@ + + # User: + # ----- + # If you want the webserver to run as a process of a defined user, you can + # define it in this variable. For the change of user to work, it's necessary + # to execute Monkey with root privileges. If it's started by a user that + # that doesn't have root privileges, this variable will be omitted. + + User @MK_CONF_USER@ + + # ----------------- + # ADVANCED CONFIG + # ----------------- + # Just change the next variables if you know what are you doing. + + # KeepAlive: + # ---------- + # Allow persistent connections. (on/off) + + KeepAlive @MK_CONF_KA@ + + # KeepAliveTimeout + # ---------------- + # Number of seconds to wait for the next request in a persistent + # connection (value > 0). + + KeepAliveTimeout @MK_CONF_KA_TIMEOUT@ + + # MaxKeepAliveRequest: + # -------------------- + # Maximum number of requests per connection. (value > 0) + + MaxKeepAliveRequest @MK_CONF_KA_MAXREQ@ + + # MaxRequestSize: + # --------------- + # When a request arrives, Monkey allocs a 'chunk' of memory space + # to receive the incoming data. As many times the incoming data + # size is undeterminated, Monkey increases the buffer as required. This + # variable defines the maximum size that the buffer can grow in terms + # of KB. Example: defining 'MaxRequestSize 32' means 32 Kilobytes. + # The value defined must be greater than zero. Default value defined + # is 32. + + MaxRequestSize @MK_CONF_REQ_SIZE@ + + # SymLink: + # -------- + # Allow request to symbolic link files. + + SymLink @MK_CONF_SYMLINK@ + + # DefaultMimeType: + # ---------------- + # If a static content is requested and it does not contain a known extension, + # Monkey will send the mime type specified on this directive. + + DefaultMimeType @MK_CONF_DEFAULT_MIME@ + + # FDT: + # ---- + # The File Descriptor Table (FDT) it's an internal mechanism to share open + # file descriptors under specific threads and virtual host context. When + # enabled, it helps to reduce the number of opened file descriptors for the + # same resource and the number of required system calls to open and close + # files. + # + # The overhead in memory of this feature is around ~5KB per worker. + + FDT @MK_CONF_FDT@ + + # OverCapacity: + # ------------- + # When the server is over capacity at networking level, is required to + # prepare a contingency plan. The OverCapacity feature allows to define + # the behavior under this situation. Monkey defines three options: + # + # Drop : just drop any new incoming connection. + # Resist : try to serve all request, even some of them may delay. + # TooBusy: report a 503 Service Unavailable HTTP status. + # + # The default behavior is 'Resist'. + + OverCapacity @MK_CONF_OVERCAPACITY@ + + # FDLimit: + # -------- + # Defines the maximum number of file descriptors that the server + # can use, it can be translated to the maximum number of connections. + # If the value is not set, Monkey will use the soft limit imposed to + # the process (ulimit -n). + # + # If the variable is set, Monkey will try to increase or decrease + # the limit under it restrictions. For values higher that Hard Limit + # Monkey needs to be started by root user. + # + # FDLimit 4096 diff --git a/src/fluent-bit/lib/monkey/conf/monkey.mime.in b/src/fluent-bit/lib/monkey/conf/monkey.mime.in new file mode 100644 index 000000000..bf474c504 --- /dev/null +++ b/src/fluent-bit/lib/monkey/conf/monkey.mime.in @@ -0,0 +1,145 @@ +[MIMETYPES] + html text/html + jpg image/jpeg + png image/png + js application/x-javascript + css text/css + xml text/xml + gif image/gif + flv video/x-flv + jpe image/jpeg + + deb application/x-debian-package + jpeg image/jpeg + htm text/html + bmp image/bmp + ief image/ief + tiff image/tiff + tif image/tiff + wbmp image/vnd.wap.wbmp + ras image/x-cmu-raster + ico image/x-icon + pnm image/x-portable-anymap + pbm image/x-portable-bitmap + pgm image/x-portable-graymap + ppm image/x-portable-pixmap + rgb image/x-rgb + xbm image/x-xbitmap + xpm image/x-xpixmap + xwd image/x-xwindowdump + svg image/svg+xml + svgz image/svg+xml + + json application/json + ez application/andrew-inset + hqx application/mac-binhex40 + cpt application/mac-compactpro + doc application/msword + bin application/octet-stream + dms application/octet-stream + lha application/octet-stream + lhz application/octet-stream + exe application/octet-stream + oda application/oda + pdf application/pdf + api application/postscript + eps application/postscript + ps application/postscript + smi application/smil + smil application/smil + mif application/vnd.mif + xls application/vnd.ms-excel + ppt application/vnd.ms-powerpoint + vbxml application/vnd.wap.wbxml + wmlc application/vnd.wap.wmlc + wmlsc application/vnd.wap.wmlscriptc + bcpio application/x-bcpio + vcd application/x-cdlink + pgn application/x-chess-pgn + cpio application/x-cpio + csh application/x-csh + dcr application/x-director + dir application/x-director + dxr application/x-director + dvi application/x-dvi + spl application/x-futuresplash + gtar application/x-gtar + gz application/x-gzip + hdf application/x-hdf + skp application/x-koan + skd application/x-koan + skt application/x-koan + skm application/x-koan + latex application/x-latex + nc application/x-netcdf + cdf application/x-netcdf + sh application/x-sh + shar application/x-shar + swf application/x-shockwave-flash + sit application/x-stuffit + sv4cpio application/x-sv4cpio + sv4crc application/x-sv4crc + tar application/x-tar + tcl application/x-tcl + tex application/x-tex + texinfo application/x-texinfo + texi application/x-texinfo + t application/x-troff + tr application/x-troff + roff application/x-troff + man application/x-troff-man + me application/x-troff-me + ms application/x-troff-ms + untar application/x-ustar + src application/x-wais-source + zip application/zip + + au audio/basic + snd audio/basic + mid audio/midi + midi audio/midi + kar audio/midi + mpga audio/mpeg + mp2 audio/mpeg + mp3 audio/mpeg + aif audio/x-aiff + aiff audio/x-aiff + aifc audio/x-aiff + ram audio/x-pn-realaudio + rm audio/x-pn-realaudio + rpm audio/x-pn-realaudio-plugin + ra audio/x-realaudio + wav audio/x-wav + + pdb chemical/x-pdb + xyz chemical/x-pdb + + igs model/iges + iges model/iges + msh model/mesh + mesh model/mesh + silo model/mesh + wrl model/vrml + vmrl model/vrml + + asc text/plain + txt text/plain + rtx text/richtext + rtf text/rtf + sgml text/sgml + sgm text/sgml + tsv text/tab-separated-values + wml text/vnd.wap.wml + wmls text/vnd.wap.wmlscript + etx text/x-setext + xsl text/xml + + mpeg video/mpeg + mpg video/mpeg + mpe video/mpeg + qt video/quicktime + mov video/quicktime + avi video/x-msvideo + movie video/x-sgi-movie + + ice x-conference/x-cooltalk diff --git a/src/fluent-bit/lib/monkey/conf/plugins.load.in b/src/fluent-bit/lib/monkey/conf/plugins.load.in new file mode 100644 index 000000000..54019a010 --- /dev/null +++ b/src/fluent-bit/lib/monkey/conf/plugins.load.in @@ -0,0 +1,10 @@ +# Monkey Plugins Loader +# ===================== +# Monkey plugins are extended functionalities for Monkey, +# the main directive to load a plugin is LoadPlugin plus +# the absolute path for the desired plugin. +# +# Please check the following list of available plugins: + +[PLUGINS] +@MK_LOAD_PLUGINS@ diff --git a/src/fluent-bit/lib/monkey/conf/sites/default.in b/src/fluent-bit/lib/monkey/conf/sites/default.in new file mode 100644 index 000000000..0d259ae9e --- /dev/null +++ b/src/fluent-bit/lib/monkey/conf/sites/default.in @@ -0,0 +1,57 @@ +# Default Host - Configuration +# ============================ +# Here the variable principals of the program are defined in respect +# to the configuration of the different types of directives. + +[HOST] + # ServerName: + # ----------- + # Allow you to set a host and domain name (e.g monkey.linuxchile.cl). If + # you are working in a local network just set your IP address or if you + # are working like localhost set your loopback address (127.0.0.1). + + ServerName @MK_VH_SERVERNAME@ + + # DocumentRoot: + # ------------- + # This variable corresponds to the location of the main server directory + # of the web pages, where the files of your site are located. + # + # Example: + # DocumentRoot /home/krypton/htdocs + + DocumentRoot @MK_PATH_WWW@ + + # Redirect: + # --------- + # Under specific conditions, you may want the server performs a HTTP + # redirect when this Virtual Host is reach. If that is the case, append + # to the Redirect key the value of the address where to redirect the + # HTTP client. + # + # Redirect http://monkey-project.com + +[LOGGER] + # AccessLog: + # ---------- + # Registration file of correct request. + + AccessLog @MK_PATH_LOG@/access.log + + # ErrorLog: + # --------- + # Registration file of incorrect request. + + ErrorLog @MK_PATH_LOG@/error.log + +[ERROR_PAGES] + 404 404.html + +[HANDLERS] + # FastCGI + # ======= + # Match /.*\.php fastcgi + + # CGI + # === + # Match /cgi-bin/.*\.cgi cgi diff --git a/src/fluent-bit/lib/monkey/configure b/src/fluent-bit/lib/monkey/configure new file mode 100755 index 000000000..49c801c17 --- /dev/null +++ b/src/fluent-bit/lib/monkey/configure @@ -0,0 +1,220 @@ +#!/bin/bash +# +# Monkey HTTP Server +# ================== +# Copyright 2001-2015 Monkey Software LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if [ "x$(uname)" = "xLinux" ]; then + BOLD="\033[1m" + END_COLOR="\033[0m" + GREEN="\033[0;32m" + YELLOW="\033[1;33m" + RED="\033[0;31m" + BLUE="\033[0;34m" + ECHO_OPTS="-en" + ECHO_LF="\n" +else + ECHO_OPTS="" + ECHO_LF="" +fi + +#---------------------------# +# Starting configure +#---------------------------# +cmake_opts="" + +for arg in $*; do + case "$arg" in + -*=*) + optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) + optarg= ;; + esac + case "$arg" in + # Path options + --prefix*) + cmake_opts+="-DCMAKE_INSTALL_PREFIX='$optarg' " + ;; + --sbindir*) + cmake_opts+="-DCMAKE_INSTALL_SBINDIR='$optarg' " + ;; + --mandir*) + cmake_opts+="-DCMAKE_INSTALL_MANDIR='$optarg' " + ;; + --sysconfdir*) + cmake_opts+="-DINSTALL_SYSCONFDIR='$optarg' " + ;; + --webroot*) + cmake_opts+="-DINSTALL_WEBROOTDIR='$optarg' " + ;; + --libdir*) + cmake_opts+="-DCMAKE_INSTALL_LIBDIR='$optarg' " + ;; + --includedir*) + cmake_opts+="-DINSTALL_INCLUDEDIR='$optarg' " + ;; + --logdir*) + cmake_opts+="-DINSTALL_LOGDIR='$optarg' " + ;; + --pidpath*) + cmake_opts+="-DPID_PATH='$optarg' " + ;; + --pidfile*) + cmake_opts+="-DPID_FILE='$optarg' " + ;; + # Build Options + --local*) + cmake_opts+="-DBUILD_LOCAL=1 " + ;; + --debug*) + cmake_opts+="-DWITH_DEBUG=1 " + ;; + --trace*) + cmake_opts+="-DWITH_TRACE=1 " + ;; + --no-backtrace*) + cmake_opts+="-DWITH_BACKTRACE=0 " + ;; + --linux-trace*) + cmake_opts+="-DWITH_LINUX_TRACE=1 " + ;; + --pthread-tls*) + cmake_opts+="-DWITH_PTHREAD_TLS=1 " + ;; + --malloc-libc*) + cmake_opts+="-DWITH_SYSTEM_MALLOC=1 " + ;; + --uclib-mode*) + cmake_opts+="-DWITH_UCLIB=1 " + ;; + --musl-mode*) + cmake_opts+="-DWITH_MUSL=1 " + ;; + --enable-plugins*) + cmake_opts+="-DWITH_PLUGINS='$optarg' " + ;; + --disable-plugins*) + cmake_opts+="-DWITHOUT_PLUGINS='$optarg' " + ;; + --static-plugins*) + cmake_opts+="-DSTATIC_PLUGINS='$optarg' " + ;; + --only-accept) + cmake_opts+="-DWITH_ACCEPT=1 -DWITH_ACCEPT4=0 " + ;; + --only-accept4) + cmake_opts+="-DWITH_ACCEPT=0 -DWITH_ACCEPT4=1 " + ;; + --linux-kqueue*) + cmake_opts+="-DWITH_LINUX_KQUEUE=1 " + ;; + --default-port*) + cmake_opts+="-DDEFAULT_PORT='$optarg' " + ;; + --default-user*) + cmake_opts+="-DDEFAULT_USER='$optarg' " + ;; + --systemddir*) + cmake_opts+="-DSYSTEMD_DIR='$optarg' " + ;; + --no-binary*) + cmake_opts+="-DWITHOUT_BIN=1 " + ;; + --static-lib-mode*) + cmake_opts+="-DWITH_STATIC_LIB_MODE=1 " + ;; + --skip-config*) + cmake_opts+="-DWITHOUT_CONF=1 " + ;; + --mbedtls-shared*) + cmake_opts+="-DWITH_MBEDTLS_SHARED=1 " + ;; + --version*) + echo -e $bldgrn"Monkey HTTP Server v$VERSION" $txtrst + echo "Copyright 2001-2015, Eduardo Silva " + echo "http://monkey-project.com" + echo + exit 1 + ;; + *) + echo "Usage: ./configure [OPTION]... [VAR=VALUE]..." + echo + echo -e $bldwht"Optional Commands:" $txtrst + echo " --help Display this help and exit" + echo " --version Display version information and exit" + echo + echo -e $bldwht"Build options:" $txtrst + echo " --local Build locally, don't install (dev mode)" + echo " --debug Compile Monkey with debugging symbols" + echo " --trace Enable trace messages (don't use in production)" + echo " --no-backtrace Disable backtrace feature" + echo " --linux-trace Enable Linux Trace Toolkit" + echo " --musl-mode Enable musl compatibility mode" + echo " --uclib-mode Enable uClib compatibility mode" + echo " --malloc-libc Use system default memory allocator (default is jemalloc)" + echo " --pthread-tls Use Posix thread keys instead of compiler TLS" + echo " --no-binary Do not build binary" + echo " --static-lib-mode Build static library mode" + echo " --skip-config Do not include configuration files" + echo " --mbedtls-shared Use system mbedtls shared lib instead of the static one" + echo + echo -e $bldwht"Installation Directories:" $txtrst + echo " --prefix=PREFIX Root prefix directory" + echo " --sbindir=BINDIR Binary files (executables)" + echo " --libdir=LIBDIR Libraries" + echo " --includedir=INCDIR Header install path" + echo " --sysconfdir=SYSCONFDIR Configuration files" + echo " --webroot=WEB_ROOT Path to default web site files" + echo " --mandir=MANDIR Manpages - documentation" + echo " --logdir=LOGDIR Log files" + echo " --pidfile=PIDFILE Path to file to store PID" + echo " --systemddir[=DIR] Systemd directory path" + echo " --enable-plugins=a,b Enable the listed plugins" + echo " --disable-plugins=a,b Disable the listed plugins" + echo " --static-plugins=a,b Build plugins in static mode" + echo " --only-accept Use only accept(2)" + echo " --only-accept4 Use only accept4(2) (default and preferred)" + echo + echo -e $bldwht"Override Server Configuration:" $txtrst + echo " --default-port=PORT Override default TCP port (default: 2001)" + echo " --default-user=USER Override default web user (default: www-data)" + echo + exit 1 + ;; + esac +done + +echo $ECHO_OPTS $RED"********************************************"$ECHO_LF +echo $ECHO_OPTS $RED"*"$GREEN$BOLD" Monkey HTTP Server "$RED"*"$ECHO_LF +echo $ECHO_OPTS $RED"*"$YELLOW" monkey-project.com "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$BLUE" ---------------------------------------- "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" Monkey is the next generation "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" Web Server for Linux and Unix variants "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" Feel free to reach us at: "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" irc.freenode.net #monkey "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" Thanks for using Monkey!!! "$RED"*"$ECHO_LF +echo $ECHO_OPTS "*"$YELLOW" "$RED"*"$ECHO_LF +echo $ECHO_OPTS "********************************************"$END_COLOR$ECHO_LF +echo $ECHO_OPTS "Build: $(uname)"$ECHO_LF + +cd build/ +rm -rf CMakeCache.txt +cmake $cmake_opts ../ + +exit 0 diff --git a/src/fluent-bit/lib/monkey/debian.sh b/src/fluent-bit/lib/monkey/debian.sh new file mode 100755 index 000000000..69d12674a --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +fakeroot debian/rules clean +fakeroot debian/rules build +fakeroot debian/rules binary + diff --git a/src/fluent-bit/lib/monkey/debian/changelog b/src/fluent-bit/lib/monkey/debian/changelog new file mode 100644 index 000000000..9ea0858e0 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/changelog @@ -0,0 +1,89 @@ +monkey (1.6.0-1) stable; urgency=low + + * Work in process for v1.6.0 + + -- Eduardo Silva Fri, 18 Jul 2014 09:00:00 -0300 + +monkey (1.5.2-1) stable; urgency=low + + * Update Monkey release to v1.5.2 + + -- Eduardo Silva Fri, 18 Jul 2014 09:00:00 -0300 + +monkey (1.5.1-1) stable; urgency=low + + * Fix configure script parameters + + -- Eduardo Silva Thu, 29 May 2014 09:00:00 -0300 + +monkey (1.5.0-1) stable; urgency=low + + * Update Monkey release to v1.5.0 + + -- Eduardo Silva Tue, 29 Apr 2014 09:00:00 -0300 + +monkey (1.4.0-1) stable; urgency=low + + * Update Monkey release to v1.4.0 + + -- Eduardo Silva Mon, 03 Feb 2013 09:00:00 -0300 + +monkey (1.3.0-1) stable; urgency=low + + * Update Monkey release to v1.3.0 + + -- Eduardo Silva Thu, 15 Oct 2013 09:00:00 -0300 + +monkey (1.2.0-1) stable; urgency=low + + * Update Monkey release to v1.2.0 + + -- Eduardo Silva Mon, 29 Apr 2013 10:00:00 -0300 + +monkey (1.1.1-1) stable; urgency=low + + * Update Monkey release to v1.1.1 + + -- Eduardo Silva Sat, 18 Aug 2012 10:00:00 -0300 + +monkey (1.1.0-2) stable; urgency=low + + * Add missing cgi plugin + + -- Eduardo Silva Fri, 17 Aug 2012 12:00:00 -0300 + +monkey (1.1.0-1) stable; urgency=low + + * Update Monkey release to v1.1.0 + + -- Eduardo Silva Fri, 17 Aug 2012 10:00:00 -0300 + +monkey (0.32.0-1) unstable; urgency=low + + * Update Monkey release to v0.32.0 + + -- Eduardo Silva Fri, 09 Feb 2012 12:00:00 -0300 + +monkey (0.31.0-1) unstable; urgency=low + + * Update Monkey release to v0.31.0 + + -- Eduardo Silva Fri, 13 Jan 2012 12:00:00 -0300 + +monkey (0.21.0-1) unstable; urgency=low + + * Update Monkey release to v0.21.0 + + -- Eduardo Silva Thu, 28 Oct 2011 12:00:00 -0300 + +monkey (0.20.4-1) unstable; urgency=low + + * Add new monkey-dev package + + -- Eduardo Silva Thu, 12 Oct 2011 12:00:00 -0300 + +monkey (0.20.3-1) unstable; urgency=low + + * Initial release + + -- Eduardo Silva Mon, 10 Oct 2011 22:33:20 -0300 diff --git a/src/fluent-bit/lib/monkey/debian/compat b/src/fluent-bit/lib/monkey/debian/compat new file mode 100644 index 000000000..7f8f011eb --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/compat @@ -0,0 +1 @@ +7 diff --git a/src/fluent-bit/lib/monkey/debian/control b/src/fluent-bit/lib/monkey/debian/control new file mode 100644 index 000000000..54c2e4e35 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/control @@ -0,0 +1,38 @@ +Source: monkey +Section: httpd +Priority: optional +Maintainer: Eduardo Silva +Build-Depends: debhelper (>= 7.0.50~), autotools-dev, libpolarssl-dev +Standards-Version: 3.9.1 +Homepage: http://monkey-project.com +Vcs-Git: https://github.com/monkey/monkey.git +Vcs-Browser: https://github.com/monkey/monkey + +Package: monkey +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Fast and lightweight Web Server for Linux. + Monkey HTTP Server has been designed to be very scalable with low memory + and CPU consumption, the perfect solution for embedded environments. It + also provides a flexible API and plugins interface. + +Package: monkey-polarssl +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, monkey +Description: SSL transport layer for Monkey Web Server based in PolarSSL. + This plugin enable Monkey Web Server with SSL encryption through the third + party PolarSSL library. + +Package: monkey-dev +Architecture: any +Depends: ${misc:Depends}, monkey (= ${binary:Version}) +Description: Monkey HTTP Server development files + This package distributes the C headers files required to perform + the development of a Monkey plugin. This package is not related to the + library version of Monkey. + +Package: monkey-doc +Section: doc +Architecture: all +Description: Monkey documentation + Monkey HTTP Server documentation. diff --git a/src/fluent-bit/lib/monkey/debian/copyright b/src/fluent-bit/lib/monkey/debian/copyright new file mode 100644 index 000000000..f17fcf787 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/copyright @@ -0,0 +1,34 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: monkey +Source: http://monkey-project.com + +Files: * +Copyright: 2001-2014 Eduardo Silva + 2010-2011 Jonathan Gonzalez + 2009-2011 DavidLorh Bueso + +License: + +Files: debian/* +Copyright: 2001-2014 Eduardo Silva +License: LGPL-2 + +License: Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + http://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/Apache-2.0". diff --git a/src/fluent-bit/lib/monkey/debian/docs b/src/fluent-bit/lib/monkey/debian/docs new file mode 100644 index 000000000..b43bf86b5 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/docs @@ -0,0 +1 @@ +README.md diff --git a/src/fluent-bit/lib/monkey/debian/monkey-dev.install b/src/fluent-bit/lib/monkey/debian/monkey-dev.install new file mode 100644 index 000000000..9811dd900 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey-dev.install @@ -0,0 +1,37 @@ +# Monkey headers +debian/tmp/usr/include/monkey +debian/tmp/usr/include/monkey/mk_memory.h +debian/tmp/usr/include/monkey/mk_env.h +debian/tmp/usr/include/monkey/mk_limits.h +debian/tmp/usr/include/monkey/mk_epoll.h +debian/tmp/usr/include/monkey/mk_http.h +debian/tmp/usr/include/monkey/mk_api.h +debian/tmp/usr/include/monkey/mk_header.h +debian/tmp/usr/include/monkey/monkey.h +debian/tmp/usr/include/monkey/mk_string.h +debian/tmp/usr/include/monkey/mk_config.h +debian/tmp/usr/include/monkey/mk_clock.h +debian/tmp/usr/include/monkey/mk_request.h +debian/tmp/usr/include/monkey/mk_http_status.h +debian/tmp/usr/include/monkey/mk_macros.h +debian/tmp/usr/include/monkey/mk_cache.h +debian/tmp/usr/include/monkey/mk_scheduler.h +debian/tmp/usr/include/monkey/mk_info.h +debian/tmp/usr/include/monkey/mk_rbtree.h +debian/tmp/usr/include/monkey/mk_method.h +debian/tmp/usr/include/monkey/mk_user.h +debian/tmp/usr/include/monkey/mk_file.h +debian/tmp/usr/include/monkey/mk_signals.h +debian/tmp/usr/include/monkey/mk_iov.h +debian/tmp/usr/include/monkey/mk_server.h +debian/tmp/usr/include/monkey/mk_mimetype.h +debian/tmp/usr/include/monkey/mk_plugin.h +debian/tmp/usr/include/monkey/mk_list.h +debian/tmp/usr/include/monkey/mk_socket.h +debian/tmp/usr/include/monkey/mk_utils.h +debian/tmp/usr/include/monkey/mk_connection.h + +# Library headers +debian/tmp/usr/include/monkey/mk_lib.h +debian/tmp/usr/include/monkey/libmonkey.h + diff --git a/src/fluent-bit/lib/monkey/debian/monkey-doc.docs b/src/fluent-bit/lib/monkey/debian/monkey-doc.docs new file mode 100644 index 000000000..d4f454258 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey-doc.docs @@ -0,0 +1 @@ +#DOCS# diff --git a/src/fluent-bit/lib/monkey/debian/monkey-doc.install b/src/fluent-bit/lib/monkey/debian/monkey-doc.install new file mode 100644 index 000000000..d4f454258 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey-doc.install @@ -0,0 +1 @@ +#DOCS# diff --git a/src/fluent-bit/lib/monkey/debian/monkey-polarssl.install b/src/fluent-bit/lib/monkey/debian/monkey-polarssl.install new file mode 100644 index 000000000..d4beea06c --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey-polarssl.install @@ -0,0 +1,6 @@ +# Plugins setup +debian/tmp/etc/monkey/plugins/polarssl/* + +# Plugins / Libraries +debian/tmp/usr/lib/monkey/monkey-polarssl.so + diff --git a/src/fluent-bit/lib/monkey/debian/monkey.init b/src/fluent-bit/lib/monkey/debian/monkey.init new file mode 100755 index 000000000..1fd662582 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey.init @@ -0,0 +1,101 @@ +#!/bin/sh +# +# start/stop Monkey HTTP Daemon + +### BEGIN INIT INFO +# Provides: monkey +# Required-Start: $remote_fs $network $syslog +# Required-Stop: $remote_fs $network $syslog +# Should-Start: $named +# Should-Stop: $named +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start Monkey HTTP Daemon +# Description: Start Monkey HTTP Daemon +### END INIT INFO + +CONFDIR="/etc/monkey" +BINMONKEY="/usr/sbin/monkey" + +PORT=$(sed -n '/^[ \t]*Port/s/^.* //p' "$CONFDIR/monkey.conf") +PIDFILE=$(sed -n '/^[ \t]*PidFile/s/^.* //p' "$CONFDIR/monkey.conf")."$PORT" + +for arg in $*; do + case "$arg" in + -*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + if ! test -f $PIDFILE ; then + STATUS="no" + else + PIDMONKEY=`cat $PIDFILE` + if ! kill -0 $PIDMONKEY 2>/dev/null; then + STATUS="no" + else + STATUS="yes" + fi + fi + + case "$arg" in + start) + if [ "$STATUS" = "yes" ] ; then + echo "Monkey is running... (PID=$PIDMONKEY)" + exit 1 + fi + if ! test -x $BINMONKEY ; then + echo "Error: I can't run binary file" + exit 1 + else + if $BINMONKEY --daemon 2>/dev/null ; then + echo "Running Monkey -> OK" + exit 0 + fi + fi + ;; + stop) + if [ "$STATUS" = "no" ]; then + echo "Monkey is not running." + exit 0 + fi + kill -9 $PIDMONKEY + rm -rf $PIDFILE > /dev/null + echo "Monkey stopped ($PIDMONKEY)" + exit 0 + ;; + force-reload|restart) + if [ "$STATUS" = "yes" ]; then + if ! kill $PIDMONKEY > /dev/null ; then + killall -9 monkey + else + echo -n "Stopping Monkey... " + fi + else + echo -n "Monkey is not running... " + fi + if ! test -x $BINMONKEY ; then + echo "Error: I can't run binary file" + exit 1 + else + $BINMONKEY --daemon > /dev/null + echo "Restarting -> OK" + exit 0 + fi + ;; + status) + if [ "$STATUS" = "yes" ]; then + echo "Monkey is running... (PID=$PIDMONKEY)" + else + echo "Monkey is not running... " + fi + exit 0 + ;; + *) + echo "Usage : monkey [start|stop|restart|status|help]" + exit 1 + ;; + esac +done +echo "Usage : monkey [start|stop|restart|status|help]" + +exit 0 diff --git a/src/fluent-bit/lib/monkey/debian/monkey.install b/src/fluent-bit/lib/monkey/debian/monkey.install new file mode 100644 index 000000000..558d1c666 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey.install @@ -0,0 +1,51 @@ +# Binaries +debian/tmp/usr/sbin/monkey + +# Configuration +debian/tmp/etc/monkey/monkey.conf +debian/tmp/etc/monkey/plugins.load +debian/tmp/etc/monkey/monkey.mime +debian/tmp/etc/monkey/sites/* + +# WWW Data +debian/tmp/usr/share/monkey/404.html +debian/tmp/usr/share/monkey/index.html +debian/tmp/usr/share/monkey/favicon.ico +debian/tmp/usr/share/monkey/imgs/monkey_logo.png +debian/tmp/usr/share/monkey/imgs/info_pic.jpg +debian/tmp/usr/share/monkey/css/bootstrap.min.css + +# Manpage +debian/tmp/usr/share/man/man1/monkey.1 + +# Auth Plugin +debian/tmp/etc/monkey/plugins/auth/* +debian/tmp/usr/lib/monkey/monkey-auth.so +debian/tmp/usr/sbin/mk_passwd + +# CGI Plugin +debian/tmp/etc/monkey/plugins/cgi/* +debian/tmp/usr/lib/monkey/monkey-cgi.so + +# Cheetah Plugin +debian/tmp/etc/monkey/plugins/cheetah/* +debian/tmp/usr/lib/monkey/monkey-cheetah.so + +# Dirlisting Plugin +debian/tmp/etc/monkey/plugins/dirlisting/* +debian/tmp/usr/lib/monkey/monkey-dirlisting.so + +# FastCGI Plugin +debian/tmp/etc/monkey/plugins/fastcgi/* +debian/tmp/usr/lib/monkey/monkey-fastcgi.so + +# Liana Plugin +debian/tmp/usr/lib/monkey/monkey-liana.so + +# Logger Plugin +debian/tmp/etc/monkey/plugins/logger/* +debian/tmp/usr/lib/monkey/monkey-logger.so + +# Mandril Plugin +debian/tmp/etc/monkey/plugins/mandril/* +debian/tmp/usr/lib/monkey/monkey-mandril.so diff --git a/src/fluent-bit/lib/monkey/debian/monkey.postinst b/src/fluent-bit/lib/monkey/debian/monkey.postinst new file mode 100644 index 000000000..de7fbcde9 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/monkey.postinst @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +if [ "$1" = "configure" ]; then + mkdir -p /var/log/monkey + chown www-data:www-data /var/log/monkey + chmod 0750 /var/log/monkey + touch /var/log/monkey/master.log + chown www-data:www-data /var/log/monkey/master.log +fi + +#DEBHELPER# + +exit 0 diff --git a/src/fluent-bit/lib/monkey/debian/rules b/src/fluent-bit/lib/monkey/debian/rules new file mode 100755 index 000000000..31775da8a --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/rules @@ -0,0 +1,20 @@ +#!/usr/bin/make -f + +%: + dh $@ --with autotools_dev + +override_dh_auto_configure: + dh_auto_configure -- -DCMAKE_INSTALL_PREFIX='/usr' \ + -DCMAKE_INSTALL_SBINDIR='/usr/sbin' \ + -DCMAKE_INSTALL_MANDIR='/usr/share/man' \ + -DINSTALL_SYSCONFDIR='/etc/monkey' \ + -DINSTALL_WEBROOTDIR='/usr/share/monkey' \ + -DINSTALL_LOGDIR='/var/log/monkey' \ + -DINSTALL_INCLUDEDIR='/usr/include/monkey' \ + -DDEFAULT_USER='www-data' \ + -DDEFAULT_PORT='80' \ + -DCMAKE_INSTALL_LIBDIR='/usr/lib/monkey' \ + -DPID_PATH='/var/run/' \ + -DWITH_PLUGIN_TLS=ON \ + -DSTATIC_PLUGINS='tls' \ + -DSYSTEMD_DIR='/lib/systemd/system/' diff --git a/src/fluent-bit/lib/monkey/debian/source/format b/src/fluent-bit/lib/monkey/debian/source/format new file mode 100644 index 000000000..163aaf8d8 --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/src/fluent-bit/lib/monkey/debian/watch b/src/fluent-bit/lib/monkey/debian/watch new file mode 100644 index 000000000..922f0b4df --- /dev/null +++ b/src/fluent-bit/lib/monkey/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://monkey-project.com/releases/([\d].*)/monkey-(.*)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) diff --git a/src/fluent-bit/lib/monkey/deps/deps.txt b/src/fluent-bit/lib/monkey/deps/deps.txt new file mode 100644 index 000000000..9957e6850 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/deps.txt @@ -0,0 +1,3 @@ +1) Jemalloc v3.5.0-git-5f60afa01eb2cf7d44024d162a1ecc6cceedcca1 + + https://github.com/jemalloc/jemalloc diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/CMakeLists.txt b/src/fluent-bit/lib/monkey/deps/flb_libco/CMakeLists.txt new file mode 100644 index 000000000..1f0c55395 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/CMakeLists.txt @@ -0,0 +1,28 @@ +set(src + libco.c + ) + +include(CheckSymbolExists) + +# Check for posix_memalign so that Apple Silicon can be supported +check_symbol_exists(posix_memalign "stdlib.h" HAVE_POSIX_MEMALIGN_IN_STDLIB) + +IF(HAVE_POSIX_MEMALIGN_IN_STDLIB) + # We need HAVE_POSIX_MEMALIGN for the ifdefs to use posix_memalign + # We defined HAVE_POSIX_MEMALIGN_IN_STDLIB in order to avoid including in malloc.h + add_definitions(-DHAVE_POSIX_MEMALIGN_IN_STDLIB -DHAVE_POSIX_MEMALIGN) + MESSAGE("Found posix_memalign in stdlib.h -DHAVE_POSIX_MEMALIGN_IN_STDLIB -DHAVE_POSIX_MEMALIGN") +ENDIF(HAVE_POSIX_MEMALIGN_IN_STDLIB) + +# Check for posix_memalign so that FreeBSD can be supported +check_symbol_exists(posix_memalign "malloc_np.h" HAVE_POSIX_MEMALIGN_IN_PTHREAD_NP) + +IF(HAVE_POSIX_MEMALIGN_IN_PTHREAD_NP) + # We need HAVE_POSIX_MEMALIGN for the ifdefs to use posix_memalign + # We defined DHAVE_POSIX_MEMALIGN_IN_PTHREAD_NP in order to include malloc_np.h + add_definitions(-DHAVE_POSIX_MEMALIGN_IN_PTHREAD_NP -DHAVE_POSIX_MEMALIGN) + MESSAGE("Found posix_memalign in malloc_np.h -DHAVE_POSIX_MEMALIGN_IN_PTHREAD_NP -DHAVE_POSIX_MEMALIGN") +ENDIF(HAVE_POSIX_MEMALIGN_IN_PTHREAD_NP) + +add_definitions(-DLIBCO_MP) +add_library(co STATIC ${src}) diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/README.md b/src/fluent-bit/lib/monkey/deps/flb_libco/README.md new file mode 100644 index 000000000..4d934d740 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/README.md @@ -0,0 +1,14 @@ +# Fork of libco for Fluent Bit + +This repository is a fork of the original library [libco](https://byuu.org/library/libco/) v18 created by Byuu. Compared to the original version it have the following changes: + +- Core + - ARMv8: workaround for [GCC bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90907). + - Added [aarch64.c](aarch64.c) backend file created by [webgeek1234](https://github.com/webgeek1234). + - Fixes on settings.h to get MacOS support. +- API + - co_create() have a third argument to retrieve the real size of the stack created. + +This library is used inside [Fluent Bit](http://github.com/fluent/fluent-bit) project, so this repo aims to keep aligned with latest releases but including our required patches. + +Eduardo Silva diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/aarch64.c b/src/fluent-bit/lib/monkey/deps/flb_libco/aarch64.c new file mode 100644 index 000000000..d01b2ca00 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/aarch64.c @@ -0,0 +1,138 @@ +/* + libco.aarch64 (2017-06-26) + author: webgeek1234 + license: public domain +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" +#include +#include +#include +#include + +#if defined(HAVE_POSIX_MEMALIGN_IN_STDLIB) +/* stdlib is already included */ +#elif defined(HAVE_POSIX_MEMALIGN_IN_PTHREAD_NP) +#include +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +static thread_local uint64_t co_active_buffer[64]; +static thread_local cothread_t co_active_handle; + +asm ( + ".text\n" + ".globl co_switch_aarch64\n" + ".globl _co_switch_aarch64\n" + "co_switch_aarch64:\n" + "_co_switch_aarch64:\n" + " stp x8, x9, [x1]\n" + " stp x10, x11, [x1, #16]\n" + " stp x12, x13, [x1, #32]\n" + " stp x14, x15, [x1, #48]\n" + " str x19, [x1, #72]\n" + " stp x20, x21, [x1, #80]\n" + " stp x22, x23, [x1, #96]\n" + " stp x24, x25, [x1, #112]\n" + " stp x26, x27, [x1, #128]\n" + " stp x28, x29, [x1, #144]\n" + " mov x16, sp\n" + " stp x16, x30, [x1, #160]\n" + + " ldp x8, x9, [x0]\n" + " ldp x10, x11, [x0, #16]\n" + " ldp x12, x13, [x0, #32]\n" + " ldp x14, x15, [x0, #48]\n" + " ldr x19, [x0, #72]\n" + " ldp x20, x21, [x0, #80]\n" + " ldp x22, x23, [x0, #96]\n" + " ldp x24, x25, [x0, #112]\n" + " ldp x26, x27, [x0, #128]\n" + " ldp x28, x29, [x0, #144]\n" + " ldp x16, x17, [x0, #160]\n" + " mov sp, x16\n" + " br x17\n" + ".previous\n" + ); + +/* ASM */ +void co_switch_aarch64(cothread_t handle, cothread_t current); + +static void crash(void) +{ + /* Called only if cothread_t entrypoint returns. */ + assert(0); +} + +cothread_t co_create(unsigned int size, void (*entrypoint)(void), + size_t *out_size) +{ + size = (size + 1023) & ~1023; + cothread_t handle = 0; +#if HAVE_POSIX_MEMALIGN >= 1 + if (posix_memalign(&handle, 1024, size + 512) < 0) + return 0; +#else + handle = memalign(1024, size + 512); +#endif + + if (!handle) + return handle; + + uint64_t *ptr = (uint64_t*)handle; + /* Non-volatiles. */ + ptr[0] = 0; /* x8 */ + ptr[1] = 0; /* x9 */ + ptr[2] = 0; /* x10 */ + ptr[3] = 0; /* x11 */ + ptr[4] = 0; /* x12 */ + ptr[5] = 0; /* x13 */ + ptr[6] = 0; /* x14 */ + ptr[7] = 0; /* x15 */ + ptr[8] = 0; /* padding */ + ptr[9] = 0; /* x19 */ + ptr[10] = 0; /* x20 */ + ptr[11] = 0; /* x21 */ + ptr[12] = 0; /* x22 */ + ptr[13] = 0; /* x23 */ + ptr[14] = 0; /* x24 */ + ptr[15] = 0; /* x25 */ + ptr[16] = 0; /* x26 */ + ptr[17] = 0; /* x27 */ + ptr[18] = 0; /* x28 */ + ptr[20] = (uintptr_t)ptr + size + 512 - 16; /* x30, stack pointer */ + ptr[19] = ptr[20]; /* x29, frame pointer */ + ptr[21] = (uintptr_t)entrypoint; /* PC (link register x31 gets saved here). */ + + *out_size = size + 512; + return handle; +} + +cothread_t co_active(void) +{ + if (!co_active_handle) + co_active_handle = co_active_buffer; + return co_active_handle; +} + +void co_delete(cothread_t handle) +{ + free(handle); +} + +void co_switch(cothread_t handle) +{ + cothread_t co_previous_handle = co_active(); + co_switch_aarch64(co_active_handle = handle, co_previous_handle); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/amd64.c b/src/fluent-bit/lib/monkey/deps/flb_libco/amd64.c new file mode 100644 index 000000000..ae127e80c --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/amd64.c @@ -0,0 +1,163 @@ +/* + libco.amd64 (2016-09-14) + author: byuu + license: public domain +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static thread_local long long co_active_buffer[64]; +static thread_local cothread_t co_active_handle = 0; +static void (*co_swap)(cothread_t, cothread_t) = 0; + +#ifdef LIBCO_MPROTECT + alignas(4096) +#else + text_section +#endif +#ifdef _WIN32 + /* ABI: Win64 */ + static const unsigned char co_swap_function[4096] = { + 0x48, 0x89, 0x22, /* mov [rdx],rsp */ + 0x48, 0x8b, 0x21, /* mov rsp,[rcx] */ + 0x58, /* pop rax */ + 0x48, 0x89, 0x6a, 0x08, /* mov [rdx+ 8],rbp */ + 0x48, 0x89, 0x72, 0x10, /* mov [rdx+16],rsi */ + 0x48, 0x89, 0x7a, 0x18, /* mov [rdx+24],rdi */ + 0x48, 0x89, 0x5a, 0x20, /* mov [rdx+32],rbx */ + 0x4c, 0x89, 0x62, 0x28, /* mov [rdx+40],r12 */ + 0x4c, 0x89, 0x6a, 0x30, /* mov [rdx+48],r13 */ + 0x4c, 0x89, 0x72, 0x38, /* mov [rdx+56],r14 */ + 0x4c, 0x89, 0x7a, 0x40, /* mov [rdx+64],r15 */ + #if !defined(LIBCO_NO_SSE) + 0x0f, 0x29, 0x72, 0x50, /* movaps [rdx+ 80],xmm6 */ + 0x0f, 0x29, 0x7a, 0x60, /* movaps [rdx+ 96],xmm7 */ + 0x44, 0x0f, 0x29, 0x42, 0x70, /* movaps [rdx+112],xmm8 */ + 0x48, 0x83, 0xc2, 0x70, /* add rdx,112 */ + 0x44, 0x0f, 0x29, 0x4a, 0x10, /* movaps [rdx+ 16],xmm9 */ + 0x44, 0x0f, 0x29, 0x52, 0x20, /* movaps [rdx+ 32],xmm10 */ + 0x44, 0x0f, 0x29, 0x5a, 0x30, /* movaps [rdx+ 48],xmm11 */ + 0x44, 0x0f, 0x29, 0x62, 0x40, /* movaps [rdx+ 64],xmm12 */ + 0x44, 0x0f, 0x29, 0x6a, 0x50, /* movaps [rdx+ 80],xmm13 */ + 0x44, 0x0f, 0x29, 0x72, 0x60, /* movaps [rdx+ 96],xmm14 */ + 0x44, 0x0f, 0x29, 0x7a, 0x70, /* movaps [rdx+112],xmm15 */ + #endif + 0x48, 0x8b, 0x69, 0x08, /* mov rbp,[rcx+ 8] */ + 0x48, 0x8b, 0x71, 0x10, /* mov rsi,[rcx+16] */ + 0x48, 0x8b, 0x79, 0x18, /* mov rdi,[rcx+24] */ + 0x48, 0x8b, 0x59, 0x20, /* mov rbx,[rcx+32] */ + 0x4c, 0x8b, 0x61, 0x28, /* mov r12,[rcx+40] */ + 0x4c, 0x8b, 0x69, 0x30, /* mov r13,[rcx+48] */ + 0x4c, 0x8b, 0x71, 0x38, /* mov r14,[rcx+56] */ + 0x4c, 0x8b, 0x79, 0x40, /* mov r15,[rcx+64] */ + #if !defined(LIBCO_NO_SSE) + 0x0f, 0x28, 0x71, 0x50, /* movaps xmm6, [rcx+ 80] */ + 0x0f, 0x28, 0x79, 0x60, /* movaps xmm7, [rcx+ 96] */ + 0x44, 0x0f, 0x28, 0x41, 0x70, /* movaps xmm8, [rcx+112] */ + 0x48, 0x83, 0xc1, 0x70, /* add rcx,112 */ + 0x44, 0x0f, 0x28, 0x49, 0x10, /* movaps xmm9, [rcx+ 16] */ + 0x44, 0x0f, 0x28, 0x51, 0x20, /* movaps xmm10,[rcx+ 32] */ + 0x44, 0x0f, 0x28, 0x59, 0x30, /* movaps xmm11,[rcx+ 48] */ + 0x44, 0x0f, 0x28, 0x61, 0x40, /* movaps xmm12,[rcx+ 64] */ + 0x44, 0x0f, 0x28, 0x69, 0x50, /* movaps xmm13,[rcx+ 80] */ + 0x44, 0x0f, 0x28, 0x71, 0x60, /* movaps xmm14,[rcx+ 96] */ + 0x44, 0x0f, 0x28, 0x79, 0x70, /* movaps xmm15,[rcx+112] */ + #endif + 0xff, 0xe0, /* jmp rax */ + }; + + #include + + static void co_init() { + #ifdef LIBCO_MPROTECT + DWORD old_privileges; + VirtualProtect((void*)co_swap_function, sizeof co_swap_function, PAGE_EXECUTE_READ, &old_privileges); + #endif + } +#else + /* ABI: SystemV */ + static const unsigned char co_swap_function[4096] = { + 0x48, 0x89, 0x26, /* mov [rsi],rsp */ + 0x48, 0x8b, 0x27, /* mov rsp,[rdi] */ + 0x58, /* pop rax */ + 0x48, 0x89, 0x6e, 0x08, /* mov [rsi+ 8],rbp */ + 0x48, 0x89, 0x5e, 0x10, /* mov [rsi+16],rbx */ + 0x4c, 0x89, 0x66, 0x18, /* mov [rsi+24],r12 */ + 0x4c, 0x89, 0x6e, 0x20, /* mov [rsi+32],r13 */ + 0x4c, 0x89, 0x76, 0x28, /* mov [rsi+40],r14 */ + 0x4c, 0x89, 0x7e, 0x30, /* mov [rsi+48],r15 */ + 0x48, 0x8b, 0x6f, 0x08, /* mov rbp,[rdi+ 8] */ + 0x48, 0x8b, 0x5f, 0x10, /* mov rbx,[rdi+16] */ + 0x4c, 0x8b, 0x67, 0x18, /* mov r12,[rdi+24] */ + 0x4c, 0x8b, 0x6f, 0x20, /* mov r13,[rdi+32] */ + 0x4c, 0x8b, 0x77, 0x28, /* mov r14,[rdi+40] */ + 0x4c, 0x8b, 0x7f, 0x30, /* mov r15,[rdi+48] */ + 0xff, 0xe0, /* jmp rax */ + }; + + #include + #include + + static void co_init() { + #ifdef LIBCO_MPROTECT + unsigned long long addr = (unsigned long long)co_swap_function; + unsigned long long base = addr - (addr % sysconf(_SC_PAGESIZE)); + unsigned long long size = (addr - base) + sizeof co_swap_function; + mprotect((void*)base, size, PROT_READ | PROT_EXEC); + #endif + } +#endif + +static void crash() { + assert(0); /* called only if cothread_t entrypoint returns */ +} + +cothread_t co_active() { + if(!co_active_handle) co_active_handle = &co_active_buffer; + return co_active_handle; +} + +cothread_t co_create(unsigned int size, void (*entrypoint)(void), + size_t *out_size){ + cothread_t handle; + if(!co_swap) { + co_init(); + co_swap = (void (*)(cothread_t, cothread_t))co_swap_function; + } + + if(!co_active_handle) co_active_handle = &co_active_buffer; + size += 512; /* allocate additional space for storage */ + size &= ~15; /* align stack to 16-byte boundary */ + *out_size = size; + + if((handle = (cothread_t)malloc(size))) { + long long *p = (long long*)((char*)handle + size); /* seek to top of stack */ + *--p = (long long)crash; /* crash if entrypoint returns */ + *--p = (long long)entrypoint; /* start of function */ + *(long long*)handle = (long long)p; /* stack pointer */ + } + + return handle; +} + +void co_delete(cothread_t handle) { + free(handle); +} + +void co_switch(cothread_t handle) { + register cothread_t co_previous_handle = co_active_handle; + co_swap(co_active_handle = handle, co_previous_handle); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/arm.c b/src/fluent-bit/lib/monkey/deps/flb_libco/arm.c new file mode 100644 index 000000000..1bd8c043d --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/arm.c @@ -0,0 +1,81 @@ +/* + libco.arm (2016-09-14) + author: byuu + license: public domain +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static thread_local unsigned long co_active_buffer[64]; +static thread_local cothread_t co_active_handle = 0; +static void (*co_swap)(cothread_t, cothread_t) = 0; + +#ifdef LIBCO_MPROTECT + alignas(4096) +#else + text_section +#endif +static const unsigned long co_swap_function[1024] = { + 0xe8a16ff0, /* stmia r1!, {r4-r11,sp,lr} */ + 0xe8b0aff0, /* ldmia r0!, {r4-r11,sp,pc} */ + 0xe12fff1e, /* bx lr */ +}; + +static void co_init() { + #ifdef LIBCO_MPROTECT + unsigned long addr = (unsigned long)co_swap_function; + unsigned long base = addr - (addr % sysconf(_SC_PAGESIZE)); + unsigned long size = (addr - base) + sizeof co_swap_function; + mprotect((void*)base, size, PROT_READ | PROT_EXEC); + #endif +} + +cothread_t co_active() { + if(!co_active_handle) co_active_handle = &co_active_buffer; + return co_active_handle; +} + +cothread_t co_create(unsigned int size, void (*entrypoint)(void), + size_t *out_size) { + unsigned long* handle = 0; + if(!co_swap) { + co_init(); + co_swap = (void (*)(cothread_t, cothread_t))co_swap_function; + } + if(!co_active_handle) co_active_handle = &co_active_buffer; + size += 256; + size &= ~15; + *out_size = size; + + if(handle = (unsigned long*)malloc(size)) { + unsigned long* p = (unsigned long*)((unsigned char*)handle + size); + handle[8] = (unsigned long)p; + handle[9] = (unsigned long)entrypoint; + } + + return handle; +} + +void co_delete(cothread_t handle) { + free(handle); +} + +void co_switch(cothread_t handle) { + cothread_t co_previous_handle = co_active_handle; + co_swap(co_active_handle = handle, co_previous_handle); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/doc/style.css b/src/fluent-bit/lib/monkey/deps/flb_libco/doc/style.css new file mode 100755 index 000000000..5181afde6 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/doc/style.css @@ -0,0 +1,8 @@ +body { + background: #333; + color: #fff; +} + +code { + background: #444; +} diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/doc/targets.html b/src/fluent-bit/lib/monkey/deps/flb_libco/doc/targets.html new file mode 100755 index 000000000..d6211a15d --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/doc/targets.html @@ -0,0 +1,89 @@ + + + + + + + +Supported targets:

+ +Note that supported targets are only those that have been tested and confirmed +working. It is quite possible that libco will work on more processors, compilers +and operating systems than those listed below. +
+ +libco.x86
+Overhead: ~5x
+Supported processor(s): 32-bit x86
+Supported compiler(s): any
+Supported operating system(s):
    +
  • Windows
  • +
  • Mac OS X
  • +
  • Linux
  • +
  • BSD
  • +
+
+ +libco.amd64
+Overhead: ~10x (Windows), ~6x (all other platforms)
+Supported processor(s): 64-bit amd64
+Supported compiler(s): any
+Supported operating system(s):
    +
  • Windows
  • +
  • Mac OS X
  • +
  • Linux
  • +
  • BSD
  • +
+
+ +libco.ppc
+Overhead: ~20x
+Supported processor(s): 32-bit PowerPC, 64-bit PowerPC
+Supported compiler(s): GNU GCC
+Supported operating system(s):
    +
+
  • Mac OS X
  • +
  • Linux
  • +
  • BSD
  • +
  • Playstation 3
  • + +
    + +Note: this module contains compiler flags to enable/disable FPU and Altivec +support. + +
    + +libco.fiber
    +Overhead: ~15x
    +Supported processor(s): Processor independent
    +Supported compiler(s): any
    +Supported operating system(s):
      +
    • Windows
    • +
    +
    + +libco.sjlj
    +Overhead: ~30x
    +Supported processor(s): Processor independent
    +Supported compiler(s): any
    +Supported operating system(s):
      +
    • Mac OS X
    • +
    • Linux
    • +
    • BSD
    • +
    • Solaris
    • +
    +
    + +libco.ucontext
    +Overhead: ~300x
    +Supported processor(s): Processor independent
    +Supported compiler(s): any
    +Supported operating system(s):
      +
    • Linux
    • +
    • BSD
    • +
    +
    + + + diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/doc/usage.html b/src/fluent-bit/lib/monkey/deps/flb_libco/doc/usage.html new file mode 100755 index 000000000..3f0d81ccd --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/doc/usage.html @@ -0,0 +1,107 @@ + + + + + + + +License:

    +libco is released to the public domain. +
    + +Contact:

    +At present, you may contact me at setsunakun0 at hotmail dot com.
    +I am interested in knowing of any projects that make use of this library, +though this is only a courtesy. +
    + +Foreword:

    +libco is a cross-platform, public domain implementation of +cooperative-multithreading; a feature that is sorely lacking +from the ISO C/C++ standard.
    +The library is designed for maximum speed and portability, and +not for safety or features. If safety or extra functionality is desired, +a wrapper API can easily be written to encapsulate all library functions.
    +Behavior of executing operations that are listed as not permitted +below result in undefined behavior. They may work anyway, they +may cause undesired / unknown behavior, or they may crash the +program entirely.
    +The goal of this library was to simplify the base API as much as possible, +implementing only that which cannot be implemented using pure C. Additional +functionality after this would only complicate ports of this library to new +platforms. +
    + +Porting:

    +This document is included as a reference for porting libco. Please submit any +ports you create to me, so that libco can become more useful. Please note that +since libco is public domain, you must submit your code as a work of the +public domain in order for it to be included in the official distribution. +Full credit will be given in the source code of the official release. Please +do not bother submitting code to me under any other license -- including GPL, +LGPL, BSD or CC -- I am not interested in creating a library with multiple +different licenses depending on which targets are used. +
    + +Synopsis:

    + +typedef void* cothread_t;
    +
    +cothread_t co_active();
    +cothread_t co_create(unsigned int heapsize, void (*coentry)(void));
    +void       co_delete(cothread_t cothread);
    +void       co_switch(cothread_t cothread);
    +
    +
    + +Usage: +
    + +typedef void* cothread_t;

    +Handle to cothread.
    +Handle must be of type void*.
    +A value of null (0) indicates an uninitialized or invalid +handle, whereas a non-zero value indicates a valid handle. +
    + +cothread_t co_active();

    +Return handle to current cothread. Always returns a valid handle, even when +called from the main program thread. +
    + +cothread_t co_create(unsigned int heapsize, void (*coentry)(void));

    +Create new cothread.
    +Heapsize is the amount of memory allocated for the cothread stack, specified +in bytes. This is unfortunately impossible to make fully portable. It is +recommended to specify sizes using `n * sizeof(void*)'. It is better to err +on the side of caution and allocate more memory than will be needed to ensure +compatibility with other platforms, within reason. A typical heapsize for a +32-bit architecture is ~1MB.
    +When the new cothread is first called, program execution jumps to coentry. +This function does not take any arguments, due to portability issues with +passing function arguments. However, arguments can be simulated by the use +of global variables, which can be set before the first call to each cothread.
    +coentry() must not return, and should end with an appropriate co_switch() +statement. Behavior is undefined if entry point returns normally.
    +Library is responsible for allocating cothread stack memory, to free +the user from needing to allocate special memory capable of being used +as program stack memory on platforms where this is required.
    +User is always responsible for deleting cothreads with co_delete().
    +Return value of null (0) indicates cothread creation failed. +
    + +void co_delete(cothread_t cothread);

    +Delete specified cothread.
    +Null (0) or invalid cothread handle is not allowed.
    +Passing handle of active cothread to this function is not allowed.
    +Passing handle of primary cothread is not allowed. +
    + +void co_switch(cothread_t cothread);

    +Switch to specified cothread.
    +Null (0) or invalid cothread handle is not allowed.
    +Passing handle of active cothread to this function is not allowed. +
    + + + diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/fiber.c b/src/fluent-bit/lib/monkey/deps/flb_libco/fiber.c new file mode 100644 index 000000000..f91b912b7 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/fiber.c @@ -0,0 +1,54 @@ +/* + libco.win (2008-01-28) + authors: Nach, byuu + license: public domain +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" + +#define WINVER 0x0400 +#define _WIN32_WINNT 0x0400 +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static thread_local cothread_t co_active_ = 0; + +static void __stdcall co_thunk(void* coentry) { + ((void (*)(void))coentry)(); +} + +cothread_t co_active() { + if(!co_active_) { + ConvertThreadToFiber(0); + co_active_ = GetCurrentFiber(); + } + return co_active_; +} + +cothread_t co_create(unsigned int heapsize, void (*coentry)(void), + size_t *out_size) { + if(!co_active_) { + ConvertThreadToFiber(0); + co_active_ = GetCurrentFiber(); + } + *out_size = heapsize; + return (cothread_t)CreateFiber(heapsize, co_thunk, (void*)coentry); +} + +void co_delete(cothread_t cothread) { + DeleteFiber(cothread); +} + +void co_switch(cothread_t cothread) { + co_active_ = cothread; + SwitchToFiber(cothread); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/libco.c b/src/fluent-bit/lib/monkey/deps/flb_libco/libco.c new file mode 100644 index 000000000..e0101d238 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/libco.c @@ -0,0 +1,37 @@ +/* + libco + license: public domain +*/ + +#if defined(__clang__) + #pragma clang diagnostic ignored "-Wparentheses" +#endif + +#if defined(__clang__) || defined(__GNUC__) + #if defined(__i386__) + #include "x86.c" + #elif defined(__amd64__) + #include "amd64.c" + #elif defined(__arm__) + #include "arm.c" + #elif defined(__aarch64__) + #include "aarch64.c" + #elif defined(_ARCH_PPC) + #include "ppc.c" + #elif defined(_WIN32) + #include "fiber.c" + #else + #include "sjlj.c" + #endif +#elif defined(_MSC_VER) + #if defined(_M_IX86) + #include "x86.c" +// Commented out due to SIGSEGV bug +// #elif defined(_M_AMD64) +// #include "amd64.c" + #else + #include "fiber.c" + #endif +#else + #error "libco: unsupported processor, compiler or operating system" +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/libco.h b/src/fluent-bit/lib/monkey/deps/flb_libco/libco.h new file mode 100644 index 000000000..f2e2487aa --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/libco.h @@ -0,0 +1,28 @@ +/* + libco v18 (2016-09-14) + author: byuu + license: public domain +*/ + +#ifndef LIBCO_H +#define LIBCO_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void* cothread_t; + +cothread_t co_active(); +cothread_t co_create(unsigned int, void (*)(void), size_t *); +void co_delete(cothread_t); +void co_switch(cothread_t); + +#ifdef __cplusplus +} +#endif + +/* ifndef LIBCO_H */ +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/ppc.c b/src/fluent-bit/lib/monkey/deps/flb_libco/ppc.c new file mode 100644 index 000000000..533256b34 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/ppc.c @@ -0,0 +1,369 @@ +/* + libco.ppc (2016-09-14) + author: blargg + license: public domain +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" + +#include +#include +#include + +#if LIBCO_MPROTECT + #include + #include +#endif + +/* state format (offsets in 32-bit words) + + +0 pointer to swap code + rest of function descriptor for entry function + +8 PC ++10 SP + special registers + GPRs + FPRs + VRs + stack +*/ + +enum { state_size = 1024 }; +enum { above_stack = 2048 }; +enum { stack_align = 256 }; + +static thread_local cothread_t co_active_handle = 0; + +/* determine environment */ + +#define LIBCO_PPC64 (_ARCH_PPC64 || __PPC64__ || __ppc64__ || __powerpc64__) + +/* whether function calls are indirect through a descriptor, or are directly to function */ +#ifndef LIBCO_PPCDESC + #if !_CALL_SYSV && (_CALL_AIX || _CALL_AIXDESC || LIBCO_PPC64) + #define LIBCO_PPCDESC 1 + #endif +#endif + +#ifdef LIBCO_MPROTECT + alignas(4096) +#else + text_section +#endif +static const uint32_t libco_ppc_code[1024] = { + #if LIBCO_PPC64 + 0x7d000026, /* mfcr r8 */ + 0xf8240028, /* std r1,40(r4) */ + 0x7d2802a6, /* mflr r9 */ + 0xf9c40048, /* std r14,72(r4) */ + 0xf9e40050, /* std r15,80(r4) */ + 0xfa040058, /* std r16,88(r4) */ + 0xfa240060, /* std r17,96(r4) */ + 0xfa440068, /* std r18,104(r4) */ + 0xfa640070, /* std r19,112(r4) */ + 0xfa840078, /* std r20,120(r4) */ + 0xfaa40080, /* std r21,128(r4) */ + 0xfac40088, /* std r22,136(r4) */ + 0xfae40090, /* std r23,144(r4) */ + 0xfb040098, /* std r24,152(r4) */ + 0xfb2400a0, /* std r25,160(r4) */ + 0xfb4400a8, /* std r26,168(r4) */ + 0xfb6400b0, /* std r27,176(r4) */ + 0xfb8400b8, /* std r28,184(r4) */ + 0xfba400c0, /* std r29,192(r4) */ + 0xfbc400c8, /* std r30,200(r4) */ + 0xfbe400d0, /* std r31,208(r4) */ + 0xf9240020, /* std r9,32(r4) */ + 0xe8e30020, /* ld r7,32(r3) */ + 0xe8230028, /* ld r1,40(r3) */ + 0x48000009, /* bl 1 */ + 0x7fe00008, /* trap */ + 0x91040030, /*1:stw r8,48(r4) */ + 0x80c30030, /* lwz r6,48(r3) */ + 0x7ce903a6, /* mtctr r7 */ + 0xe9c30048, /* ld r14,72(r3) */ + 0xe9e30050, /* ld r15,80(r3) */ + 0xea030058, /* ld r16,88(r3) */ + 0xea230060, /* ld r17,96(r3) */ + 0xea430068, /* ld r18,104(r3) */ + 0xea630070, /* ld r19,112(r3) */ + 0xea830078, /* ld r20,120(r3) */ + 0xeaa30080, /* ld r21,128(r3) */ + 0xeac30088, /* ld r22,136(r3) */ + 0xeae30090, /* ld r23,144(r3) */ + 0xeb030098, /* ld r24,152(r3) */ + 0xeb2300a0, /* ld r25,160(r3) */ + 0xeb4300a8, /* ld r26,168(r3) */ + 0xeb6300b0, /* ld r27,176(r3) */ + 0xeb8300b8, /* ld r28,184(r3) */ + 0xeba300c0, /* ld r29,192(r3) */ + 0xebc300c8, /* ld r30,200(r3) */ + 0xebe300d0, /* ld r31,208(r3) */ + 0x7ccff120, /* mtcr r6 */ + #else + 0x7d000026, /* mfcr r8 */ + 0x90240028, /* stw r1,40(r4) */ + 0x7d2802a6, /* mflr r9 */ + 0x91a4003c, /* stw r13,60(r4) */ + 0x91c40040, /* stw r14,64(r4) */ + 0x91e40044, /* stw r15,68(r4) */ + 0x92040048, /* stw r16,72(r4) */ + 0x9224004c, /* stw r17,76(r4) */ + 0x92440050, /* stw r18,80(r4) */ + 0x92640054, /* stw r19,84(r4) */ + 0x92840058, /* stw r20,88(r4) */ + 0x92a4005c, /* stw r21,92(r4) */ + 0x92c40060, /* stw r22,96(r4) */ + 0x92e40064, /* stw r23,100(r4) */ + 0x93040068, /* stw r24,104(r4) */ + 0x9324006c, /* stw r25,108(r4) */ + 0x93440070, /* stw r26,112(r4) */ + 0x93640074, /* stw r27,116(r4) */ + 0x93840078, /* stw r28,120(r4) */ + 0x93a4007c, /* stw r29,124(r4) */ + 0x93c40080, /* stw r30,128(r4) */ + 0x93e40084, /* stw r31,132(r4) */ + 0x91240020, /* stw r9,32(r4) */ + 0x80e30020, /* lwz r7,32(r3) */ + 0x80230028, /* lwz r1,40(r3) */ + 0x48000009, /* bl 1 */ + 0x7fe00008, /* trap */ + 0x91040030, /*1:stw r8,48(r4) */ + 0x80c30030, /* lwz r6,48(r3) */ + 0x7ce903a6, /* mtctr r7 */ + 0x81a3003c, /* lwz r13,60(r3) */ + 0x81c30040, /* lwz r14,64(r3) */ + 0x81e30044, /* lwz r15,68(r3) */ + 0x82030048, /* lwz r16,72(r3) */ + 0x8223004c, /* lwz r17,76(r3) */ + 0x82430050, /* lwz r18,80(r3) */ + 0x82630054, /* lwz r19,84(r3) */ + 0x82830058, /* lwz r20,88(r3) */ + 0x82a3005c, /* lwz r21,92(r3) */ + 0x82c30060, /* lwz r22,96(r3) */ + 0x82e30064, /* lwz r23,100(r3) */ + 0x83030068, /* lwz r24,104(r3) */ + 0x8323006c, /* lwz r25,108(r3) */ + 0x83430070, /* lwz r26,112(r3) */ + 0x83630074, /* lwz r27,116(r3) */ + 0x83830078, /* lwz r28,120(r3) */ + 0x83a3007c, /* lwz r29,124(r3) */ + 0x83c30080, /* lwz r30,128(r3) */ + 0x83e30084, /* lwz r31,132(r3) */ + 0x7ccff120, /* mtcr r6 */ + #endif + + #ifndef LIBCO_PPC_NOFP + 0xd9c400e0, /* stfd f14,224(r4) */ + 0xd9e400e8, /* stfd f15,232(r4) */ + 0xda0400f0, /* stfd f16,240(r4) */ + 0xda2400f8, /* stfd f17,248(r4) */ + 0xda440100, /* stfd f18,256(r4) */ + 0xda640108, /* stfd f19,264(r4) */ + 0xda840110, /* stfd f20,272(r4) */ + 0xdaa40118, /* stfd f21,280(r4) */ + 0xdac40120, /* stfd f22,288(r4) */ + 0xdae40128, /* stfd f23,296(r4) */ + 0xdb040130, /* stfd f24,304(r4) */ + 0xdb240138, /* stfd f25,312(r4) */ + 0xdb440140, /* stfd f26,320(r4) */ + 0xdb640148, /* stfd f27,328(r4) */ + 0xdb840150, /* stfd f28,336(r4) */ + 0xdba40158, /* stfd f29,344(r4) */ + 0xdbc40160, /* stfd f30,352(r4) */ + 0xdbe40168, /* stfd f31,360(r4) */ + 0xc9c300e0, /* lfd f14,224(r3) */ + 0xc9e300e8, /* lfd f15,232(r3) */ + 0xca0300f0, /* lfd f16,240(r3) */ + 0xca2300f8, /* lfd f17,248(r3) */ + 0xca430100, /* lfd f18,256(r3) */ + 0xca630108, /* lfd f19,264(r3) */ + 0xca830110, /* lfd f20,272(r3) */ + 0xcaa30118, /* lfd f21,280(r3) */ + 0xcac30120, /* lfd f22,288(r3) */ + 0xcae30128, /* lfd f23,296(r3) */ + 0xcb030130, /* lfd f24,304(r3) */ + 0xcb230138, /* lfd f25,312(r3) */ + 0xcb430140, /* lfd f26,320(r3) */ + 0xcb630148, /* lfd f27,328(r3) */ + 0xcb830150, /* lfd f28,336(r3) */ + 0xcba30158, /* lfd f29,344(r3) */ + 0xcbc30160, /* lfd f30,352(r3) */ + 0xcbe30168, /* lfd f31,360(r3) */ + #endif + + #ifdef __ALTIVEC__ + 0x7ca042a6, /* mfvrsave r5 */ + 0x39040180, /* addi r8,r4,384 */ + 0x39240190, /* addi r9,r4,400 */ + 0x70a00fff, /* andi. r0,r5,4095 */ + 0x90a40034, /* stw r5,52(r4) */ + 0x4182005c, /* beq- 2 */ + 0x7e8041ce, /* stvx v20,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7ea049ce, /* stvx v21,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7ec041ce, /* stvx v22,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7ee049ce, /* stvx v23,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7f0041ce, /* stvx v24,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7f2049ce, /* stvx v25,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7f4041ce, /* stvx v26,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7f6049ce, /* stvx v27,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7f8041ce, /* stvx v28,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7fa049ce, /* stvx v29,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7fc041ce, /* stvx v30,r0,r8 */ + 0x7fe049ce, /* stvx v31,r0,r9 */ + 0x80a30034, /*2:lwz r5,52(r3) */ + 0x39030180, /* addi r8,r3,384 */ + 0x39230190, /* addi r9,r3,400 */ + 0x70a00fff, /* andi. r0,r5,4095 */ + 0x7ca043a6, /* mtvrsave r5 */ + 0x4d820420, /* beqctr */ + 0x7e8040ce, /* lvx v20,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7ea048ce, /* lvx v21,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7ec040ce, /* lvx v22,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7ee048ce, /* lvx v23,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7f0040ce, /* lvx v24,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7f2048ce, /* lvx v25,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7f4040ce, /* lvx v26,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7f6048ce, /* lvx v27,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7f8040ce, /* lvx v28,r0,r8 */ + 0x39080020, /* addi r8,r8,32 */ + 0x7fa048ce, /* lvx v29,r0,r9 */ + 0x39290020, /* addi r9,r9,32 */ + 0x7fc040ce, /* lvx v30,r0,r8 */ + 0x7fe048ce, /* lvx v31,r0,r9 */ + #endif + + 0x4e800420, /* bctr */ +}; + +#if LIBCO_PPCDESC + /* function call goes through indirect descriptor */ + #define CO_SWAP_ASM(x, y) ((void (*)(cothread_t, cothread_t))(uintptr_t)x)(x, y) +#else + /* function call goes directly to code */ + #define CO_SWAP_ASM(x, y) ((void (*)(cothread_t, cothread_t))(uintptr_t)libco_ppc_code)(x, y) +#endif + +static uint32_t* co_create_(unsigned size, uintptr_t entry) { + (void)entry; + + uint32_t* t = (uint32_t*)malloc(size); + + #if LIBCO_PPCDESC + if(t) { + memcpy(t, (void*)entry, sizeof(void*) * 3); /* copy entry's descriptor */ + *(const void**)t = libco_ppc_code; /* set function pointer to swap routine */ + } + #endif + + return t; +} + +cothread_t co_create(unsigned int size, void (*entry_)(void), + size_t *out_size) { + + uintptr_t entry = (uintptr_t)entry_; + uint32_t* t = 0; + + /* be sure main thread was successfully allocated */ + if(co_active()) { + size += state_size + above_stack + stack_align; + t = co_create_(size, entry); + } + + if(t) { + uintptr_t sp; + int shift; + + /* save current registers into new thread, so that any special ones will have proper values when thread is begun */ + CO_SWAP_ASM(t, t); + + #if LIBCO_PPCDESC + entry = (uintptr_t)*(void**)entry; /* get real address */ + #endif + + /* put stack near end of block, and align */ + sp = (uintptr_t)t + size - above_stack; + sp -= sp % stack_align; + + /* on PPC32, we save and restore GPRs as 32 bits. for PPC64, we + save and restore them as 64 bits, regardless of the size the ABI + uses. so, we manually write pointers at the proper size. we always + save and restore at the same address, and since PPC is big-endian, + we must put the low byte first on PPC32. */ + + /* if uintptr_t is 32 bits, >>32 is undefined behavior, + so we do two shifts and don't have to care how many bits uintptr_t is. */ + #if LIBCO_PPC64 + shift = 16; + #else + shift = 0; + #endif + + /* set up so entry will be called on next swap */ + t[ 8] = (uint32_t)(entry >> shift >> shift); + t[ 9] = (uint32_t)entry; + + t[10] = (uint32_t)(sp >> shift >> shift); + t[11] = (uint32_t)sp; + } + *out_size = size; + return t; +} + +void co_delete(cothread_t t) { + free(t); +} + +static void co_init_(void) { + #if LIBCO_MPROTECT + long page_size = sysconf(_SC_PAGESIZE); + if(page_size > 0) { + uintptr_t align = page_size; + uintptr_t begin = (uintptr_t)libco_ppc_code; + uintptr_t end = begin + sizeof libco_ppc_code; + + /* align beginning and end */ + end += align - 1; + end -= end % align; + begin -= begin % align; + + mprotect((void*)begin, end - begin, PROT_READ | PROT_EXEC); + } + #endif + + co_active_handle = co_create_(state_size, (uintptr_t)&co_switch); +} + +cothread_t co_active() { + if(!co_active_handle) co_init_(); + + return co_active_handle; +} + +void co_switch(cothread_t t) { + cothread_t old = co_active_handle; + co_active_handle = t; + + CO_SWAP_ASM(t, old); +} diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/settings.h b/src/fluent-bit/lib/monkey/deps/flb_libco/settings.h new file mode 100644 index 000000000..0c3db68e0 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/settings.h @@ -0,0 +1,52 @@ +#ifdef LIBCO_C + +/*[amd64, arm, ppc, x86]: + by default, co_swap_function is marked as a text (code) section + if not supported, uncomment the below line to use mprotect instead */ + +/* + * Testing Fluent Bit on Windows when doing co_swap it crash if the + * option LIBCO_MPROTECT is not defined. + */ +#ifdef _WIN32 +#define LIBCO_MPROTECT +#endif + +/*[amd64]: + Win64 only: provides a substantial speed-up, but will thrash XMM regs + do not use this unless you are certain your application won't use SSE */ +/* #define LIBCO_NO_SSE */ + +#ifdef LIBCO_C + #ifdef LIBCO_MP + #ifdef _MSC_VER + #define thread_local __declspec (thread) + #else + #define thread_local __thread + #endif + #else + #define thread_local + #endif +#endif + +#if __STDC_VERSION__ >= 201112L + #ifndef _MSC_VER + #include + #endif +#else + #define alignas(bytes) +#endif + +#if defined(_MSC_VER) + #pragma data_seg(".text") + #define text_section __declspec(allocate(".text")) +#elif defined(__APPLE__) && defined(__MACH__) + #define text_section __attribute__((section("__TEXT,__text"))) +#elif defined(__clang__) + #define text_section __attribute__((section(".text"))) +#else + #define text_section __attribute__((section(".text#"))) +#endif + +/* ifdef LIBCO_C */ +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/sjlj.c b/src/fluent-bit/lib/monkey/deps/flb_libco/sjlj.c new file mode 100644 index 000000000..36d110b71 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/sjlj.c @@ -0,0 +1,105 @@ +/* + libco.sjlj (2008-01-28) + author: Nach + license: public domain +*/ + +/* + note this was designed for UNIX systems. Based on ideas expressed in a paper by Ralf Engelschall. + for SJLJ on other systems, one would want to rewrite springboard() and co_create() and hack the jmb_buf stack pointer. +*/ + +#define LIBCO_C +#include "libco.h" + +#include +#include +#include +#include "settings.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + sigjmp_buf context; + void (*coentry)(void); + void* stack; +} cothread_struct; + +static thread_local cothread_struct co_primary; +static thread_local cothread_struct* creating; +static thread_local cothread_struct* co_running = 0; + +static void springboard(int ignored) { + if(sigsetjmp(creating->context, 0)) { + co_running->coentry(); + } +} + +cothread_t co_active() { + if(!co_running) co_running = &co_primary; + return (cothread_t)co_running; +} + +cothread_t co_create(unsigned int size, void (*coentry)(void), + size_t *out_size) { + if(!co_running) co_running = &co_primary; + + cothread_struct *thread = (cothread_struct*)malloc(sizeof(cothread_struct)); + if(thread) { + struct sigaction handler; + struct sigaction old_handler; + + stack_t stack; + stack_t old_stack; + + thread->coentry = thread->stack = 0; + + stack.ss_flags = 0; + stack.ss_size = size; + thread->stack = stack.ss_sp = malloc(size); + if(stack.ss_sp && !sigaltstack(&stack, &old_stack)) { + handler.sa_handler = springboard; + handler.sa_flags = SA_ONSTACK; + sigemptyset(&handler.sa_mask); + creating = thread; + + if(!sigaction(SIGUSR1, &handler, &old_handler)) { + if(!raise(SIGUSR1)) { + thread->coentry = coentry; + } + sigaltstack(&old_stack, 0); + sigaction(SIGUSR1, &old_handler, 0); + } + } + + if(thread->coentry != coentry) { + co_delete(thread); + thread = 0; + } + } + + *out_size = size; + return (cothread_t)thread; +} + +void co_delete(cothread_t cothread) { + if(cothread) { + if(((cothread_struct*)cothread)->stack) { + free(((cothread_struct*)cothread)->stack); + } + free(cothread); + } +} + +void co_switch(cothread_t cothread) { + if(!sigsetjmp(co_running->context, 0)) { + co_running = (cothread_struct*)cothread; + siglongjmp(co_running->context, 1); + } +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/ucontext.c b/src/fluent-bit/lib/monkey/deps/flb_libco/ucontext.c new file mode 100644 index 000000000..b252cb2d8 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/ucontext.c @@ -0,0 +1,72 @@ +/* + libco.ucontext (2008-01-28) + author: Nach + license: public domain +*/ + +/* + WARNING: the overhead of POSIX ucontext is very high, + assembly versions of libco or libco_sjlj should be much faster + + this library only exists for two reasons: + 1: as an initial test for the viability of a ucontext implementation + 2: to demonstrate the power and speed of libco over existing implementations, + such as pth (which defaults to wrapping ucontext on unix targets) + + use this library only as a *last resort* +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" + +#define _BSD_SOURCE +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static thread_local ucontext_t co_primary; +static thread_local ucontext_t* co_running = 0; + +cothread_t co_active() { + if(!co_running) co_running = &co_primary; + return (cothread_t)co_running; +} + +cothread_t co_create(unsigned int heapsize, void (*coentry)(void), + size_t *out_size) { + if(!co_running) co_running = &co_primary; + ucontext_t* thread = (ucontext_t*)malloc(sizeof(ucontext_t)); + if(thread) { + if((!getcontext(thread) && !(thread->uc_stack.ss_sp = 0)) && (thread->uc_stack.ss_sp = malloc(heapsize))) { + thread->uc_link = co_running; + thread->uc_stack.ss_size = heapsize; + *out_size = heapsize; + makecontext(thread, coentry, 0); + } else { + co_delete((cothread_t)thread); + thread = 0; + } + } + return (cothread_t)thread; +} + +void co_delete(cothread_t cothread) { + if(cothread) { + if(((ucontext_t*)cothread)->uc_stack.ss_sp) { free(((ucontext_t*)cothread)->uc_stack.ss_sp); } + free(cothread); + } +} + +void co_switch(cothread_t cothread) { + ucontext_t* old_thread = co_running; + co_running = (ucontext_t*)cothread; + swapcontext(old_thread, co_running); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/flb_libco/x86.c b/src/fluent-bit/lib/monkey/deps/flb_libco/x86.c new file mode 100644 index 000000000..bfa50b84d --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/flb_libco/x86.c @@ -0,0 +1,116 @@ +/* + libco.x86 (2016-09-14) + author: byuu + license: public domain +*/ + +#define LIBCO_C +#include "libco.h" +#include "settings.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__clang__) || defined(__GNUC__) + #define fastcall __attribute__((fastcall)) +#elif defined(_MSC_VER) + #define fastcall __fastcall +#else + #error "libco: please define fastcall macro" +#endif + +static thread_local long co_active_buffer[64]; +static thread_local cothread_t co_active_handle = 0; +static void (fastcall *co_swap)(cothread_t, cothread_t) = 0; + +#ifdef LIBCO_MPROTECT + alignas(4096) +#else + text_section +#endif +/* ABI: fastcall */ +static const unsigned char co_swap_function[4096] = { + 0x89, 0x22, /* mov [edx],esp */ + 0x8b, 0x21, /* mov esp,[ecx] */ + 0x58, /* pop eax */ + 0x89, 0x6a, 0x04, /* mov [edx+ 4],ebp */ + 0x89, 0x72, 0x08, /* mov [edx+ 8],esi */ + 0x89, 0x7a, 0x0c, /* mov [edx+12],edi */ + 0x89, 0x5a, 0x10, /* mov [edx+16],ebx */ + 0x8b, 0x69, 0x04, /* mov ebp,[ecx+ 4] */ + 0x8b, 0x71, 0x08, /* mov esi,[ecx+ 8] */ + 0x8b, 0x79, 0x0c, /* mov edi,[ecx+12] */ + 0x8b, 0x59, 0x10, /* mov ebx,[ecx+16] */ + 0xff, 0xe0, /* jmp eax */ +}; + +#ifdef _WIN32 + #include + + static void co_init() { + #ifdef LIBCO_MPROTECT + DWORD old_privileges; + VirtualProtect((void*)co_swap_function, sizeof co_swap_function, PAGE_EXECUTE_READ, &old_privileges); + #endif + } +#else + #include + #include + + static void co_init() { + #ifdef LIBCO_MPROTECT + unsigned long addr = (unsigned long)co_swap_function; + unsigned long base = addr - (addr % sysconf(_SC_PAGESIZE)); + unsigned long size = (addr - base) + sizeof co_swap_function; + mprotect((void*)base, size, PROT_READ | PROT_EXEC); + #endif + } +#endif + +static void crash() { + assert(0); /* called only if cothread_t entrypoint returns */ +} + +cothread_t co_active() { + if(!co_active_handle) co_active_handle = &co_active_buffer; + return co_active_handle; +} + +cothread_t co_create(unsigned int size, void (*entrypoint)(void), + size_t *out_size) { + cothread_t handle; + if(!co_swap) { + co_init(); + co_swap = (void (fastcall*)(cothread_t, cothread_t))co_swap_function; + } + if(!co_active_handle) co_active_handle = &co_active_buffer; + size += 256; /* allocate additional space for storage */ + size &= ~15; /* align stack to 16-byte boundary */ + *out_size = size; + + if(handle = (cothread_t)malloc(size)) { + long *p = (long*)((char*)handle + size); /* seek to top of stack */ + *--p = (long)crash; /* crash if entrypoint returns */ + *--p = (long)entrypoint; /* start of function */ + *(long*)handle = (long)p; /* stack pointer */ + } + + return handle; +} + +void co_delete(cothread_t handle) { + free(handle); +} + +void co_switch(cothread_t handle) { + register cothread_t co_previous_handle = co_active_handle; + co_swap(co_active_handle = handle, co_previous_handle); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/fluent-bit/lib/monkey/deps/rbtree/CMakeLists.txt b/src/fluent-bit/lib/monkey/deps/rbtree/CMakeLists.txt new file mode 100644 index 000000000..739260e2c --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/rbtree/CMakeLists.txt @@ -0,0 +1,5 @@ +set(src + rbtree.c + ) + +add_library(rbtree STATIC ${src}) diff --git a/src/fluent-bit/lib/monkey/deps/rbtree/README.md b/src/fluent-bit/lib/monkey/deps/rbtree/README.md new file mode 100644 index 000000000..00851601e --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/rbtree/README.md @@ -0,0 +1,7 @@ +[Taken from: https://github.com/pvachon/rbtree] + +A simple, intrusive, zero-allocation Red-Black tree implementation. + +Designed exclusively for systems where determinism is needed. + +Licensed under a 2-clause BSD license for the sake of simplicity. diff --git a/src/fluent-bit/lib/monkey/deps/rbtree/rbtree.c b/src/fluent-bit/lib/monkey/deps/rbtree/rbtree.c new file mode 100644 index 000000000..99e56e0c8 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/rbtree/rbtree.c @@ -0,0 +1,811 @@ +/* + Copyright (c) 2013, Phil Vachon + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** \defgroup rb_tree_implementation Implementation Details + * All the implementation details for the red-black tree, including functions for + * the maintenance of tree properties. + * @{ + */ + +/** \file rbtree.c + * An implementation of an intrusive red-black self-balancing tree, that can + * be used to implement red-black trees in situations where memory allocation + * is not an option. + * + * This file exclusively contains implementation details for the red-black tree, so + * probably is not of much interest to most people. + * + * \see rbtree.h + * \see rb_tree + * \see rb_tree_node + */ + +#include + +#include +#include + +/** \defgroup rb_tree_colors Colors for the red-black tree nodes + * @{ + */ + +/** + * Node is black + */ +#define COLOR_BLACK 0x0 + +/** + * Node is red + */ +#define COLOR_RED 0x1 +/**@}*/ + +static +int __rb_tree_cmp_mapper(void *state, const void *lhs, const void *rhs) +{ + rb_cmp_func_t cmp = state; + return cmp(lhs, rhs); +} + +rb_result_t rb_tree_new_ex(struct rb_tree *tree, + rb_cmp_func_ex_t compare, + void *state) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(compare != NULL); + + tree->root = NULL; + tree->compare = compare; + tree->state = state; + tree->rightmost = NULL; + + return ret; +} + +rb_result_t rb_tree_new(struct rb_tree *tree, + rb_cmp_func_t compare) +{ + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(compare != NULL); + + return rb_tree_new_ex(tree, __rb_tree_cmp_mapper, (void *)compare); +} + +rb_result_t rb_tree_destroy(struct rb_tree *tree) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + + memset(tree, 0, sizeof(struct rb_tree)); + + return ret; +} + +rb_result_t rb_tree_empty(struct rb_tree *tree, + int *is_empty) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(is_empty != NULL); + + *is_empty = !!(tree->root == NULL); + + return ret; +} + +rb_result_t rb_tree_find(struct rb_tree *tree, + const void *key, + struct rb_tree_node **value) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(value != NULL); + + *value = NULL; + + if (RB_UNLIKELY(tree->root == NULL)) { + ret = RB_NOT_FOUND; + goto done; + } + + struct rb_tree_node *node = tree->root; + + while (node != NULL) { + int compare = tree->compare(tree->state, key, node->key); + + if (compare < 0) { + node = node->left; + } else if (compare == 0) { + break; /* We found our node */ + } else { + /* Otherwise, we want the right node, and continue iteration */ + node = node->right; + } + } + + if (node == NULL) { + ret = RB_NOT_FOUND; + goto done; + } + + /* Return the node we found */ + *value = node; + +done: + return ret; +} + +/* Helper function to get a node's sibling */ +static inline +struct rb_tree_node *__helper_get_sibling(struct rb_tree_node *node) +{ + if (node->parent == NULL) { + return NULL; + } + + struct rb_tree_node *parent = node->parent; + + if (node == parent->left) { + return parent->right; + } else { + return parent->left; + } +} + +/* Helper function to get a node's grandparent */ +static inline +struct rb_tree_node *__helper_get_grandparent(struct rb_tree_node *node) +{ + if (node->parent == NULL) { + return NULL; + } + + struct rb_tree_node *parent_node = node->parent; + + return parent_node->parent; +} + +/* Helper function to get a node's uncle */ +static inline +struct rb_tree_node *__helper_get_uncle(struct rb_tree_node *node) +{ + struct rb_tree_node *grandparent = __helper_get_grandparent(node); + + if (grandparent == NULL) { + return NULL; + } + + if (node->parent == grandparent->left) { + return grandparent->right; + } else { + return grandparent->left; + } +} + +/* Helper function to do a left rotation of a given node */ +static inline +void __helper_rotate_left(struct rb_tree *tree, + struct rb_tree_node *node) +{ + struct rb_tree_node *x = node; + struct rb_tree_node *y = x->right; + + x->right = y->left; + + if (y->left != NULL) { + struct rb_tree_node *yleft = y->left; + yleft->parent = x; + } + + y->parent = x->parent; + + if (x->parent == NULL) { + tree->root = y; + } else { + struct rb_tree_node *xp = x->parent; + if (x == xp->left) { + xp->left = y; + } else { + xp->right = y; + } + } + + y->left = x; + x->parent = y; +} + +/* Helper function to do a right rotation of a given node */ +static inline +void __helper_rotate_right(struct rb_tree *tree, + struct rb_tree_node *node) +{ + struct rb_tree_node *x = node; + struct rb_tree_node *y = x->left; + + x->left = y->right; + + if (y->right != NULL) { + struct rb_tree_node *yright = y->right; + yright->parent = x; + } + + y->parent = x->parent; + + if (x->parent == NULL) { + tree->root = y; + } else { + struct rb_tree_node *xp = x->parent; + if (x == xp->left) { + xp->left = y; + } else { + xp->right = y; + } + } + + y->right = x; + x->parent = y; +} + +/* Function to perform a RB tree rebalancing after an insertion */ +static +void __helper_rb_tree_insert_rebalance(struct rb_tree *tree, + struct rb_tree_node *node) +{ + struct rb_tree_node *new_node_parent = node->parent; + + if (new_node_parent != NULL && new_node_parent->color != COLOR_BLACK) { + struct rb_tree_node *pnode = node; + + /* Iterate until we're at the root (which we just color black) or + * until we the parent node is no longer red. + */ + while ((tree->root != pnode) && (pnode->parent != NULL) && + (pnode->parent->color == COLOR_RED)) + { + struct rb_tree_node *parent = pnode->parent; + struct rb_tree_node *grandparent = __helper_get_grandparent(pnode); + struct rb_tree_node *uncle = NULL; + int uncle_is_left; + + assert(pnode->color == COLOR_RED); + + if (parent == grandparent->left) { + uncle_is_left = 0; + uncle = grandparent->right; + } else { + uncle_is_left = 1; + uncle = grandparent->left; + } + + /* Case 1: Uncle is not black */ + if (uncle && uncle->color == COLOR_RED) { + /* Color parent and uncle black */ + parent->color = COLOR_BLACK; + uncle->color = COLOR_BLACK; + + /* Color Grandparent as Black */ + grandparent->color = COLOR_RED; + pnode = grandparent; + /* Continue iteration, processing grandparent */ + } else { + /* Case 2 - node's parent is red, but uncle is black */ + if (!uncle_is_left && parent->right == pnode) { + pnode = pnode->parent; + __helper_rotate_left(tree, pnode); + } else if (uncle_is_left && parent->left == pnode) { + pnode = pnode->parent; + __helper_rotate_right(tree, pnode); + } + + /* Case 3 - Recolor and rotate*/ + parent = pnode->parent; + parent->color = COLOR_BLACK; + + grandparent = __helper_get_grandparent(pnode); + grandparent->color = COLOR_RED; + if (!uncle_is_left) { + __helper_rotate_right(tree, grandparent); + } else { + __helper_rotate_left(tree, grandparent); + } + } + } + + /* Make sure the tree root is black (Case 1: Continued) */ + struct rb_tree_node *tree_root = tree->root; + tree_root->color = COLOR_BLACK; + } +} + +rb_result_t rb_tree_insert(struct rb_tree *tree, + const void *key, + struct rb_tree_node *node) +{ + rb_result_t ret = RB_OK; + + int rightmost = 1; + struct rb_tree_node *nd = NULL; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(node != NULL); + + node->left = NULL; + node->right = NULL; + node->parent = NULL; + node->key = key; + + /* Case 1: Simplest case -- tree is empty */ + if (RB_UNLIKELY(tree->root == NULL)) { + tree->root = node; + tree->rightmost = node; + node->color = COLOR_BLACK; + goto done; + } + + /* Otherwise, insert the node as you would typically in a BST */ + nd = tree->root; + node->color = COLOR_RED; + + rightmost = 1; + + /* Insert a node into the tree as you normally would */ + while (nd != NULL) { + int compare = tree->compare(tree->state, node->key, nd->key); + + if (compare == 0) { + ret = RB_DUPLICATE; + goto done; + } + + if (compare < 0) { + rightmost = 0; + if (nd->left == NULL) { + nd->left = node; + break; + } else { + nd = nd->left; + } + } else { + if (nd->right == NULL) { + nd->right = node; + break; + } else { + nd = nd->right; + } + } + } + + node->parent = nd; + + if (1 == rightmost) { + tree->rightmost = node; + } + + /* Rebalance the tree about the node we just added */ + __helper_rb_tree_insert_rebalance(tree, node); + +done: + return ret; +} + +rb_result_t rb_tree_find_or_insert(struct rb_tree *tree, + void *key, + struct rb_tree_node *new_candidate, + struct rb_tree_node **value) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(value != NULL); + RB_ASSERT_ARG(new_candidate != NULL); + + *value = NULL; + new_candidate->key = key; + + struct rb_tree_node *node = tree->root; + + /* Case 1: Tree is empty, so we just insert the node */ + if (RB_UNLIKELY(tree->root == NULL)) { + tree->root = new_candidate; + tree->rightmost = new_candidate; + new_candidate->color = COLOR_BLACK; + node = new_candidate; + goto done; + } + + struct rb_tree_node *node_prev = NULL; + int dir = 0, rightmost = 1; + while (node != NULL) { + int compare = tree->compare(tree->state, key, node->key); + + if (compare < 0) { + node_prev = node; + dir = 0; + node = node->left; + rightmost = 0; + } else if (compare == 0) { + break; /* We found our node */ + } else { + /* Otherwise, we want the right node, and continue iteration */ + node_prev = node; + dir = 1; + node = node->right; + } + } + + /* Case 2 - we didn't find the node, so insert the candidate */ + if (node == NULL) { + if (dir == 0) { + rightmost = 0; + node_prev->left = new_candidate; + } else { + node_prev->right = new_candidate; + } + + new_candidate->parent = node_prev; + + node = new_candidate; + node->color = COLOR_RED; + + if (1 == rightmost) { + tree->rightmost = new_candidate; + } + + /* Rebalance the tree, preserving rb properties */ + __helper_rb_tree_insert_rebalance(tree, node); + } + +done: + /* Return the node we found */ + *value = node; + + return ret; +} + +/** + * Find the minimum of the subtree starting at node + */ +static +struct rb_tree_node *__helper_rb_tree_find_minimum(struct rb_tree_node *node) +{ + struct rb_tree_node *x = node; + + while (x->left != NULL) { + x = x->left; + } + + return x; +} + +static +struct rb_tree_node *__helper_rb_tree_find_maximum(struct rb_tree_node *node) +{ + struct rb_tree_node *x = node; + + while (x->right != NULL) { + x = x->right; + } + + return x; +} + +static +struct rb_tree_node *__helper_rb_tree_find_successor(struct rb_tree_node *node) +{ + struct rb_tree_node *x = node; + + if (x->right != NULL) { + return __helper_rb_tree_find_minimum(x->right); + } + + struct rb_tree_node *y = x->parent; + + while (y != NULL && x == y->right) { + x = y; + y = y->parent; + } + + return y; +} + +static +struct rb_tree_node *__helper_rb_tree_find_predecessor(struct rb_tree_node *node) +{ + struct rb_tree_node *x = node; + + if (x->left != NULL) { + return __helper_rb_tree_find_maximum(x->left); + } + + struct rb_tree_node *y = x->parent; + + while (y != NULL && x == y->left) { + x = y; + y = y->parent; + } + + return y; +} + + +/* Replace x with y, inserting y where x previously was */ +static +void __helper_rb_tree_swap_node(struct rb_tree *tree, + struct rb_tree_node *x, + struct rb_tree_node *y) +{ + struct rb_tree_node *left = x->left; + struct rb_tree_node *right = x->right; + struct rb_tree_node *parent = x->parent; + + y->parent = parent; + + if (parent != NULL) { + if (parent->left == x) { + parent->left = y; + } else { + parent->right = y; + } + } else { + if (tree->root == x) { + tree->root = y; + } + } + + y->right = right; + if (right != NULL) { + right->parent = y; + } + x->right = NULL; + + y->left = left; + if (left != NULL) { + left->parent = y; + } + x->left = NULL; + + y->color = x->color; + x->parent = NULL; +} + +static +void __helper_rb_tree_delete_rebalance(struct rb_tree *tree, + struct rb_tree_node *node, + struct rb_tree_node *parent, + int node_is_left) +{ + struct rb_tree_node *x = node; + struct rb_tree_node *xp = parent; + int is_left = node_is_left; + + while (x != tree->root && (x == NULL || x->color == COLOR_BLACK)) { + struct rb_tree_node *w = is_left ? xp->right : xp->left; /* Sibling */ + + if (w != NULL && w->color == COLOR_RED) { + /* Case 1: */ + w->color = COLOR_BLACK; + xp->color = COLOR_RED; + if (is_left) { + __helper_rotate_left(tree, xp); + } else { + __helper_rotate_right(tree, xp); + } + w = is_left ? xp->right : xp->left; + } + + struct rb_tree_node *wleft = w != NULL ? w->left : NULL; + struct rb_tree_node *wright = w != NULL ? w->right : NULL; + if ( (wleft == NULL || wleft->color == COLOR_BLACK) && + (wright == NULL || wright->color == COLOR_BLACK) ) + { + /* Case 2: */ + if (w != NULL) { + w->color = COLOR_RED; + } + x = xp; + xp = x->parent; + is_left = xp && (x == xp->left); + } else { + if (is_left && (wright == NULL || wright->color == COLOR_BLACK)) { + /* Case 3a: */ + w->color = COLOR_RED; + if (wleft) { + wleft->color = COLOR_BLACK; + } + __helper_rotate_right(tree, w); + w = xp->right; + } else if (!is_left && (wleft == NULL || wleft->color == COLOR_BLACK)) { + /* Case 3b: */ + w->color = COLOR_RED; + if (wright) { + wright->color = COLOR_BLACK; + } + __helper_rotate_left(tree, w); + w = xp->left; + } + + /* Case 4: */ + wleft = w->left; + wright = w->right; + + w->color = xp->color; + xp->color = COLOR_BLACK; + + if (is_left && wright != NULL) { + wright->color = COLOR_BLACK; + __helper_rotate_left(tree, xp); + } else if (!is_left && wleft != NULL) { + wleft->color = COLOR_BLACK; + __helper_rotate_right(tree, xp); + } + x = tree->root; + } + } + + if (x != NULL) { + x->color = COLOR_BLACK; + } +} + +rb_result_t rb_tree_remove(struct rb_tree *tree, + struct rb_tree_node *node) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(node != NULL); + + struct rb_tree_node *y; + + + if (node->left == NULL || node->right == NULL) { + y = node; + if (node == tree->rightmost) { + /* The new rightmost item is our successor */ + tree->rightmost = __helper_rb_tree_find_predecessor(node); + } + } else { + y = __helper_rb_tree_find_successor(node); + } + + struct rb_tree_node *x, *xp; + + if (y->left != NULL) { + x = y->left; + } else { + x = y->right; + } + + if (x != NULL) { + x->parent = y->parent; + xp = x->parent; + } else { + xp = y->parent; + } + + int is_left = 0; + if (y->parent == NULL) { + tree->root = x; + xp = NULL; + } else { + struct rb_tree_node *yp = y->parent; + if (y == yp->left) { + yp->left = x; + is_left = 1; + } else { + yp->right = x; + is_left = 0; + } + } + + int y_color = y->color; + + /* Swap in the node */ + if (y != node) { + __helper_rb_tree_swap_node(tree, node, y); + if (xp == node) { + xp = y; + } + } + + if (y_color == COLOR_BLACK) { + __helper_rb_tree_delete_rebalance(tree, x, xp, is_left); + } + + node->parent = NULL; + node->left = NULL; + node->right = NULL; + + return ret; +} + +/** + * \mainpage An Intrusive Red-Black Tree + * + * The goal of this implementation is to be both easy to use, but also + * sufficiently powerful enough to perform all the operations that one might + * typically want to do with a red-black tree. + * + * To make a structure usable with an rb_tree, you must embed the structure + * struct rb_tree_node. + * \code + struct my_sample_struct { + const char *name; + int data; + struct rb_tree_node rnode; + }; + * \endcode + * \note `rb_tree_node` need not be initialized -- it is initialized during the + * insertion operation. + * + * Next, you must declare a comparison function that, given a pointer to two + * keys, returns a value less than 0 if the left-hand side is less than the + * right-hand side, 0 if the left-hand side is equal to the right-hand side, + * or greater than 0 if the left-hand side is greater than the left-hand side. + * + * A simple example for a string might use the `strcmp(3)` function directly, + * as such: + * + * \code + int my_sample_struct_compare_keys(void *lhs, void *rhs) + { + return strcmp((const char *)lhs, (const char *)rhs); + } + * \endcode + * \note the function you create for your comparison function must conform to + * rb_cmp_func_t, or the compiler will generate a warning and, if you're + * unlucky, you will fail catastrophically at a later date. + * + * Then, to create a new, empty red-black tree, call rb_tree_new, as so: + * \code + struct rb_tree my_rb_tree; + if (rb_tree_new(&my_rb_tree, my_sample_struct_compare_keys) != RB_OK) { + exit(EXIT_FAILURE); + } + * \endcode + * + * Items can be added to the red-black tree using the function `rb_tree_insert`: + * \code + struct my_sample_struct node = { .name = "test1", .date = 42 }; + if (rb_tree_insert(&my_rb_tree, node.name, &(node.rnode)) != RB_OK) { + printf("Failed to insert a node into the RB tree!\n"); + exit(EXIT_FAILURE); + } + * \endcode + * + * \see rb_tree + * \see rb_tree_node + * \see rb_functions + * \see rbtree.h + */ + diff --git a/src/fluent-bit/lib/monkey/deps/rbtree/rbtree.h b/src/fluent-bit/lib/monkey/deps/rbtree/rbtree.h new file mode 100644 index 000000000..e85b274c6 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/rbtree/rbtree.h @@ -0,0 +1,459 @@ +#ifndef __INCLUDED_RBTREE_H__ +#define __INCLUDED_RBTREE_H__ + +/** \file rbtree.h + * Declaration of associated structures and functions for a simple, intrusive + * red-black tree implementation. + */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include +#include + +/** \defgroup rb_tree_compiler_prims Compiler Abstractions + * Primitives used to abstract compiler-specific syntax for common details used in + * providing hints to the compiler for optimization or linker details. + * @{ + */ + +/** + * Macro to check if a given assertion about an argument is true + */ +#define RB_ASSERT_ARG(x) \ + do { \ + if (RB_UNLIKELY(!(x))) { \ + assert(#x && 0); \ + return RB_BAD_ARG; \ + } \ + } while (0) + +/** + * The tagged branch is unlikely to be taken + */ +#ifdef _WIN32 +#define RB_UNLIKELY(x) x +#else +#define RB_UNLIKELY(x) __builtin_expect(!!(x), 0) +#endif +/**@}*/ + +/** \defgroup rb_tree_state State Structures + * Structures that are used to represent state of a red-black tree, including the + * state of the tree itself, comparison functions used to determine how the tree + * is to be traversed, and representations of red-black tree nodes themselves. + * @{ + */ + +/** + * Structure that represents a node in a red-black tree. Embed this in your own + * structure in order to add your structure to the given red-black tree. + * Users of the rb_tree_node would embed it something like + * \code{.c} + struct my_sample_struct { + char *name; + int data; + struct rb_tree_node rnode; + }; + * \endcode + * + * \note No user of `struct rb_tree_node` should ever modify or inspect any + * members of the structure. + */ +struct rb_tree_node { + /** + * The left child (`NULL` if empty) + */ + struct rb_tree_node *left; + + /** + * The right child (`NULL` if empty) + */ + struct rb_tree_node *right; + + /** + * The parent of this node (`NULL` if at root) + */ + struct rb_tree_node *parent; + + /** + * The key for this node + */ + const void *key; + + /** + * The color of the node + */ + int color; +}; + +/** + * Pointer to a function to compare two keys, and returns as follows: + * - (0, +inf] if lhs > rhs + * - 0 if lhs == rhs + * - [-inf, 0) if lhs < rhs + */ +typedef int (*rb_cmp_func_t)(const void *lhs, const void *rhs); + +/** + * Pointer to a comparison function that allows passing along state. + * Return values are interpreted as follows: + * (0, +inf] if lhs > rhs + * 0 if lhs == rhs + * [-inf, 0) if lhs < rhs + */ +typedef int (*rb_cmp_func_ex_t)(void *state, const void *lhs, const void *rhs); + +/** + * Structure representing an RB tree's associated state. Contains all + * the information needed to manage the lifecycle of a RB tree. + * \note Typically users should not directly manipulate the structure, + * but rather use the provided accessor functions. + */ +struct rb_tree { + /** + * The root of the tree + */ + struct rb_tree_node *root; + + /** + * Predicate used for traversing the tree + */ + rb_cmp_func_ex_t compare; + + /** + * The right-most node of the rb-tree + */ + struct rb_tree_node *rightmost; + + /** + * Private state that can be used by the rb-tree owner + */ + void *state; +}; + +/**@} rb_tree_state */ + +/** \defgroup rb_result Function Results and Error Handling + * @{ + */ +/** \typedef rb_result_t + * Value of a returned result code from a red-black tree function. + */ +typedef int rb_result_t; + +/** \defgroup rb_result_code Result Codes + * Error codes that can be returned from any function that returns an rb_result_t. + * @{ + */ + +/** + * Function was successful + */ +#define RB_OK 0x0 +/** + * Element was not found + */ +#define RB_NOT_FOUND 0x1 +/** + * Bad argument provided to function (typically unexpected NULL) + */ +#define RB_BAD_ARG 0x2 +/** + * Node is a duplicate of an existing node + */ +#define RB_DUPLICATE 0x3 + +/**@} rb_result_code */ +/**@} rb_result */ + +/** \brief Helper to get a pointer to a containing structure. + * Given a pointer to an rb_tree_node, a target type and a member name, + * return a pointer to the structure containing the `struct rb_tree_node`. + * \code{.c} + struct sample { + const char *name; + struct rb_tree_node node; + }; + + void test(void) + { + struct sample samp = { .name = "Test 123" }; + struct rb_tree_node *samp_node = &(samp.node); + struct sample *samp2 = RB_CONTAINER_OF(samp_node, struct sample, node); + + assert(&samp == samp2); + } + * \endcode + * \param x The pointer to the node + * \param type The type of the containing structure + * \param memb The name of the `struct rb_tree_node` in the containing structure + * \return Pointer to the containing structure of the specified type + */ +#define RB_CONTAINER_OF(x, type, memb) \ + ({ \ + const __typeof__( ((type *)0)->memb ) *__member = (x); \ + (type *)( (char *)__member - __offsetof__(type, memb) ); \ + }) + + +/** \defgroup rb_functions Functions for Manipulating Red-Black Trees + * All functions associated with manipulating Red-Black trees using `struct rb_tree`, + * inluding lifecycle functions and member manipulation and state checking functions. + * @{ + */ + +/** + * \brief Construct a new, empty red-black tree, with extended state + * Given a region of memory at least the size of a struct rb_tree to + * store the red-black tree metadata, update it to contain an initialized, empty + * red-black tree, with given private state. + * \param tree Pointer to the new tree. + * \param compare Function used to traverse the tree. + * \param state The private state to be passed to the compare function + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_new_ex(struct rb_tree *tree, rb_cmp_func_ex_t compare, void *state); + +/** + * \brief Construct a new, empty red-black tree. + * Given a region of memory at least the size of a struct rb_tree to + * store the red-black tree metadata, update it to contain an initialized, empty + * red-black tree. + * \param tree Pointer to the new tree. + * \param compare Function used to traverse the tree. + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_new(struct rb_tree *tree, + rb_cmp_func_t compare); + +/** + * \brief Destroy a Red-Black tree. + * Clean up the state structure, clearing out the state of the tree + * so that it no longer can be used. + * \note Assumes that external callers will deallocate all nodes through + * some application-specific mechanism. + * \param tree The reference to the pointer to the tree itself. + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_destroy(struct rb_tree *tree); + +/** + * \brief Check if an red-black tree is empty (has no nodes). + * If no nodes are present, returns a non-zero value in `is_empty` -- returns + * 0 if there are nodes present. + * \param tree The tree to check + * \param is_empty nonzero on true, 0 otherwise + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_empty(struct rb_tree *tree, int *is_empty); + +/** + * \brief Find a node in the Red-Black tree given the specified key. + * Given a key, search the RB-tree iteratively until the specified key is found. + * This traversal is in O(log n) time, per the properties of a binary search tree. + * \param tree The RB-tree to search + * \param key The key to search for + * \param value a reference to a pointer to receive the pointer to the rb_tree_node if key is found + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_find(struct rb_tree *tree, + const void *key, + struct rb_tree_node **value); + +/** + * \brief Insert a node into the tree. + * Given a node and key, insert the node into the red-black tree and rebalance + * the tree if appropriate. Insertion is O(log n) time, with two tree traversals + * possible -- one for insertion (guaranteed) and one for rebalancing. + * \param tree the RB tree to insert the node into + * \param key The key for the node (must live as long as the node itself is in the tree) + * \param node the node to be inserted into the tree + * \return RB_OK on sucess, an error code otherwise + */ +rb_result_t rb_tree_insert(struct rb_tree *tree, + const void *key, + struct rb_tree_node *node); + +/** + * \brief Remove the specified node from the Red-Black tree. + * Given a pointer to the node, splice the node out of the tree, then, if applicable + * rebalance the tree so the Red-Black properties are maintained. + * \param tree The tree we want to remove the node from + * \param node The the node we want to remove + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_remove(struct rb_tree *tree, + struct rb_tree_node *node); + +/** + * \brief Find a node. If not found, insert the candidate. + * Find a node with the given key. If the node is found, return it by + * reference, without modifying the tree. If the node is not found, + * insert the provided candidate node. + * \note This function always will return in *value the node inserted + * or the existing node. If you want to check if the candidate + * node was inserted, check if `*value == new_candidate` + * + * \param tree The tree in question + * \param key The key to search for + * \param new_candidate The candidate node to insert + * \param value The value at the given location + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_find_or_insert(struct rb_tree *tree, + void *key, + struct rb_tree_node *new_candidate, + struct rb_tree_node **value); + +/** + * \brief Find a node. If not found, insert the candidate. + * Find a node with the given key. If the node is found, return it by + * reference, without modifying the tree. If the node is not found, + * insert the provided candidate node. + * \note This function always will return in *value the node inserted + * or the existing node. If you want to check if the candidate + * node was inserted, check if `*value == new_candidate` + * + * \param tree The tree in question + * \param key The key to search for + * \param new_candidate The candidate node to insert + * \param value The value at the given location + * + * \return RB_OK on success, an error code otherwise + */ +rb_result_t rb_tree_find_or_insert(struct rb_tree *tree, + void *key, + struct rb_tree_node *new_candidate, + struct rb_tree_node **value); +/** + * \brief Get the rightmost (greatest relative to predicate) node. + * Return the rightmost (i.e. greatest relative to predicate) node of the Red-Black tree. + */ +static inline +rb_result_t rb_tree_get_rightmost(struct rb_tree *tree, + struct rb_tree_node **rightmost) +{ + if ( (NULL == tree) || (NULL == rightmost) ) { + return RB_BAD_ARG; + } + + *rightmost = tree->rightmost; + + return RB_OK; +} + + +/** + * Find the minimum of the given tree/subtree rooted at the given node. + */ +static inline +rb_result_t __rb_tree_find_minimum(struct rb_tree_node *root, + struct rb_tree_node **min) +{ + struct rb_tree_node *x = root; + + while (x->left != NULL) { + x = x->left; + } + + *min = x; + + return RB_OK; +} + +/** + * Find the maximum of the given tree/subtree rooted at the given node. + */ +static inline +rb_result_t __rb_tree_find_maximum(struct rb_tree_node *root, + struct rb_tree_node **max) +{ + struct rb_tree_node *x = root; + + while (x->right != NULL) { + x = x->right; + } + + *max = x; + + return RB_OK; +} + +/** + * Find the successor (greater than, relative to predicate) node of the given node. + */ +static inline +rb_result_t rb_tree_find_successor(struct rb_tree *tree, + struct rb_tree_node *node, + struct rb_tree_node **successor) +{ + rb_result_t ret = RB_OK; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(node != NULL); + RB_ASSERT_ARG(successor != NULL); + + struct rb_tree_node *x = node; + + if (x->right != NULL) { + __rb_tree_find_minimum(x->right, successor); + goto done; + } + + struct rb_tree_node *y = x->parent; + + while (y != NULL && (x == y->right)) { + x = y; + y = y->parent; + } + + *successor = y; + +done: + return ret; +} + +/** + * Find the predecessor (less than, relative to predicate) node of the given node. + */ +static inline +rb_result_t rb_tree_find_predecessor(struct rb_tree *tree, + struct rb_tree_node *node, + struct rb_tree_node **pred) +{ + rb_result_t ret = RB_OK; + struct rb_tree_node *x = node; + + RB_ASSERT_ARG(tree != NULL); + RB_ASSERT_ARG(node != NULL); + RB_ASSERT_ARG(pred != NULL); + + if (x->left != NULL) { + __rb_tree_find_maximum(x->left, pred); + goto done; + } + + struct rb_tree_node *y = x->parent; + + while (y != NULL && (x == y->left)) { + x = y; + y = y->parent; + } + + *pred = y; + +done: + return ret; +} + +/**@} rb_functions */ + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + +#endif /* __INCLUDED_RBTREE_H__ */ + diff --git a/src/fluent-bit/lib/monkey/deps/regex/CMakeLists.txt b/src/fluent-bit/lib/monkey/deps/regex/CMakeLists.txt new file mode 100644 index 000000000..ce1e9a3e6 --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/regex/CMakeLists.txt @@ -0,0 +1,5 @@ +set(src + re.c + ) + +add_library(regex STATIC ${src}) diff --git a/src/fluent-bit/lib/monkey/deps/regex/re.c b/src/fluent-bit/lib/monkey/deps/regex/re.c new file mode 100644 index 000000000..a93177f0a --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/regex/re.c @@ -0,0 +1,515 @@ +/* + * + * Mini regex-module inspired by Rob Pike's regex code described in: + * + * http://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html + * + * + * + * Supports: + * --------- + * '.' Dot, matches any character + * '^' Start anchor, matches beginning of string + * '$' End anchor, matches end of string + * '*' Asterisk, match zero or more (greedy) + * '+' Plus, match one or more (greedy) + * '?' Question, match zero or one (non-greedy) + * '[abc]' Character class, match if one of {'a', 'b', 'c'} + * '[^abc]' Inverted class, match if NOT one of {'a', 'b', 'c'} -- NOTE: feature is currently broken! + * '[a-zA-Z]' Character ranges, the character set of the ranges { a-z | A-Z } + * '\s' Whitespace, \t \f \r \n \v and spaces + * '\S' Non-whitespace + * '\w' Alphanumeric, [a-zA-Z0-9_] + * '\W' Non-alphanumeric + * '\d' Digits, [0-9] + * '\D' Non-digits + * + * + */ + + + +#include "re.h" +#include +#include + +/* Private function declarations: */ +static int matchpattern(regex_t* pattern, const char* text, int* matchlength); +static int matchcharclass(char c, const char* str); +static int matchstar(regex_t p, regex_t* pattern, const char* text, int* matchlength); +static int matchplus(regex_t p, regex_t* pattern, const char* text, int* matchlength); +static int matchone(regex_t p, char c); +static int matchdigit(char c); +static int matchalpha(char c); +static int matchwhitespace(char c); +static int matchmetachar(char c, const char* str); +static int matchrange(char c, const char* str); +static int matchdot(char c); +static int ismetachar(char c); + + + +/* Public functions: */ +int re_match(const char* pattern, const char* text, int* matchlength) +{ + return re_matchp(re_compile(pattern), text, matchlength); +} + +int re_matchp(re_t pattern, const char* text, int* matchlength) +{ + int matchlength_; + + if(NULL == matchlength) + { + matchlength = &matchlength_; + } + + *matchlength = 0; + if (pattern != 0) + { + if (pattern[0].type == BEGIN) + { + return ((matchpattern(&pattern[1], text, matchlength)) ? 0 : -1); + } + else + { + int idx = -1; + + do + { + idx += 1; + + if (matchpattern(pattern, text, matchlength)) + { + if (text[0] == '\0') + return -1; + + return idx; + } + } + while (*text++ != '\0'); + } + } + return -1; +} + +re_t re_compile(const char* pattern) +{ + /* The sizes of the two static arrays below substantiates the static RAM usage of this module. + MAX_REGEXP_OBJECTS is the max number of symbols in the expression. + MAX_CHAR_CLASS_LEN determines the size of buffer for chars in all char-classes in the expression. */ + static regex_t re_compiled[MAX_REGEXP_OBJECTS]; + static unsigned char ccl_buf[MAX_CHAR_CLASS_LEN]; + int ccl_bufidx = 1; + + char c; /* current char in pattern */ + int i = 0; /* index into pattern */ + int j = 0; /* index into re_compiled */ + + while (pattern[i] != '\0' && (j+1 < MAX_REGEXP_OBJECTS)) + { + c = pattern[i]; + + switch (c) + { + /* Meta-characters: */ + case '^': { re_compiled[j].type = BEGIN; } break; + case '$': { re_compiled[j].type = END; } break; + case '.': { re_compiled[j].type = DOT; } break; + case '*': { re_compiled[j].type = STAR; } break; + case '+': { re_compiled[j].type = PLUS; } break; + case '?': { re_compiled[j].type = QUESTIONMARK; } break; +/* case '|': { re_compiled[j].type = BRANCH; } break; <-- not working properly */ + + /* Escaped character-classes (\s \w ...): */ + case '\\': + { + if (pattern[i+1] != '\0') + { + /* Skip the escape-char '\\' */ + i += 1; + /* ... and check the next */ + switch (pattern[i]) + { + /* Meta-character: */ + case 'd': { re_compiled[j].type = DIGIT; } break; + case 'D': { re_compiled[j].type = NOT_DIGIT; } break; + case 'w': { re_compiled[j].type = ALPHA; } break; + case 'W': { re_compiled[j].type = NOT_ALPHA; } break; + case 's': { re_compiled[j].type = WHITESPACE; } break; + case 'S': { re_compiled[j].type = NOT_WHITESPACE; } break; + + /* Escaped character, e.g. '.' or '$' */ + default: + { + re_compiled[j].type = RE_CHAR; + re_compiled[j].u.ch = pattern[i]; + } break; + } + } + /* '\\' as last char in pattern -> invalid regular expression. */ +/* + else + { + re_compiled[j].type = RE_CHAR; + re_compiled[j].ch = pattern[i]; + } +*/ + } break; + + /* Character class: */ + case '[': + { + /* Remember where the char-buffer starts. */ + int buf_begin = ccl_bufidx; + + /* Look-ahead to determine if negated */ + if (pattern[i+1] == '^') + { + re_compiled[j].type = INV_CHAR_CLASS; + i += 1; /* Increment i to avoid including '^' in the char-buffer */ + if (pattern[i+1] == 0) /* incomplete pattern, missing non-zero char after '^' */ + { + return 0; + } + } + else + { + re_compiled[j].type = CHAR_CLASS; + } + + /* Copy characters inside [..] to buffer */ + while ( (pattern[++i] != ']') + && (pattern[i] != '\0')) /* Missing ] */ + { + if (pattern[i] == '\\') + { + if (ccl_bufidx >= MAX_CHAR_CLASS_LEN - 1) + { + //fputs("exceeded internal buffer!\n", stderr); + return 0; + } + if (pattern[i+1] == 0) /* incomplete pattern, missing non-zero char after '\\' */ + { + return 0; + } + ccl_buf[ccl_bufidx++] = pattern[i++]; + } + else if (ccl_bufidx >= MAX_CHAR_CLASS_LEN) + { + //fputs("exceeded internal buffer!\n", stderr); + return 0; + } + ccl_buf[ccl_bufidx++] = pattern[i]; + } + if (ccl_bufidx >= MAX_CHAR_CLASS_LEN) + { + /* Catches cases such as [00000000000000000000000000000000000000][ */ + //fputs("exceeded internal buffer!\n", stderr); + return 0; + } + /* Null-terminate string end */ + ccl_buf[ccl_bufidx++] = 0; + re_compiled[j].u.ccl = &ccl_buf[buf_begin]; + } break; + + /* Other characters: */ + default: + { + re_compiled[j].type = RE_CHAR; + re_compiled[j].u.ch = c; + } break; + } + /* no buffer-out-of-bounds access on invalid patterns - see https://github.com/kokke/tiny-regex-c/commit/1a279e04014b70b0695fba559a7c05d55e6ee90b */ + if (pattern[i] == 0) + { + return 0; + } + + i += 1; + j += 1; + } + /* 'UNUSED' is a sentinel used to indicate end-of-pattern */ + re_compiled[j].type = UNUSED; + + return (re_t) re_compiled; +} + +void re_print(regex_t* pattern) +{ + const char* types[] = { "UNUSED", "DOT", "BEGIN", "END", "QUESTIONMARK", "STAR", "PLUS", "RE_CHAR", "CHAR_CLASS", "INV_CHAR_CLASS", "DIGIT", "NOT_DIGIT", "ALPHA", "NOT_ALPHA", "WHITESPACE", "NOT_WHITESPACE", "BRANCH" }; + + int i; + int j; + char c; + for (i = 0; i < MAX_REGEXP_OBJECTS; ++i) + { + if (pattern[i].type == UNUSED) + { + break; + } + + printf("type: %s", types[pattern[i].type]); + if (pattern[i].type == CHAR_CLASS || pattern[i].type == INV_CHAR_CLASS) + { + printf(" ["); + for (j = 0; j < MAX_CHAR_CLASS_LEN; ++j) + { + c = pattern[i].u.ccl[j]; + if ((c == '\0') || (c == ']')) + { + break; + } + printf("%c", c); + } + printf("]"); + } + else if (pattern[i].type == RE_CHAR) + { + printf(" '%c'", pattern[i].u.ch); + } + printf("\n"); + } +} + + + +/* Private functions: */ +static int matchdigit(char c) +{ + return isdigit(c); +} +static int matchalpha(char c) +{ + return isalpha(c); +} +static int matchwhitespace(char c) +{ + return isspace(c); +} +static int matchalphanum(char c) +{ + return ((c == '_') || matchalpha(c) || matchdigit(c)); +} +static int matchrange(char c, const char* str) +{ + return ( (c != '-') + && (str[0] != '\0') + && (str[0] != '-') + && (str[1] == '-') + && (str[2] != '\0') + && ( (c >= str[0]) + && (c <= str[2]))); +} +static int matchdot(char c) +{ +#if defined(RE_DOT_MATCHES_NEWLINE) && (RE_DOT_MATCHES_NEWLINE == 1) + (void)c; + return 1; +#else + return c != '\n' && c != '\r'; +#endif +} +static int ismetachar(char c) +{ + return ((c == 's') || (c == 'S') || (c == 'w') || (c == 'W') || (c == 'd') || (c == 'D')); +} + +static int matchmetachar(char c, const char* str) +{ + switch (str[0]) + { + case 'd': return matchdigit(c); + case 'D': return !matchdigit(c); + case 'w': return matchalphanum(c); + case 'W': return !matchalphanum(c); + case 's': return matchwhitespace(c); + case 'S': return !matchwhitespace(c); + default: return (c == str[0]); + } +} + +static int matchcharclass(char c, const char* str) +{ + do + { + if (matchrange(c, str)) + { + return 1; + } + else if (str[0] == '\\') + { + /* Escape-char: increment str-ptr and match on next char */ + str += 1; + if (matchmetachar(c, str)) + { + return 1; + } + else if ((c == str[0]) && !ismetachar(c)) + { + return 1; + } + } + else if (c == str[0]) + { + if (c == '-') + { + return ((str[-1] == '\0') || (str[1] == '\0')); + } + else + { + return 1; + } + } + } + while (*str++ != '\0'); + + return 0; +} + +static int matchone(regex_t p, char c) +{ + switch (p.type) + { + case DOT: return matchdot(c); + case CHAR_CLASS: return matchcharclass(c, (const char*)p.u.ccl); + case INV_CHAR_CLASS: return !matchcharclass(c, (const char*)p.u.ccl); + case DIGIT: return matchdigit(c); + case NOT_DIGIT: return !matchdigit(c); + case ALPHA: return matchalphanum(c); + case NOT_ALPHA: return !matchalphanum(c); + case WHITESPACE: return matchwhitespace(c); + case NOT_WHITESPACE: return !matchwhitespace(c); + default: return (p.u.ch == c); + } +} + +static int matchstar(regex_t p, regex_t* pattern, const char* text, int* matchlength) +{ + int prelen = *matchlength; + const char* prepoint = text; + while ((text[0] != '\0') && matchone(p, *text)) + { + text++; + (*matchlength)++; + } + while (text >= prepoint) + { + if (matchpattern(pattern, text--, matchlength)) + return 1; + (*matchlength)--; + } + + *matchlength = prelen; + return 0; +} + +static int matchplus(regex_t p, regex_t* pattern, const char* text, int* matchlength) +{ + const char* prepoint = text; + while ((text[0] != '\0') && matchone(p, *text)) + { + text++; + (*matchlength)++; + } + while (text > prepoint) + { + if (matchpattern(pattern, text--, matchlength)) + return 1; + (*matchlength)--; + } + + return 0; +} + +static int matchquestion(regex_t p, regex_t* pattern, const char* text, int* matchlength) +{ + if (p.type == UNUSED) + return 1; + if (matchpattern(pattern, text, matchlength)) + return 1; + if (*text && matchone(p, *text++)) + { + if (matchpattern(pattern, text, matchlength)) + { + (*matchlength)++; + return 1; + } + } + return 0; +} + + +#if 0 + +/* Recursive matching */ +static int matchpattern(regex_t* pattern, const char* text, int *matchlength) +{ + int pre = *matchlength; + if ((pattern[0].type == UNUSED) || (pattern[1].type == QUESTIONMARK)) + { + return matchquestion(pattern[1], &pattern[2], text, matchlength); + } + else if (pattern[1].type == STAR) + { + return matchstar(pattern[0], &pattern[2], text, matchlength); + } + else if (pattern[1].type == PLUS) + { + return matchplus(pattern[0], &pattern[2], text, matchlength); + } + else if ((pattern[0].type == END) && pattern[1].type == UNUSED) + { + return text[0] == '\0'; + } + else if ((text[0] != '\0') && matchone(pattern[0], text[0])) + { + (*matchlength)++; + return matchpattern(&pattern[1], text+1); + } + else + { + *matchlength = pre; + return 0; + } +} + +#else + +/* Iterative matching */ +static int matchpattern(regex_t* pattern, const char* text, int* matchlength) +{ + int pre = *matchlength; + do + { + if ((pattern[0].type == UNUSED) || (pattern[1].type == QUESTIONMARK)) + { + return matchquestion(pattern[0], &pattern[2], text, matchlength); + } + else if (pattern[1].type == STAR) + { + return matchstar(pattern[0], &pattern[2], text, matchlength); + } + else if (pattern[1].type == PLUS) + { + return matchplus(pattern[0], &pattern[2], text, matchlength); + } + else if ((pattern[0].type == END) && pattern[1].type == UNUSED) + { + return (text[0] == '\0'); + } +/* Branching is not working properly + else if (pattern[1].type == BRANCH) + { + return (matchpattern(pattern, text) || matchpattern(&pattern[2], text)); + } +*/ + (*matchlength)++; + } + while ((text[0] != '\0') && matchone(*pattern++, *text++)); + + *matchlength = pre; + return 0; +} + +#endif diff --git a/src/fluent-bit/lib/monkey/deps/regex/re.h b/src/fluent-bit/lib/monkey/deps/regex/re.h new file mode 100644 index 000000000..34363e86b --- /dev/null +++ b/src/fluent-bit/lib/monkey/deps/regex/re.h @@ -0,0 +1,87 @@ +/* + * + * Mini regex-module inspired by Rob Pike's regex code described in: + * + * http://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html + * + * + * + * Supports: + * --------- + * '.' Dot, matches any character + * '^' Start anchor, matches beginning of string + * '$' End anchor, matches end of string + * '*' Asterisk, match zero or more (greedy) + * '+' Plus, match one or more (greedy) + * '?' Question, match zero or one (non-greedy) + * '[abc]' Character class, match if one of {'a', 'b', 'c'} + * '[^abc]' Inverted class, match if NOT one of {'a', 'b', 'c'} -- NOTE: feature is currently broken! + * '[a-zA-Z]' Character ranges, the character set of the ranges { a-z | A-Z } + * '\s' Whitespace, \t \f \r \n \v and spaces + * '\S' Non-whitespace + * '\w' Alphanumeric, [a-zA-Z0-9_] + * '\W' Non-alphanumeric + * '\d' Digits, [0-9] + * '\D' Non-digits + * + * + */ + +#ifndef _TINY_REGEX_C +#define _TINY_REGEX_C + + +#ifndef RE_DOT_MATCHES_NEWLINE +/* Define to 0 if you DON'T want '.' to match '\r' + '\n' */ +#define RE_DOT_MATCHES_NEWLINE 1 +#endif + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* Definitions: */ + +/* This was incremented because everything counts as a symbol, even literals and because + * of that the longer regular expressions matched wrong input text because they were only + * partially compiled + */ +#define MAX_REGEXP_OBJECTS 512 /* Max number of regex symbols in expression. */ +#define MAX_CHAR_CLASS_LEN 40 /* Max length of character-class buffer in. */ + + +enum { UNUSED, DOT, BEGIN, END, QUESTIONMARK, STAR, PLUS, RE_CHAR, CHAR_CLASS, INV_CHAR_CLASS, DIGIT, NOT_DIGIT, ALPHA, NOT_ALPHA, WHITESPACE, NOT_WHITESPACE, /* BRANCH */ }; + +typedef struct regex_t +{ + unsigned char type; /* CHAR, STAR, etc. */ + union + { + unsigned char ch; /* the character itself */ + unsigned char* ccl; /* OR a pointer to characters in class */ + } u; +} regex_t; + +/* Typedef'd pointer to get abstract datatype. */ +typedef struct regex_t* re_t; + +#define REGEXP_SIZE (MAX_REGEXP_OBJECTS * sizeof(struct regex_t)) + +/* Compile regex string pattern to a regex_t-array. */ +re_t re_compile(const char* pattern); + + +/* Find matches of the compiled pattern inside text. */ +int re_matchp(re_t pattern, const char* text, int* matchlength); + + +/* Find matches of the txt pattern inside text (will compile automatically first). */ +int re_match(const char* pattern, const char* text, int* matchlength); + + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _TINY_REGEX_C */ diff --git a/src/fluent-bit/lib/monkey/examples/README b/src/fluent-bit/lib/monkey/examples/README new file mode 100644 index 000000000..bbb5b22c4 --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/README @@ -0,0 +1 @@ +These sample files show the usage of the Monkey library. They're under the GPLv2. diff --git a/src/fluent-bit/lib/monkey/examples/hello.c b/src/fluent-bit/lib/monkey/examples/hello.c new file mode 100644 index 000000000..d54c3dde7 --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/hello.c @@ -0,0 +1,68 @@ +/* Monkey HTTP Daemon + * ------------------ + * Copyright (C) 2012, Lauri Kasanen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +/* + * This example shows how to start the server, and point it to /tmp. + * It also creates /tmp/index.html. +*/ + +static void write_index() { + + const char *path = "/tmp/index.html"; + + FILE *f = fopen(path, "w"); + if (!f) exit(1); + + fprintf(f, "

    Hello Monkey

    "); + + fclose(f); +} + +int main() { + + int ret; + + write_index(); + + // All defaults. Bind to all interfaces, port 2001, default plugins, /tmp. + // No callbacks are used. + mklib_ctx ctx = mklib_init(NULL, 0, 0, "/tmp"); + if (!ctx) return 1; + + // The default has no index files, let's set index.html as one. + ret = mklib_config(ctx, MKC_INDEXFILE, "index.html", NULL); + if (!ret) return 1; + + // Start the server. + mklib_start(ctx); + + // I'm now free to do my own things. I'm just going to wait for a keypress. + printf("All set and running! Visit me, I default to localhost:2001.\n"); + printf("Press a key to exit.\n"); + getchar(); + + mklib_stop(ctx); + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/examples/hello.py b/src/fluent-bit/lib/monkey/examples/hello.py new file mode 100644 index 000000000..bf4b5becd --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/hello.py @@ -0,0 +1,12 @@ +import monkey + +f = open('/tmp/index.html', 'w') +f.write("

    Hello Monkey

    ") +f.close() + +monkey.init(None, 0, 0, '/tmp/') +monkey.configure(indexfile='index.html') + +monkey.start() +raw_input("Press enter to stop the server...") +monkey.stop() diff --git a/src/fluent-bit/lib/monkey/examples/image.h b/src/fluent-bit/lib/monkey/examples/image.h new file mode 100644 index 000000000..31b4ba992 --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/image.h @@ -0,0 +1,256 @@ +#ifndef MONKEY_HEAD_PNG_H +#define MONKEY_HEAD_PNG_H +static const unsigned char monkey_head_png[] = { +0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, +0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x28, +0x08, 0x06, 0x00, 0x00, 0x00, 0xb8, 0x87, 0x79, 0x71, 0x00, 0x00, 0x00, +0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, +0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x03, +0x2c, 0x00, 0x00, 0x03, 0x2c, 0x01, 0x90, 0x94, 0x1c, 0x83, 0x00, 0x00, +0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, +0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, +0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, +0x00, 0x0b, 0x41, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xc5, 0x99, 0x7b, +0x6c, 0x5b, 0xd7, 0x7d, 0xc7, 0x3f, 0xe7, 0xdc, 0x07, 0x49, 0x51, 0xd4, +0x83, 0xa2, 0x1e, 0xf1, 0x53, 0xb2, 0x5d, 0x5b, 0x88, 0xd5, 0xda, 0xf3, +0x62, 0x59, 0x8d, 0xd7, 0xcc, 0x71, 0x3b, 0x07, 0x1b, 0x86, 0xac, 0x58, +0xe7, 0x24, 0x76, 0x92, 0xc2, 0x49, 0x80, 0x60, 0x6b, 0xd7, 0x17, 0x32, +0x14, 0x29, 0xda, 0x6d, 0x19, 0xba, 0x66, 0xb3, 0xb7, 0x2e, 0xd8, 0x30, +0x2c, 0x59, 0xff, 0x58, 0xb2, 0xba, 0xb1, 0x9b, 0x64, 0xc1, 0x90, 0xc4, +0x49, 0xe7, 0x2c, 0xb6, 0xe1, 0x24, 0xae, 0x15, 0xcb, 0xad, 0xe3, 0x34, +0x7e, 0x49, 0xab, 0x6c, 0xbd, 0xac, 0x07, 0x25, 0x51, 0x12, 0x25, 0x8a, +0xe4, 0xe5, 0xbd, 0x67, 0xd7, 0x67, 0xa2, 0x4a, 0x50, 0x6c, 0x2a, 0xa7, +0x5e, 0xfb, 0x11, 0xbe, 0x38, 0xc0, 0xbd, 0xc4, 0xe5, 0xf7, 0x7b, 0xce, +0xef, 0x77, 0xcf, 0xa5, 0xae, 0x50, 0x4a, 0x71, 0xa3, 0x88, 0xbf, 0xd0, +0xda, 0x80, 0xc3, 0xdf, 0x48, 0x41, 0xab, 0x82, 0x25, 0x28, 0x2a, 0x10, +0x48, 0xc0, 0x05, 0xd2, 0x40, 0x52, 0x08, 0xde, 0x12, 0x4a, 0x3c, 0x11, +0xdd, 0xf5, 0xce, 0x49, 0x6e, 0x00, 0x37, 0x24, 0x40, 0xfc, 0x60, 0xeb, +0x5d, 0x02, 0xfe, 0x0a, 0xc1, 0x3a, 0x14, 0x82, 0xc5, 0x31, 0xeb, 0x29, +0xf6, 0xd7, 0x59, 0x1d, 0x9f, 0x63, 0xa7, 0x72, 0x7f, 0x2d, 0x01, 0x46, +0xff, 0xad, 0x39, 0x42, 0xa8, 0xe2, 0x0d, 0xa0, 0x95, 0x0f, 0x8b, 0x20, +0x25, 0x11, 0xdf, 0x88, 0xde, 0xf3, 0xce, 0x13, 0x7c, 0x10, 0xdf, 0xb9, +0xc5, 0x4a, 0x54, 0x53, 0x56, 0xbd, 0xf3, 0x47, 0x53, 0xa0, 0xd4, 0x2f, +0x1d, 0x60, 0xec, 0xe0, 0x96, 0x4f, 0x7b, 0xa8, 0x83, 0x02, 0x82, 0xdc, +0x00, 0x14, 0x9c, 0xad, 0x35, 0x53, 0xad, 0xec, 0x7c, 0x3f, 0x4b, 0x01, +0x53, 0x2f, 0xdc, 0x1a, 0xcd, 0xe6, 0x72, 0x7b, 0x81, 0x3f, 0x02, 0xaa, +0x80, 0x04, 0x8a, 0x27, 0x62, 0x56, 0xe3, 0xe3, 0xec, 0x7c, 0xde, 0xfd, +0x50, 0x01, 0x46, 0x9f, 0xdd, 0xf2, 0xfb, 0x48, 0xf5, 0x32, 0x20, 0xb8, +0x81, 0x08, 0x18, 0x33, 0x32, 0xc6, 0x2d, 0x55, 0x7b, 0x4e, 0x5e, 0x01, +0x48, 0xbc, 0x70, 0xcb, 0x0a, 0x37, 0x27, 0x4f, 0x02, 0x4b, 0x28, 0x42, +0x08, 0x9e, 0xa9, 0xb9, 0xe7, 0xd4, 0x03, 0xd7, 0x1d, 0x20, 0xf1, 0xfc, +0xe6, 0xad, 0xae, 0x2b, 0x8e, 0x03, 0x06, 0xd7, 0x81, 0x19, 0x6b, 0x21, +0xfc, 0x1b, 0x5f, 0x46, 0xda, 0x15, 0x28, 0x37, 0x8d, 0x33, 0xf8, 0x0e, +0xa9, 0xf3, 0x4f, 0xa3, 0x9c, 0x14, 0x45, 0x64, 0x31, 0xd5, 0xc7, 0x62, +0xe7, 0x4f, 0x77, 0x8d, 0xad, 0xdd, 0xfc, 0x96, 0x82, 0x5b, 0xa1, 0x34, +0x52, 0xca, 0x3b, 0xae, 0x2b, 0x40, 0xef, 0x81, 0x8f, 0x55, 0x97, 0x89, +0xe0, 0x10, 0x60, 0x73, 0x1d, 0x94, 0x7d, 0xf4, 0x61, 0xec, 0xe6, 0xcf, +0x92, 0x4e, 0x67, 0x29, 0x2f, 0x2f, 0x27, 0x8f, 0x97, 0x1e, 0x67, 0xfa, +0xf4, 0x5e, 0xb2, 0x7d, 0xc7, 0x28, 0x62, 0x0a, 0x21, 0x76, 0xa3, 0xd4, +0x21, 0x00, 0x37, 0xe7, 0x31, 0x78, 0x29, 0x8e, 0xeb, 0x7a, 0x34, 0xac, +0xae, 0x21, 0x10, 0xb6, 0xd1, 0x08, 0x0e, 0x5d, 0x57, 0x80, 0xd1, 0x03, +0xad, 0xc7, 0x11, 0xdc, 0xc6, 0x75, 0x60, 0x56, 0xaf, 0x23, 0xbb, 0x69, +0x1f, 0x87, 0x8f, 0x1c, 0x26, 0x5c, 0x1e, 0xe6, 0xdc, 0xb9, 0x73, 0x94, +0x87, 0x22, 0x7c, 0xe5, 0x4b, 0x8f, 0xa0, 0xf1, 0x1c, 0x26, 0x8f, 0x7e, +0x1e, 0x27, 0xfe, 0x2e, 0x45, 0x38, 0x80, 0x05, 0x70, 0xe9, 0xed, 0xcb, +0x8c, 0xf6, 0x24, 0x90, 0x86, 0x20, 0x18, 0x0e, 0x70, 0xf3, 0xf6, 0x35, +0xf9, 0x10, 0x9d, 0xe6, 0xa2, 0xcd, 0x3f, 0xdf, 0x76, 0x7b, 0xb1, 0x79, +0x23, 0xb2, 0x9c, 0xf2, 0x5b, 0xbe, 0x8a, 0x55, 0xbf, 0x19, 0xe5, 0x39, +0x78, 0xa9, 0x11, 0x52, 0xef, 0x3d, 0x45, 0xa6, 0xf7, 0xbf, 0xc9, 0x13, +0xde, 0xf4, 0x15, 0xbe, 0xf0, 0xe8, 0x9f, 0xd1, 0xd2, 0xb2, 0x9e, 0x44, +0x22, 0xc1, 0xf8, 0xf8, 0x38, 0x47, 0x8f, 0x1e, 0x65, 0xc3, 0x86, 0x8d, +0x6c, 0xdf, 0xf6, 0x49, 0x90, 0x16, 0x91, 0x4f, 0xec, 0x65, 0xe2, 0xf0, +0x1e, 0xbc, 0x99, 0x41, 0x0a, 0xd0, 0xe6, 0x27, 0xae, 0x4e, 0x92, 0x1a, +0x9f, 0xa1, 0xbc, 0xc2, 0x46, 0x08, 0x81, 0x94, 0x8a, 0x81, 0xf7, 0x06, +0x58, 0xf5, 0xf1, 0x26, 0x6d, 0xc1, 0x64, 0xb1, 0xb8, 0xde, 0x7e, 0x0a, +0xb0, 0x6f, 0x6a, 0x23, 0x73, 0xf3, 0xd7, 0xd8, 0x7f, 0xf8, 0x55, 0x0c, +0xe3, 0x1c, 0x7d, 0x3d, 0x7d, 0xdc, 0x7b, 0xcf, 0xfd, 0x34, 0x6d, 0xfd, +0x16, 0xc1, 0x8f, 0x7c, 0x86, 0xa9, 0x37, 0x1f, 0x01, 0x69, 0x32, 0x1b, +0x5c, 0xc3, 0xc9, 0x93, 0x3f, 0xa4, 0xb7, 0xb7, 0x87, 0x54, 0x2a, 0xa5, +0x03, 0xb8, 0xae, 0xcb, 0x6b, 0x3f, 0x78, 0x15, 0x1d, 0x00, 0x90, 0x81, +0x6a, 0xca, 0xfd, 0xa0, 0x53, 0x6f, 0x7d, 0xb5, 0x54, 0x63, 0x13, 0x2e, +0xb7, 0xb4, 0x79, 0x21, 0x41, 0x0a, 0x81, 0x61, 0xcc, 0x77, 0xb2, 0x92, +0x2c, 0x82, 0xf1, 0x67, 0xdb, 0x6e, 0x06, 0x96, 0x92, 0x47, 0x5a, 0xa4, +0x1a, 0x1f, 0x64, 0xef, 0x3f, 0xec, 0x63, 0x66, 0x66, 0x9a, 0x9e, 0x9e, +0x1e, 0xba, 0xaf, 0x74, 0xf3, 0x27, 0x5f, 0xfc, 0x63, 0x32, 0x99, 0x0c, +0x56, 0xdd, 0x26, 0x22, 0xb7, 0xfe, 0x35, 0x66, 0xe5, 0x1a, 0xc6, 0xc6, +0xc7, 0xc8, 0xe5, 0x72, 0xfa, 0x33, 0xf1, 0x78, 0x5c, 0x9b, 0x07, 0x58, +0xb1, 0x62, 0x25, 0x73, 0xe8, 0x63, 0x46, 0xc3, 0x56, 0x64, 0x59, 0x1d, +0xc5, 0x98, 0xb6, 0x41, 0xa8, 0xdc, 0xf2, 0x65, 0x13, 0x0a, 0xdb, 0x04, +0xfd, 0x31, 0xe0, 0x1f, 0xd3, 0x28, 0x3a, 0x16, 0x15, 0xc0, 0x93, 0xee, +0xb7, 0x28, 0x20, 0xb4, 0xf6, 0x2e, 0x2e, 0xf6, 0x24, 0x78, 0xfb, 0xc4, +0xdb, 0x1c, 0x3f, 0x7e, 0x9c, 0x63, 0xc7, 0x8e, 0x71, 0xe2, 0xc4, 0x09, +0x2e, 0x5e, 0xbc, 0xc0, 0x2b, 0xaf, 0xbe, 0x0c, 0x80, 0xbd, 0x64, 0x2b, +0x65, 0xeb, 0xf7, 0xd0, 0xd4, 0xd8, 0xc4, 0x7d, 0xbb, 0xef, 0xa7, 0x90, +0xca, 0xca, 0x4a, 0xb6, 0xdd, 0x76, 0x7b, 0xde, 0xbc, 0x0e, 0x98, 0xc9, +0x3a, 0x04, 0xd7, 0xfc, 0xe1, 0xc2, 0x00, 0x96, 0x24, 0x58, 0x66, 0xfb, +0xb2, 0x08, 0x86, 0x2d, 0x02, 0xfe, 0x18, 0x8e, 0x96, 0x01, 0xa0, 0x14, +0x47, 0x4c, 0x16, 0x85, 0xb8, 0xa3, 0xb8, 0x7c, 0xfa, 0x2f, 0x74, 0x32, +0x34, 0x34, 0xa4, 0x55, 0x48, 0x4d, 0xb4, 0x86, 0x3c, 0xa6, 0xdf, 0x1b, +0x00, 0x7f, 0xf1, 0xf5, 0xc7, 0x08, 0x06, 0x83, 0x74, 0x77, 0x77, 0xfb, +0x46, 0x33, 0x3c, 0xfe, 0xcd, 0xbf, 0x65, 0xa5, 0xbf, 0x02, 0x79, 0xf3, +0x79, 0x05, 0x96, 0x7c, 0x12, 0xfc, 0x1e, 0x2a, 0x44, 0x9a, 0x06, 0xb6, +0x6f, 0x5a, 0x08, 0x7c, 0x09, 0xad, 0x40, 0x75, 0x18, 0x00, 0x0b, 0xe7, +0x8d, 0xf9, 0xbb, 0xd0, 0xf0, 0xfe, 0x2d, 0x4d, 0x86, 0xe9, 0xed, 0x40, +0xd0, 0x00, 0x72, 0xd8, 0x53, 0xe2, 0x3f, 0xeb, 0x76, 0xb5, 0x0f, 0x0f, +0x3d, 0xf3, 0xf1, 0x46, 0x33, 0xe0, 0x5e, 0xa6, 0x80, 0xe8, 0xa7, 0x5f, +0x65, 0x7c, 0x46, 0xf0, 0x7b, 0x77, 0xde, 0xc1, 0x48, 0x7c, 0x84, 0x3c, +0xa1, 0x50, 0x88, 0xd7, 0x5f, 0x3b, 0xc2, 0xf2, 0x65, 0xcb, 0xf1, 0x3c, +0x4f, 0xcb, 0x34, 0x4d, 0x4a, 0xb0, 0xc0, 0xbc, 0xe3, 0x38, 0x94, 0x85, +0x82, 0xa4, 0x0e, 0xed, 0x00, 0x2f, 0x47, 0x1e, 0x37, 0xe3, 0x90, 0x1d, +0x4b, 0xea, 0x00, 0xcc, 0x05, 0xb0, 0x6b, 0x2b, 0x10, 0x52, 0xbe, 0x19, +0xdb, 0x75, 0xea, 0xb7, 0x25, 0x40, 0xfc, 0x40, 0xeb, 0x97, 0x0c, 0x53, +0x5d, 0x00, 0xf1, 0x14, 0x4a, 0x3c, 0x86, 0x52, 0x4f, 0x4a, 0xbc, 0xde, +0xd1, 0x83, 0x9b, 0xbf, 0x6d, 0xd8, 0xce, 0x9d, 0x14, 0x20, 0xac, 0x72, +0x64, 0xa8, 0x96, 0x58, 0x2c, 0xc6, 0x3f, 0xff, 0xd3, 0x93, 0x34, 0xaf, +0x6b, 0xa6, 0x2c, 0x54, 0xc6, 0xaa, 0xa6, 0xd5, 0xbc, 0xf4, 0xe2, 0xa1, +0xbc, 0xf9, 0xbc, 0xb1, 0xc5, 0x9a, 0xd7, 0x63, 0xd6, 0xc9, 0x61, 0x94, +0xd5, 0x53, 0x88, 0xb4, 0x4c, 0xcc, 0xe0, 0x35, 0x59, 0xe8, 0x31, 0x6c, +0x5f, 0x33, 0x0f, 0x9e, 0xf8, 0x3b, 0x00, 0x31, 0xf6, 0xfd, 0x2d, 0x3b, +0xfc, 0x2f, 0x3c, 0xcc, 0xcf, 0x67, 0x0a, 0xa8, 0x98, 0x0f, 0x60, 0x86, +0xa8, 0xd9, 0x79, 0xbc, 0xa4, 0x29, 0xc3, 0x30, 0x0a, 0xcd, 0xeb, 0x63, +0x91, 0x48, 0x64, 0x31, 0xe6, 0xb5, 0x6c, 0xdb, 0x26, 0xf0, 0xfe, 0x63, +0x38, 0xc3, 0xa7, 0x29, 0xc4, 0x4b, 0xa5, 0x41, 0x29, 0x74, 0x19, 0xf9, +0x9f, 0xc1, 0x34, 0xce, 0xc7, 0x76, 0x75, 0xb4, 0x80, 0x52, 0xd2, 0xbf, +0xe0, 0x23, 0x7c, 0x30, 0x15, 0x14, 0xa0, 0x72, 0xb3, 0x78, 0xe9, 0x04, +0x45, 0xe4, 0xcd, 0x2f, 0x30, 0x97, 0xcd, 0x66, 0x17, 0x61, 0x5e, 0x4b, +0x97, 0x87, 0xca, 0xa5, 0x29, 0x46, 0xda, 0x96, 0x2f, 0x13, 0xe1, 0x8f, +0xbe, 0x79, 0x14, 0xfc, 0xbd, 0x4e, 0x04, 0x48, 0x21, 0x44, 0x1b, 0x73, +0x38, 0x99, 0x1c, 0xbd, 0x67, 0xaf, 0xd2, 0x7d, 0xf2, 0x32, 0x13, 0x7d, +0x09, 0x5c, 0xc7, 0xa5, 0x14, 0xde, 0xcc, 0x00, 0x45, 0xe4, 0xcd, 0x2f, +0x30, 0x98, 0x4c, 0x26, 0x17, 0x63, 0x5e, 0xcb, 0xb2, 0x2c, 0xdc, 0xa9, +0x6e, 0x16, 0x60, 0x1a, 0xbe, 0x4c, 0xb4, 0x60, 0xd0, 0x7f, 0x6a, 0x7d, +0x76, 0x3e, 0x1c, 0x90, 0x04, 0x50, 0x4a, 0x71, 0xe6, 0xd0, 0x05, 0xc6, +0x7b, 0xc6, 0xc9, 0xcd, 0x66, 0x49, 0x0e, 0x26, 0x48, 0xf6, 0x8d, 0x53, +0x8a, 0xdc, 0x44, 0xf7, 0x62, 0xcc, 0xeb, 0x71, 0x7a, 0x7a, 0x1a, 0x55, +0x7c, 0x7e, 0xa1, 0xf4, 0x35, 0x6c, 0xa9, 0x10, 0x46, 0x84, 0x92, 0x08, +0xc1, 0x1c, 0x4f, 0x15, 0x3e, 0x72, 0x4b, 0x50, 0x9d, 0x00, 0x53, 0x23, +0xd3, 0x08, 0x3c, 0xec, 0x80, 0x81, 0x75, 0x4d, 0xb6, 0x89, 0xba, 0x76, +0xf1, 0x54, 0x86, 0x62, 0x32, 0xdd, 0x2f, 0x2f, 0xca, 0x7c, 0xbe, 0x0f, +0x04, 0xba, 0x3f, 0x0a, 0xcf, 0x2f, 0x30, 0x1f, 0x0e, 0x87, 0x09, 0xd9, +0x92, 0x48, 0xcb, 0x17, 0xb1, 0xab, 0x36, 0xf0, 0x01, 0x9c, 0xa1, 0x00, +0xa9, 0x24, 0xba, 0x9b, 0x33, 0xd3, 0x59, 0x02, 0x73, 0xe6, 0xed, 0x80, +0xa9, 0x77, 0x40, 0xc3, 0x92, 0xb8, 0x33, 0xb3, 0x14, 0xe3, 0x8c, 0xbe, +0x47, 0x6e, 0xa2, 0xeb, 0x17, 0x98, 0xd7, 0xd2, 0xb7, 0x51, 0xe5, 0x64, +0x30, 0x72, 0x33, 0xba, 0x44, 0x4a, 0xcd, 0xbc, 0x94, 0x92, 0xda, 0x9a, +0x28, 0xde, 0xf4, 0x30, 0x89, 0xf8, 0x18, 0x76, 0xc3, 0x36, 0x3f, 0xc4, +0x46, 0x4a, 0xe1, 0x09, 0xc6, 0x28, 0x40, 0xd6, 0xde, 0xdd, 0xf1, 0x03, +0x14, 0x47, 0x62, 0x8d, 0xd5, 0x84, 0x22, 0x01, 0xbd, 0x02, 0xa6, 0x2d, +0x31, 0x2d, 0x03, 0xc3, 0x97, 0x40, 0xa0, 0xb2, 0x0e, 0xc5, 0xa4, 0x3b, +0x9f, 0x2b, 0x0a, 0x50, 0x6c, 0x5e, 0xcf, 0xbe, 0xde, 0x1b, 0xc8, 0xcd, +0xa2, 0xd2, 0x93, 0x04, 0x49, 0x53, 0x5d, 0x55, 0x39, 0xdf, 0xf0, 0x4a, +0x29, 0xfd, 0x78, 0xdd, 0xb8, 0x72, 0x05, 0x46, 0x3a, 0x8e, 0x72, 0xd2, +0xcc, 0x8c, 0xf4, 0x63, 0x44, 0x1a, 0xb0, 0xa3, 0xbf, 0x89, 0x0c, 0xc4, +0x28, 0x46, 0x2a, 0xf6, 0x50, 0x80, 0xd4, 0xa9, 0xe0, 0x61, 0x69, 0xc8, +0x81, 0x86, 0xe6, 0x7a, 0x5d, 0x3a, 0xff, 0x67, 0x5e, 0x62, 0x98, 0x06, +0xd2, 0x94, 0xe0, 0xba, 0x0b, 0x03, 0xfc, 0xf4, 0x15, 0xbc, 0xa1, 0x13, +0xda, 0xc4, 0xcf, 0x31, 0xaf, 0x67, 0x36, 0x5a, 0x19, 0xc1, 0x4b, 0x27, +0x51, 0xb9, 0x0c, 0x6a, 0x26, 0x8e, 0x91, 0xec, 0xa7, 0xa1, 0x2a, 0x48, +0xd3, 0xb2, 0x06, 0xd6, 0x34, 0x2e, 0xe3, 0xa6, 0xea, 0x10, 0x8c, 0x5f, +0xd2, 0xe7, 0xdc, 0xd4, 0x04, 0xfa, 0x4e, 0xa4, 0x5c, 0x10, 0x12, 0xbb, +0xea, 0xa3, 0x94, 0xe0, 0xfe, 0xe4, 0x77, 0xb7, 0xd4, 0x50, 0x18, 0xa0, +0x6e, 0xf7, 0xa9, 0x6e, 0xa4, 0xd8, 0x1e, 0xa9, 0xaf, 0x18, 0x8c, 0xad, +0xad, 0xc7, 0x0c, 0x58, 0x18, 0x73, 0x21, 0xa4, 0x1f, 0x42, 0x6f, 0x1c, +0x0b, 0x7e, 0x37, 0x28, 0x92, 0x27, 0xff, 0x92, 0x80, 0x9a, 0x06, 0x58, +0x60, 0x1e, 0xd0, 0x9b, 0x9d, 0x98, 0x1d, 0x05, 0x37, 0xed, 0x2b, 0x83, +0x72, 0xb3, 0xa4, 0x7b, 0xcf, 0x92, 0xe9, 0x39, 0x8d, 0x1b, 0xbf, 0x80, +0x3b, 0x7c, 0x0e, 0x77, 0xb4, 0x0b, 0x32, 0x33, 0x3a, 0xe0, 0xc0, 0x99, +0x37, 0x89, 0xad, 0x5e, 0x0f, 0x6e, 0x16, 0x00, 0x33, 0xdc, 0x84, 0x90, +0x16, 0x45, 0x04, 0x33, 0x96, 0xf7, 0x60, 0x61, 0x00, 0x4d, 0xec, 0xee, +0x77, 0x3a, 0x71, 0xd5, 0xed, 0x76, 0x24, 0xd8, 0x1d, 0x59, 0x5e, 0xa3, +0x77, 0x3e, 0x61, 0x18, 0xbe, 0x24, 0x5c, 0x93, 0x10, 0x2c, 0x40, 0x01, +0x13, 0x7d, 0x54, 0x97, 0x07, 0xf4, 0x03, 0x9a, 0x5f, 0xef, 0x5a, 0x65, +0x65, 0x65, 0xac, 0x58, 0xb1, 0x9c, 0x0a, 0x2b, 0x8b, 0x3b, 0x3d, 0xc2, +0xe4, 0xa9, 0x57, 0x70, 0xc6, 0xfa, 0xc9, 0xf4, 0x9e, 0xe3, 0xca, 0xde, +0xbb, 0xe8, 0x7f, 0xf2, 0x4f, 0x75, 0x18, 0xbd, 0x2a, 0xae, 0x16, 0x5e, +0x7a, 0x9a, 0xa1, 0xf7, 0x7e, 0x48, 0x20, 0x68, 0xea, 0xe3, 0x1a, 0x61, +0x20, 0xed, 0xea, 0x52, 0x5f, 0xdb, 0xb2, 0x20, 0x80, 0x0e, 0x71, 0x5f, +0xc7, 0x25, 0x66, 0xed, 0x8d, 0x86, 0x6d, 0x3c, 0x63, 0x47, 0x23, 0x18, +0xd7, 0x42, 0x98, 0x12, 0xa4, 0xa4, 0x14, 0x56, 0xe5, 0x7a, 0x6d, 0xc4, +0x9b, 0xe8, 0xa5, 0xcc, 0x19, 0x63, 0x49, 0x34, 0xcc, 0x8a, 0xba, 0x4a, +0x96, 0xd6, 0x84, 0xb1, 0x92, 0x57, 0xf0, 0x12, 0x7d, 0x4c, 0xb6, 0xbf, +0xc4, 0xe0, 0x77, 0x1f, 0x65, 0xe4, 0xa5, 0x7f, 0xc4, 0x08, 0x57, 0x62, +0x45, 0x97, 0x12, 0x68, 0xdc, 0x00, 0xd7, 0x4c, 0xba, 0xbe, 0x72, 0x59, +0xad, 0xab, 0xe7, 0xcf, 0x12, 0x6b, 0x6e, 0xd3, 0x1b, 0x99, 0x9a, 0x9d, +0x24, 0x8f, 0x30, 0x2b, 0x4a, 0xf4, 0x81, 0x68, 0x67, 0x0e, 0x93, 0x22, +0x62, 0x0f, 0xbe, 0x9d, 0x04, 0x1e, 0x88, 0x1f, 0xd8, 0xf2, 0x9a, 0x08, +0x06, 0xfe, 0x15, 0xa5, 0xaa, 0x11, 0x82, 0x52, 0x98, 0xe5, 0x4d, 0xa0, +0xdc, 0xb9, 0xd9, 0x4c, 0x43, 0x6a, 0x14, 0x94, 0xe7, 0x4b, 0xe9, 0x51, +0xf9, 0x0a, 0x35, 0xb6, 0x10, 0x6c, 0xdc, 0x48, 0xf9, 0xc6, 0x3b, 0x30, +0x82, 0x41, 0x56, 0x3d, 0x7a, 0x10, 0xe5, 0xe6, 0xf4, 0xac, 0xe3, 0x79, +0x80, 0x47, 0x76, 0x7a, 0x9a, 0xa8, 0x7f, 0x3e, 0xdb, 0xff, 0x2e, 0xda, +0xbc, 0x2a, 0xec, 0x39, 0x0f, 0x00, 0x85, 0xca, 0x08, 0x21, 0xff, 0x0b, +0xa5, 0x2e, 0xab, 0xb4, 0xfd, 0xbd, 0x45, 0xfc, 0x5f, 0x48, 0xff, 0x90, +0x59, 0xe6, 0x49, 0xef, 0xdf, 0x81, 0xed, 0x94, 0x20, 0xdc, 0xf4, 0x00, +0x46, 0xb4, 0x09, 0x19, 0x8a, 0x82, 0x52, 0xda, 0x30, 0x79, 0xe1, 0xcd, +0x19, 0x54, 0x20, 0x24, 0xca, 0x75, 0xb4, 0xb1, 0x7c, 0x38, 0xb4, 0x94, +0x3e, 0xde, 0xd7, 0x75, 0x85, 0xda, 0x4d, 0x3b, 0x08, 0x4c, 0x9e, 0x87, +0xcc, 0x14, 0x85, 0xcc, 0x0e, 0xbc, 0x8c, 0x9b, 0x1e, 0x06, 0xc5, 0x1b, +0xb1, 0xdd, 0xa7, 0x7e, 0x87, 0x22, 0x24, 0x1f, 0x40, 0xf4, 0xde, 0xf6, +0x7e, 0xff, 0xa1, 0xe9, 0x53, 0x02, 0x5e, 0x2c, 0xbd, 0x39, 0x4a, 0xbc, +0xa9, 0xab, 0x28, 0x67, 0x16, 0x3d, 0xa3, 0xf3, 0xd2, 0x65, 0xf1, 0xb3, +0x3a, 0xcf, 0xa6, 0x20, 0x97, 0x2f, 0x97, 0x8c, 0x96, 0xf2, 0xe5, 0x39, +0x69, 0x86, 0xfa, 0xe3, 0xac, 0xdc, 0xf1, 0x10, 0xa3, 0x3f, 0x79, 0x6b, +0x81, 0x79, 0x95, 0x9b, 0xc1, 0xcd, 0xc4, 0x01, 0x90, 0x86, 0xfc, 0x73, +0x4a, 0x20, 0xf9, 0x85, 0x28, 0xa5, 0x66, 0xed, 0x07, 0x80, 0x01, 0x8a, +0xf0, 0x72, 0x49, 0xf0, 0x5c, 0xbc, 0xe4, 0x20, 0xda, 0x94, 0xd6, 0xcf, +0x9a, 0x93, 0x9c, 0x0e, 0xe3, 0xab, 0xa0, 0x59, 0xb5, 0xd2, 0xcc, 0x4e, +0x8e, 0x32, 0x9a, 0xc8, 0x11, 0xf1, 0xcb, 0xcb, 0x2a, 0xaf, 0x22, 0x71, +0xb1, 0x1d, 0x85, 0x02, 0x2d, 0x34, 0xd9, 0xc9, 0xf7, 0xe7, 0x56, 0x93, +0x44, 0xf4, 0xee, 0xf6, 0xf6, 0x45, 0x07, 0x28, 0xd9, 0x17, 0x82, 0x33, +0x0b, 0x02, 0x64, 0x46, 0x01, 0x50, 0x99, 0x24, 0xb9, 0x44, 0x2f, 0x38, +0xa9, 0xf9, 0x15, 0x50, 0x05, 0x2b, 0xe0, 0xe9, 0x60, 0x69, 0x3c, 0xff, +0xbc, 0xe7, 0xd7, 0x78, 0xbc, 0xa7, 0x07, 0x63, 0xe5, 0x36, 0x96, 0x6d, +0xdb, 0xcd, 0xec, 0xd8, 0x55, 0xc6, 0x2f, 0x9d, 0x62, 0xf2, 0xf2, 0xbb, +0xfa, 0xfe, 0xaf, 0xf2, 0x7f, 0x5e, 0x96, 0xdc, 0xd4, 0x85, 0x7c, 0xfd, +0x7f, 0x0f, 0x4a, 0x63, 0xb2, 0x58, 0x14, 0x83, 0x14, 0xe1, 0x4c, 0x5d, +0xc2, 0x2c, 0x5f, 0x0d, 0xc0, 0x40, 0x67, 0x17, 0xc9, 0xa1, 0x5e, 0xa2, +0xcb, 0x9b, 0xa8, 0xa8, 0x89, 0x11, 0xa8, 0xa8, 0xc4, 0xb0, 0x02, 0x28, +0x5c, 0x1d, 0x60, 0x7a, 0x74, 0x84, 0xac, 0x11, 0x25, 0xb4, 0x6c, 0x03, +0x86, 0x17, 0x27, 0xb2, 0xbc, 0x79, 0xfe, 0x19, 0xad, 0x63, 0xdf, 0x67, +0x71, 0xd3, 0x49, 0xf0, 0x72, 0x28, 0x69, 0x22, 0x84, 0x81, 0xe3, 0xf7, +0x83, 0xf2, 0x1c, 0x50, 0x24, 0x6b, 0x77, 0x9f, 0xfe, 0xf2, 0x2f, 0x1d, +0x40, 0x21, 0x7a, 0x04, 0x8a, 0x42, 0xdc, 0xd9, 0x01, 0xbd, 0x0a, 0x32, +0x10, 0x63, 0xd9, 0xda, 0xd5, 0xa8, 0x75, 0xcd, 0x5c, 0xed, 0xee, 0x65, +0x78, 0x64, 0x86, 0x9a, 0xd8, 0x06, 0x7f, 0x66, 0x3b, 0x88, 0x36, 0x6f, +0x26, 0x50, 0xdf, 0x40, 0x76, 0xf6, 0x1c, 0xcb, 0x6e, 0xdb, 0x09, 0x40, +0x7a, 0x6c, 0x90, 0xec, 0xd4, 0x28, 0x0a, 0xb8, 0x70, 0xf0, 0x71, 0xa6, +0x07, 0x3a, 0x09, 0x46, 0xeb, 0x51, 0x80, 0x00, 0x72, 0x33, 0x3d, 0x64, +0x13, 0x3f, 0xca, 0x17, 0xf0, 0x83, 0xe8, 0x3a, 0x2a, 0x8d, 0x64, 0xb1, +0x28, 0xef, 0x0c, 0x25, 0x48, 0x0f, 0x1f, 0x45, 0xcf, 0x14, 0x20, 0x94, +0xc3, 0xd2, 0xa6, 0x9b, 0x58, 0xb9, 0x76, 0x29, 0xce, 0xc8, 0x45, 0x2a, +0x9b, 0x5a, 0x70, 0xa6, 0x27, 0x29, 0xab, 0x5d, 0xc1, 0xd2, 0x4f, 0x7c, +0x86, 0xe1, 0x1f, 0xbf, 0x0e, 0x80, 0xe7, 0x3a, 0xbc, 0xff, 0xf4, 0xd7, +0x79, 0xfd, 0xa1, 0x66, 0x26, 0xfe, 0xe7, 0xc7, 0x00, 0x54, 0x2c, 0x5b, +0x8d, 0xbe, 0x29, 0xa4, 0xfa, 0xc8, 0x0c, 0x1f, 0xc9, 0x7b, 0x3e, 0x55, +0x7b, 0x6f, 0xc7, 0x7f, 0xdc, 0xb0, 0xf7, 0x03, 0x63, 0x07, 0x5a, 0xbf, +0xa9, 0x04, 0xdf, 0x40, 0x70, 0x59, 0x28, 0x4e, 0x28, 0xb8, 0x0f, 0xc0, +0x08, 0xd4, 0x12, 0xa8, 0xdf, 0x8e, 0xb4, 0x2a, 0xf2, 0x35, 0x8b, 0x52, +0xfa, 0x49, 0x93, 0xc1, 0x9f, 0xf6, 0x32, 0xda, 0xdd, 0x45, 0xd5, 0xaa, +0x8d, 0x24, 0xfb, 0x2f, 0xf9, 0xea, 0xd4, 0xa6, 0x0b, 0xd0, 0x3b, 0x7e, +0xdb, 0xe7, 0x1f, 0x27, 0x12, 0x1c, 0xf3, 0xcd, 0x1f, 0xcb, 0x37, 0x72, +0x7f, 0x2c, 0xe9, 0xad, 0xe2, 0xe1, 0xd3, 0xce, 0x8d, 0x0a, 0xa0, 0x19, +0x39, 0xd8, 0x56, 0x3f, 0x55, 0x35, 0x36, 0xb1, 0xe6, 0x77, 0xbb, 0x32, +0xa3, 0xcf, 0xb5, 0x3e, 0x8c, 0xc7, 0x93, 0x80, 0x14, 0xd2, 0x22, 0x10, +0xdb, 0x8a, 0x19, 0xf9, 0xc8, 0x5c, 0x00, 0x17, 0xe5, 0xe5, 0xc0, 0x73, +0x98, 0x99, 0x9a, 0xe1, 0xcc, 0xf3, 0x4f, 0x33, 0x3d, 0x78, 0x85, 0x62, +0x82, 0xd5, 0x75, 0xb4, 0xdc, 0xfd, 0x39, 0x2a, 0xad, 0x4e, 0x72, 0x53, +0x5d, 0x79, 0xf3, 0xe3, 0x63, 0xe1, 0xa9, 0xc6, 0x75, 0x77, 0x5e, 0x4c, +0xfe, 0xbf, 0xbf, 0x62, 0x1a, 0x7e, 0xae, 0xad, 0xcd, 0xf0, 0xbc, 0xa3, +0x40, 0x08, 0xbd, 0x3b, 0xaf, 0xc2, 0xaa, 0x5a, 0x8f, 0xb4, 0x6b, 0x50, +0x80, 0xde, 0x91, 0x3d, 0x0f, 0x4f, 0x41, 0xef, 0x4f, 0xce, 0xd1, 0xd7, +0xfe, 0x3a, 0xb9, 0x74, 0x8a, 0xf2, 0x86, 0x46, 0x1a, 0x36, 0xde, 0x4a, +0x5d, 0x43, 0x1a, 0x4f, 0xd7, 0xfb, 0x3c, 0x5d, 0x6e, 0x2e, 0xf3, 0x5b, +0xf5, 0xf7, 0x9f, 0x1d, 0xf9, 0xd5, 0xbd, 0x23, 0xfb, 0x97, 0x96, 0x72, +0x51, 0x1d, 0xde, 0x0f, 0xea, 0x0f, 0x00, 0x01, 0x80, 0x30, 0x31, 0x82, +0x75, 0xc8, 0xb2, 0x25, 0x48, 0xab, 0x5a, 0xbf, 0x13, 0xc0, 0x9b, 0xdb, +0xf0, 0x54, 0x16, 0x77, 0x76, 0x04, 0x2f, 0x9b, 0x28, 0xfa, 0xad, 0xc2, +0xbe, 0x9a, 0x5d, 0xa7, 0xbe, 0xf6, 0x2b, 0x7f, 0xc9, 0x97, 0x67, 0xe2, +0xc0, 0xa6, 0x95, 0xae, 0xb4, 0xbe, 0xaf, 0x94, 0x6a, 0x05, 0xe4, 0xa2, +0x0c, 0x80, 0xe3, 0x29, 0x8e, 0x92, 0x95, 0x5f, 0xa8, 0xdd, 0xd3, 0xde, +0xf5, 0xeb, 0x78, 0x4b, 0xb9, 0x90, 0x17, 0x84, 0x11, 0x77, 0x5b, 0xf7, +0x48, 0xa5, 0x1e, 0x52, 0xd0, 0x0c, 0x84, 0x00, 0x7b, 0x2e, 0x94, 0x03, +0x8c, 0x03, 0x7d, 0x0a, 0x5e, 0xac, 0xdd, 0xd5, 0xb1, 0x4f, 0xd7, 0xd9, +0x87, 0xe4, 0x7f, 0x01, 0x9c, 0x0b, 0xc5, 0xc1, 0xee, 0xb9, 0xae, 0x42, +0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; +#endif diff --git a/src/fluent-bit/lib/monkey/examples/list.c b/src/fluent-bit/lib/monkey/examples/list.c new file mode 100644 index 000000000..7156fd2c2 --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/list.c @@ -0,0 +1,91 @@ +/* Monkey HTTP Daemon + * ------------------ + * Copyright (C) 2012, Lauri Kasanen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +/* + * This example shows a directory listing of /tmp, with no access to files. Fun eh? +*/ + +enum { + bufsize = 4096 +}; +static char buf[bufsize]; + +static int list(const mklib_session *sr, const char *vhost, const char *url, + const char *get, unsigned long getlen, + const char *post, unsigned long postlen, + unsigned int *status, const char **content, unsigned long *content_len, + char *header) { + + sprintf(buf, "

    Hello friend. You asked for %s.

    \n", url); + strcat(buf, "
    ");
    +
    +	FILE *f = popen("ls -lh /tmp", "r");
    +	if (!f) exit(1);
    +
    +
    +	char mybuf[bufsize - 200];
    +
    +	while (fgets(mybuf, bufsize - 200, f)) {
    +		// Note: this is dangerous. Only used for demonstration purposes.
    +		strcat(buf, mybuf);
    +	}
    +	pclose(f);
    +
    +	strcat(buf, "
    "); + + *content = buf; + *content_len = strlen(buf); + sprintf(header, "Content-type: text/html"); + + // TRUE here means we handled this request. + return MKLIB_TRUE; +} + +/* The callback setting interface can't check the callback for compatibility. + * This makes sure the callback function has the right arguments. */ +static cb_data listf = list; + +int main() { + + // Bind to all interfaces, port 2001, default plugins, no directory. + // Lacking the directory means that no files can be accessed, just what we want. + // We use the data callback. + mklib_ctx ctx = mklib_init(NULL, 0, 0, NULL); + if (!ctx) return 1; + + mklib_callback_set(ctx, MKCB_DATA, listf); + + // Start the server. + mklib_start(ctx); + + // I'm now free to do my own things. I'm just going to wait for a keypress. + printf("All set and running! Visit me, I default to localhost:2001.\n"); + printf("Press a key to exit.\n"); + getchar(); + + mklib_stop(ctx); + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/examples/list.py b/src/fluent-bit/lib/monkey/examples/list.py new file mode 100644 index 000000000..d401d4280 --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/list.py @@ -0,0 +1,24 @@ +import monkey +import subprocess + +content = '' + +def list_cb(vhost, url, get, get_len, post, post_len, header): + global content + content = "

    Hello friend. You asked for %s.

    \n" + content += "
    "
    +    content += subprocess.check_output(['ls', '-lh', '/tmp'])
    +    content += "
    " + + ret = {} + ret['return'] = 1 + ret['content'] = content + ret['content_len'] = len(ret['content']) + + return ret + +monkey.init(None, 0, 0, None) +monkey.set_callback('data', list_cb) +monkey.start() +raw_input("Press enter to stop the server...") +monkey.stop() diff --git a/src/fluent-bit/lib/monkey/examples/quiz.c b/src/fluent-bit/lib/monkey/examples/quiz.c new file mode 100644 index 000000000..9914cb794 --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/quiz.c @@ -0,0 +1,124 @@ +/* Monkey HTTP Daemon + * ------------------ + * Copyright (C) 2012, Lauri Kasanen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include "image.h" + +/* + * This example shows a simple quiz. It includes POST data handling, and + * an image embedded in the code. +*/ + +enum { + bufsize = 4096 +}; +static char buf[bufsize]; + +static void front() { + + sprintf(buf, "

    Hello friend." + " Have you seen this guy?

    \n" + "

    " + "

    " + "Why yes I have
    " + "No, who's he?
    " + "Canada
    " + "" + "
    " + "
    "); + +} + +static void points() { + + sprintf(buf, "

    Correct!

    \n" + "

    Visit him." + "
    "); + +} + +static void wrong() { + + sprintf(buf, "

    I'm a sad puppy.

    \n" + "
    "); +} + +static int list(const mklib_session *sr, const char *vhost, const char *url, + const char *get, unsigned long getlen, + const char *post, unsigned long postlen, + unsigned int *status, const char **content, unsigned long *content_len, + char *header) { + + if (strcmp(url, "/image.png") == 0) { + *content = (char *) monkey_head_png; + *content_len = sizeof(monkey_head_png); + sprintf(header, "Content-type: image/png"); + + return MKLIB_TRUE; + } + + if (!post) { + front(); + } else { + if (strstr(post, "q1=who") || strstr(post, "q1=yes")) + points(); + else + wrong(); + } + + *content = buf; + *content_len = strlen(buf); + sprintf(header, "Content-type: text/html"); + + + // TRUE here means we handled this request. + return MKLIB_TRUE; +} + +/* The callback setting interface can't check the callback for compatibility. + * This makes sure the callback function has the right arguments. */ +static cb_data listf = list; + +int main() { + + // Bind to all interfaces, port 2001, default plugins, no directory. + // Lacking the directory means that no files can be accessed, just what we want. + // We use the data callback. + mklib_ctx ctx = mklib_init(NULL, 0, 0, NULL); + if (!ctx) return 1; + + mklib_callback_set(ctx, MKCB_DATA, listf); + + // Start the server. + mklib_start(ctx); + + // I'm now free to do my own things. I'm just going to wait for a keypress. + printf("All set and running! Visit me, I default to localhost:2001.\n"); + printf("Press a key to exit.\n"); + getchar(); + + mklib_stop(ctx); + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/examples/quiz.py b/src/fluent-bit/lib/monkey/examples/quiz.py new file mode 100644 index 000000000..96dfa31bd --- /dev/null +++ b/src/fluent-bit/lib/monkey/examples/quiz.py @@ -0,0 +1,298 @@ +import monkey + +content = '' + +image = ''.join(chr(x) for x in +[ +0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, +0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x28, +0x08, 0x06, 0x00, 0x00, 0x00, 0xb8, 0x87, 0x79, 0x71, 0x00, 0x00, 0x00, +0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, +0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x03, +0x2c, 0x00, 0x00, 0x03, 0x2c, 0x01, 0x90, 0x94, 0x1c, 0x83, 0x00, 0x00, +0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, +0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, +0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, +0x00, 0x0b, 0x41, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xc5, 0x99, 0x7b, +0x6c, 0x5b, 0xd7, 0x7d, 0xc7, 0x3f, 0xe7, 0xdc, 0x07, 0x49, 0x51, 0xd4, +0x83, 0xa2, 0x1e, 0xf1, 0x53, 0xb2, 0x5d, 0x5b, 0x88, 0xd5, 0xda, 0xf3, +0x62, 0x59, 0x8d, 0xd7, 0xcc, 0x71, 0x3b, 0x07, 0x1b, 0x86, 0xac, 0x58, +0xe7, 0x24, 0x76, 0x92, 0xc2, 0x49, 0x80, 0x60, 0x6b, 0xd7, 0x17, 0x32, +0x14, 0x29, 0xda, 0x6d, 0x19, 0xba, 0x66, 0xb3, 0xb7, 0x2e, 0xd8, 0x30, +0x2c, 0x59, 0xff, 0x58, 0xb2, 0xba, 0xb1, 0x9b, 0x64, 0xc1, 0x90, 0xc4, +0x49, 0xe7, 0x2c, 0xb6, 0xe1, 0x24, 0xae, 0x15, 0xcb, 0xad, 0xe3, 0x34, +0x7e, 0x49, 0xab, 0x6c, 0xbd, 0xac, 0x07, 0x25, 0x51, 0x12, 0x25, 0x8a, +0xe4, 0xe5, 0xbd, 0x67, 0xd7, 0x67, 0xa2, 0x4a, 0x50, 0x6c, 0x2a, 0xa7, +0x5e, 0xfb, 0x11, 0xbe, 0x38, 0xc0, 0xbd, 0xc4, 0xe5, 0xf7, 0x7b, 0xce, +0xef, 0x77, 0xcf, 0xa5, 0xae, 0x50, 0x4a, 0x71, 0xa3, 0x88, 0xbf, 0xd0, +0xda, 0x80, 0xc3, 0xdf, 0x48, 0x41, 0xab, 0x82, 0x25, 0x28, 0x2a, 0x10, +0x48, 0xc0, 0x05, 0xd2, 0x40, 0x52, 0x08, 0xde, 0x12, 0x4a, 0x3c, 0x11, +0xdd, 0xf5, 0xce, 0x49, 0x6e, 0x00, 0x37, 0x24, 0x40, 0xfc, 0x60, 0xeb, +0x5d, 0x02, 0xfe, 0x0a, 0xc1, 0x3a, 0x14, 0x82, 0xc5, 0x31, 0xeb, 0x29, +0xf6, 0xd7, 0x59, 0x1d, 0x9f, 0x63, 0xa7, 0x72, 0x7f, 0x2d, 0x01, 0x46, +0xff, 0xad, 0x39, 0x42, 0xa8, 0xe2, 0x0d, 0xa0, 0x95, 0x0f, 0x8b, 0x20, +0x25, 0x11, 0xdf, 0x88, 0xde, 0xf3, 0xce, 0x13, 0x7c, 0x10, 0xdf, 0xb9, +0xc5, 0x4a, 0x54, 0x53, 0x56, 0xbd, 0xf3, 0x47, 0x53, 0xa0, 0xd4, 0x2f, +0x1d, 0x60, 0xec, 0xe0, 0x96, 0x4f, 0x7b, 0xa8, 0x83, 0x02, 0x82, 0xdc, +0x00, 0x14, 0x9c, 0xad, 0x35, 0x53, 0xad, 0xec, 0x7c, 0x3f, 0x4b, 0x01, +0x53, 0x2f, 0xdc, 0x1a, 0xcd, 0xe6, 0x72, 0x7b, 0x81, 0x3f, 0x02, 0xaa, +0x80, 0x04, 0x8a, 0x27, 0x62, 0x56, 0xe3, 0xe3, 0xec, 0x7c, 0xde, 0xfd, +0x50, 0x01, 0x46, 0x9f, 0xdd, 0xf2, 0xfb, 0x48, 0xf5, 0x32, 0x20, 0xb8, +0x81, 0x08, 0x18, 0x33, 0x32, 0xc6, 0x2d, 0x55, 0x7b, 0x4e, 0x5e, 0x01, +0x48, 0xbc, 0x70, 0xcb, 0x0a, 0x37, 0x27, 0x4f, 0x02, 0x4b, 0x28, 0x42, +0x08, 0x9e, 0xa9, 0xb9, 0xe7, 0xd4, 0x03, 0xd7, 0x1d, 0x20, 0xf1, 0xfc, +0xe6, 0xad, 0xae, 0x2b, 0x8e, 0x03, 0x06, 0xd7, 0x81, 0x19, 0x6b, 0x21, +0xfc, 0x1b, 0x5f, 0x46, 0xda, 0x15, 0x28, 0x37, 0x8d, 0x33, 0xf8, 0x0e, +0xa9, 0xf3, 0x4f, 0xa3, 0x9c, 0x14, 0x45, 0x64, 0x31, 0xd5, 0xc7, 0x62, +0xe7, 0x4f, 0x77, 0x8d, 0xad, 0xdd, 0xfc, 0x96, 0x82, 0x5b, 0xa1, 0x34, +0x52, 0xca, 0x3b, 0xae, 0x2b, 0x40, 0xef, 0x81, 0x8f, 0x55, 0x97, 0x89, +0xe0, 0x10, 0x60, 0x73, 0x1d, 0x94, 0x7d, 0xf4, 0x61, 0xec, 0xe6, 0xcf, +0x92, 0x4e, 0x67, 0x29, 0x2f, 0x2f, 0x27, 0x8f, 0x97, 0x1e, 0x67, 0xfa, +0xf4, 0x5e, 0xb2, 0x7d, 0xc7, 0x28, 0x62, 0x0a, 0x21, 0x76, 0xa3, 0xd4, +0x21, 0x00, 0x37, 0xe7, 0x31, 0x78, 0x29, 0x8e, 0xeb, 0x7a, 0x34, 0xac, +0xae, 0x21, 0x10, 0xb6, 0xd1, 0x08, 0x0e, 0x5d, 0x57, 0x80, 0xd1, 0x03, +0xad, 0xc7, 0x11, 0xdc, 0xc6, 0x75, 0x60, 0x56, 0xaf, 0x23, 0xbb, 0x69, +0x1f, 0x87, 0x8f, 0x1c, 0x26, 0x5c, 0x1e, 0xe6, 0xdc, 0xb9, 0x73, 0x94, +0x87, 0x22, 0x7c, 0xe5, 0x4b, 0x8f, 0xa0, 0xf1, 0x1c, 0x26, 0x8f, 0x7e, +0x1e, 0x27, 0xfe, 0x2e, 0x45, 0x38, 0x80, 0x05, 0x70, 0xe9, 0xed, 0xcb, +0x8c, 0xf6, 0x24, 0x90, 0x86, 0x20, 0x18, 0x0e, 0x70, 0xf3, 0xf6, 0x35, +0xf9, 0x10, 0x9d, 0xe6, 0xa2, 0xcd, 0x3f, 0xdf, 0x76, 0x7b, 0xb1, 0x79, +0x23, 0xb2, 0x9c, 0xf2, 0x5b, 0xbe, 0x8a, 0x55, 0xbf, 0x19, 0xe5, 0x39, +0x78, 0xa9, 0x11, 0x52, 0xef, 0x3d, 0x45, 0xa6, 0xf7, 0xbf, 0xc9, 0x13, +0xde, 0xf4, 0x15, 0xbe, 0xf0, 0xe8, 0x9f, 0xd1, 0xd2, 0xb2, 0x9e, 0x44, +0x22, 0xc1, 0xf8, 0xf8, 0x38, 0x47, 0x8f, 0x1e, 0x65, 0xc3, 0x86, 0x8d, +0x6c, 0xdf, 0xf6, 0x49, 0x90, 0x16, 0x91, 0x4f, 0xec, 0x65, 0xe2, 0xf0, +0x1e, 0xbc, 0x99, 0x41, 0x0a, 0xd0, 0xe6, 0x27, 0xae, 0x4e, 0x92, 0x1a, +0x9f, 0xa1, 0xbc, 0xc2, 0x46, 0x08, 0x81, 0x94, 0x8a, 0x81, 0xf7, 0x06, +0x58, 0xf5, 0xf1, 0x26, 0x6d, 0xc1, 0x64, 0xb1, 0xb8, 0xde, 0x7e, 0x0a, +0xb0, 0x6f, 0x6a, 0x23, 0x73, 0xf3, 0xd7, 0xd8, 0x7f, 0xf8, 0x55, 0x0c, +0xe3, 0x1c, 0x7d, 0x3d, 0x7d, 0xdc, 0x7b, 0xcf, 0xfd, 0x34, 0x6d, 0xfd, +0x16, 0xc1, 0x8f, 0x7c, 0x86, 0xa9, 0x37, 0x1f, 0x01, 0x69, 0x32, 0x1b, +0x5c, 0xc3, 0xc9, 0x93, 0x3f, 0xa4, 0xb7, 0xb7, 0x87, 0x54, 0x2a, 0xa5, +0x03, 0xb8, 0xae, 0xcb, 0x6b, 0x3f, 0x78, 0x15, 0x1d, 0x00, 0x90, 0x81, +0x6a, 0xca, 0xfd, 0xa0, 0x53, 0x6f, 0x7d, 0xb5, 0x54, 0x63, 0x13, 0x2e, +0xb7, 0xb4, 0x79, 0x21, 0x41, 0x0a, 0x81, 0x61, 0xcc, 0x77, 0xb2, 0x92, +0x2c, 0x82, 0xf1, 0x67, 0xdb, 0x6e, 0x06, 0x96, 0x92, 0x47, 0x5a, 0xa4, +0x1a, 0x1f, 0x64, 0xef, 0x3f, 0xec, 0x63, 0x66, 0x66, 0x9a, 0x9e, 0x9e, +0x1e, 0xba, 0xaf, 0x74, 0xf3, 0x27, 0x5f, 0xfc, 0x63, 0x32, 0x99, 0x0c, +0x56, 0xdd, 0x26, 0x22, 0xb7, 0xfe, 0x35, 0x66, 0xe5, 0x1a, 0xc6, 0xc6, +0xc7, 0xc8, 0xe5, 0x72, 0xfa, 0x33, 0xf1, 0x78, 0x5c, 0x9b, 0x07, 0x58, +0xb1, 0x62, 0x25, 0x73, 0xe8, 0x63, 0x46, 0xc3, 0x56, 0x64, 0x59, 0x1d, +0xc5, 0x98, 0xb6, 0x41, 0xa8, 0xdc, 0xf2, 0x65, 0x13, 0x0a, 0xdb, 0x04, +0xfd, 0x31, 0xe0, 0x1f, 0xd3, 0x28, 0x3a, 0x16, 0x15, 0xc0, 0x93, 0xee, +0xb7, 0x28, 0x20, 0xb4, 0xf6, 0x2e, 0x2e, 0xf6, 0x24, 0x78, 0xfb, 0xc4, +0xdb, 0x1c, 0x3f, 0x7e, 0x9c, 0x63, 0xc7, 0x8e, 0x71, 0xe2, 0xc4, 0x09, +0x2e, 0x5e, 0xbc, 0xc0, 0x2b, 0xaf, 0xbe, 0x0c, 0x80, 0xbd, 0x64, 0x2b, +0x65, 0xeb, 0xf7, 0xd0, 0xd4, 0xd8, 0xc4, 0x7d, 0xbb, 0xef, 0xa7, 0x90, +0xca, 0xca, 0x4a, 0xb6, 0xdd, 0x76, 0x7b, 0xde, 0xbc, 0x0e, 0x98, 0xc9, +0x3a, 0x04, 0xd7, 0xfc, 0xe1, 0xc2, 0x00, 0x96, 0x24, 0x58, 0x66, 0xfb, +0xb2, 0x08, 0x86, 0x2d, 0x02, 0xfe, 0x18, 0x8e, 0x96, 0x01, 0xa0, 0x14, +0x47, 0x4c, 0x16, 0x85, 0xb8, 0xa3, 0xb8, 0x7c, 0xfa, 0x2f, 0x74, 0x32, +0x34, 0x34, 0xa4, 0x55, 0x48, 0x4d, 0xb4, 0x86, 0x3c, 0xa6, 0xdf, 0x1b, +0x00, 0x7f, 0xf1, 0xf5, 0xc7, 0x08, 0x06, 0x83, 0x74, 0x77, 0x77, 0xfb, +0x46, 0x33, 0x3c, 0xfe, 0xcd, 0xbf, 0x65, 0xa5, 0xbf, 0x02, 0x79, 0xf3, +0x79, 0x05, 0x96, 0x7c, 0x12, 0xfc, 0x1e, 0x2a, 0x44, 0x9a, 0x06, 0xb6, +0x6f, 0x5a, 0x08, 0x7c, 0x09, 0xad, 0x40, 0x75, 0x18, 0x00, 0x0b, 0xe7, +0x8d, 0xf9, 0xbb, 0xd0, 0xf0, 0xfe, 0x2d, 0x4d, 0x86, 0xe9, 0xed, 0x40, +0xd0, 0x00, 0x72, 0xd8, 0x53, 0xe2, 0x3f, 0xeb, 0x76, 0xb5, 0x0f, 0x0f, +0x3d, 0xf3, 0xf1, 0x46, 0x33, 0xe0, 0x5e, 0xa6, 0x80, 0xe8, 0xa7, 0x5f, +0x65, 0x7c, 0x46, 0xf0, 0x7b, 0x77, 0xde, 0xc1, 0x48, 0x7c, 0x84, 0x3c, +0xa1, 0x50, 0x88, 0xd7, 0x5f, 0x3b, 0xc2, 0xf2, 0x65, 0xcb, 0xf1, 0x3c, +0x4f, 0xcb, 0x34, 0x4d, 0x4a, 0xb0, 0xc0, 0xbc, 0xe3, 0x38, 0x94, 0x85, +0x82, 0xa4, 0x0e, 0xed, 0x00, 0x2f, 0x47, 0x1e, 0x37, 0xe3, 0x90, 0x1d, +0x4b, 0xea, 0x00, 0xcc, 0x05, 0xb0, 0x6b, 0x2b, 0x10, 0x52, 0xbe, 0x19, +0xdb, 0x75, 0xea, 0xb7, 0x25, 0x40, 0xfc, 0x40, 0xeb, 0x97, 0x0c, 0x53, +0x5d, 0x00, 0xf1, 0x14, 0x4a, 0x3c, 0x86, 0x52, 0x4f, 0x4a, 0xbc, 0xde, +0xd1, 0x83, 0x9b, 0xbf, 0x6d, 0xd8, 0xce, 0x9d, 0x14, 0x20, 0xac, 0x72, +0x64, 0xa8, 0x96, 0x58, 0x2c, 0xc6, 0x3f, 0xff, 0xd3, 0x93, 0x34, 0xaf, +0x6b, 0xa6, 0x2c, 0x54, 0xc6, 0xaa, 0xa6, 0xd5, 0xbc, 0xf4, 0xe2, 0xa1, +0xbc, 0xf9, 0xbc, 0xb1, 0xc5, 0x9a, 0xd7, 0x63, 0xd6, 0xc9, 0x61, 0x94, +0xd5, 0x53, 0x88, 0xb4, 0x4c, 0xcc, 0xe0, 0x35, 0x59, 0xe8, 0x31, 0x6c, +0x5f, 0x33, 0x0f, 0x9e, 0xf8, 0x3b, 0x00, 0x31, 0xf6, 0xfd, 0x2d, 0x3b, +0xfc, 0x2f, 0x3c, 0xcc, 0xcf, 0x67, 0x0a, 0xa8, 0x98, 0x0f, 0x60, 0x86, +0xa8, 0xd9, 0x79, 0xbc, 0xa4, 0x29, 0xc3, 0x30, 0x0a, 0xcd, 0xeb, 0x63, +0x91, 0x48, 0x64, 0x31, 0xe6, 0xb5, 0x6c, 0xdb, 0x26, 0xf0, 0xfe, 0x63, +0x38, 0xc3, 0xa7, 0x29, 0xc4, 0x4b, 0xa5, 0x41, 0x29, 0x74, 0x19, 0xf9, +0x9f, 0xc1, 0x34, 0xce, 0xc7, 0x76, 0x75, 0xb4, 0x80, 0x52, 0xd2, 0xbf, +0xe0, 0x23, 0x7c, 0x30, 0x15, 0x14, 0xa0, 0x72, 0xb3, 0x78, 0xe9, 0x04, +0x45, 0xe4, 0xcd, 0x2f, 0x30, 0x97, 0xcd, 0x66, 0x17, 0x61, 0x5e, 0x4b, +0x97, 0x87, 0xca, 0xa5, 0x29, 0x46, 0xda, 0x96, 0x2f, 0x13, 0xe1, 0x8f, +0xbe, 0x79, 0x14, 0xfc, 0xbd, 0x4e, 0x04, 0x48, 0x21, 0x44, 0x1b, 0x73, +0x38, 0x99, 0x1c, 0xbd, 0x67, 0xaf, 0xd2, 0x7d, 0xf2, 0x32, 0x13, 0x7d, +0x09, 0x5c, 0xc7, 0xa5, 0x14, 0xde, 0xcc, 0x00, 0x45, 0xe4, 0xcd, 0x2f, +0x30, 0x98, 0x4c, 0x26, 0x17, 0x63, 0x5e, 0xcb, 0xb2, 0x2c, 0xdc, 0xa9, +0x6e, 0x16, 0x60, 0x1a, 0xbe, 0x4c, 0xb4, 0x60, 0xd0, 0x7f, 0x6a, 0x7d, +0x76, 0x3e, 0x1c, 0x90, 0x04, 0x50, 0x4a, 0x71, 0xe6, 0xd0, 0x05, 0xc6, +0x7b, 0xc6, 0xc9, 0xcd, 0x66, 0x49, 0x0e, 0x26, 0x48, 0xf6, 0x8d, 0x53, +0x8a, 0xdc, 0x44, 0xf7, 0x62, 0xcc, 0xeb, 0x71, 0x7a, 0x7a, 0x1a, 0x55, +0x7c, 0x7e, 0xa1, 0xf4, 0x35, 0x6c, 0xa9, 0x10, 0x46, 0x84, 0x92, 0x08, +0xc1, 0x1c, 0x4f, 0x15, 0x3e, 0x72, 0x4b, 0x50, 0x9d, 0x00, 0x53, 0x23, +0xd3, 0x08, 0x3c, 0xec, 0x80, 0x81, 0x75, 0x4d, 0xb6, 0x89, 0xba, 0x76, +0xf1, 0x54, 0x86, 0x62, 0x32, 0xdd, 0x2f, 0x2f, 0xca, 0x7c, 0xbe, 0x0f, +0x04, 0xba, 0x3f, 0x0a, 0xcf, 0x2f, 0x30, 0x1f, 0x0e, 0x87, 0x09, 0xd9, +0x92, 0x48, 0xcb, 0x17, 0xb1, 0xab, 0x36, 0xf0, 0x01, 0x9c, 0xa1, 0x00, +0xa9, 0x24, 0xba, 0x9b, 0x33, 0xd3, 0x59, 0x02, 0x73, 0xe6, 0xed, 0x80, +0xa9, 0x77, 0x40, 0xc3, 0x92, 0xb8, 0x33, 0xb3, 0x14, 0xe3, 0x8c, 0xbe, +0x47, 0x6e, 0xa2, 0xeb, 0x17, 0x98, 0xd7, 0xd2, 0xb7, 0x51, 0xe5, 0x64, +0x30, 0x72, 0x33, 0xba, 0x44, 0x4a, 0xcd, 0xbc, 0x94, 0x92, 0xda, 0x9a, +0x28, 0xde, 0xf4, 0x30, 0x89, 0xf8, 0x18, 0x76, 0xc3, 0x36, 0x3f, 0xc4, +0x46, 0x4a, 0xe1, 0x09, 0xc6, 0x28, 0x40, 0xd6, 0xde, 0xdd, 0xf1, 0x03, +0x14, 0x47, 0x62, 0x8d, 0xd5, 0x84, 0x22, 0x01, 0xbd, 0x02, 0xa6, 0x2d, +0x31, 0x2d, 0x03, 0xc3, 0x97, 0x40, 0xa0, 0xb2, 0x0e, 0xc5, 0xa4, 0x3b, +0x9f, 0x2b, 0x0a, 0x50, 0x6c, 0x5e, 0xcf, 0xbe, 0xde, 0x1b, 0xc8, 0xcd, +0xa2, 0xd2, 0x93, 0x04, 0x49, 0x53, 0x5d, 0x55, 0x39, 0xdf, 0xf0, 0x4a, +0x29, 0xfd, 0x78, 0xdd, 0xb8, 0x72, 0x05, 0x46, 0x3a, 0x8e, 0x72, 0xd2, +0xcc, 0x8c, 0xf4, 0x63, 0x44, 0x1a, 0xb0, 0xa3, 0xbf, 0x89, 0x0c, 0xc4, +0x28, 0x46, 0x2a, 0xf6, 0x50, 0x80, 0xd4, 0xa9, 0xe0, 0x61, 0x69, 0xc8, +0x81, 0x86, 0xe6, 0x7a, 0x5d, 0x3a, 0xff, 0x67, 0x5e, 0x62, 0x98, 0x06, +0xd2, 0x94, 0xe0, 0xba, 0x0b, 0x03, 0xfc, 0xf4, 0x15, 0xbc, 0xa1, 0x13, +0xda, 0xc4, 0xcf, 0x31, 0xaf, 0x67, 0x36, 0x5a, 0x19, 0xc1, 0x4b, 0x27, +0x51, 0xb9, 0x0c, 0x6a, 0x26, 0x8e, 0x91, 0xec, 0xa7, 0xa1, 0x2a, 0x48, +0xd3, 0xb2, 0x06, 0xd6, 0x34, 0x2e, 0xe3, 0xa6, 0xea, 0x10, 0x8c, 0x5f, +0xd2, 0xe7, 0xdc, 0xd4, 0x04, 0xfa, 0x4e, 0xa4, 0x5c, 0x10, 0x12, 0xbb, +0xea, 0xa3, 0x94, 0xe0, 0xfe, 0xe4, 0x77, 0xb7, 0xd4, 0x50, 0x18, 0xa0, +0x6e, 0xf7, 0xa9, 0x6e, 0xa4, 0xd8, 0x1e, 0xa9, 0xaf, 0x18, 0x8c, 0xad, +0xad, 0xc7, 0x0c, 0x58, 0x18, 0x73, 0x21, 0xa4, 0x1f, 0x42, 0x6f, 0x1c, +0x0b, 0x7e, 0x37, 0x28, 0x92, 0x27, 0xff, 0x92, 0x80, 0x9a, 0x06, 0x58, +0x60, 0x1e, 0xd0, 0x9b, 0x9d, 0x98, 0x1d, 0x05, 0x37, 0xed, 0x2b, 0x83, +0x72, 0xb3, 0xa4, 0x7b, 0xcf, 0x92, 0xe9, 0x39, 0x8d, 0x1b, 0xbf, 0x80, +0x3b, 0x7c, 0x0e, 0x77, 0xb4, 0x0b, 0x32, 0x33, 0x3a, 0xe0, 0xc0, 0x99, +0x37, 0x89, 0xad, 0x5e, 0x0f, 0x6e, 0x16, 0x00, 0x33, 0xdc, 0x84, 0x90, +0x16, 0x45, 0x04, 0x33, 0x96, 0xf7, 0x60, 0x61, 0x00, 0x4d, 0xec, 0xee, +0x77, 0x3a, 0x71, 0xd5, 0xed, 0x76, 0x24, 0xd8, 0x1d, 0x59, 0x5e, 0xa3, +0x77, 0x3e, 0x61, 0x18, 0xbe, 0x24, 0x5c, 0x93, 0x10, 0x2c, 0x40, 0x01, +0x13, 0x7d, 0x54, 0x97, 0x07, 0xf4, 0x03, 0x9a, 0x5f, 0xef, 0x5a, 0x65, +0x65, 0x65, 0xac, 0x58, 0xb1, 0x9c, 0x0a, 0x2b, 0x8b, 0x3b, 0x3d, 0xc2, +0xe4, 0xa9, 0x57, 0x70, 0xc6, 0xfa, 0xc9, 0xf4, 0x9e, 0xe3, 0xca, 0xde, +0xbb, 0xe8, 0x7f, 0xf2, 0x4f, 0x75, 0x18, 0xbd, 0x2a, 0xae, 0x16, 0x5e, +0x7a, 0x9a, 0xa1, 0xf7, 0x7e, 0x48, 0x20, 0x68, 0xea, 0xe3, 0x1a, 0x61, +0x20, 0xed, 0xea, 0x52, 0x5f, 0xdb, 0xb2, 0x20, 0x80, 0x0e, 0x71, 0x5f, +0xc7, 0x25, 0x66, 0xed, 0x8d, 0x86, 0x6d, 0x3c, 0x63, 0x47, 0x23, 0x18, +0xd7, 0x42, 0x98, 0x12, 0xa4, 0xa4, 0x14, 0x56, 0xe5, 0x7a, 0x6d, 0xc4, +0x9b, 0xe8, 0xa5, 0xcc, 0x19, 0x63, 0x49, 0x34, 0xcc, 0x8a, 0xba, 0x4a, +0x96, 0xd6, 0x84, 0xb1, 0x92, 0x57, 0xf0, 0x12, 0x7d, 0x4c, 0xb6, 0xbf, +0xc4, 0xe0, 0x77, 0x1f, 0x65, 0xe4, 0xa5, 0x7f, 0xc4, 0x08, 0x57, 0x62, +0x45, 0x97, 0x12, 0x68, 0xdc, 0x00, 0xd7, 0x4c, 0xba, 0xbe, 0x72, 0x59, +0xad, 0xab, 0xe7, 0xcf, 0x12, 0x6b, 0x6e, 0xd3, 0x1b, 0x99, 0x9a, 0x9d, +0x24, 0x8f, 0x30, 0x2b, 0x4a, 0xf4, 0x81, 0x68, 0x67, 0x0e, 0x93, 0x22, +0x62, 0x0f, 0xbe, 0x9d, 0x04, 0x1e, 0x88, 0x1f, 0xd8, 0xf2, 0x9a, 0x08, +0x06, 0xfe, 0x15, 0xa5, 0xaa, 0x11, 0x82, 0x52, 0x98, 0xe5, 0x4d, 0xa0, +0xdc, 0xb9, 0xd9, 0x4c, 0x43, 0x6a, 0x14, 0x94, 0xe7, 0x4b, 0xe9, 0x51, +0xf9, 0x0a, 0x35, 0xb6, 0x10, 0x6c, 0xdc, 0x48, 0xf9, 0xc6, 0x3b, 0x30, +0x82, 0x41, 0x56, 0x3d, 0x7a, 0x10, 0xe5, 0xe6, 0xf4, 0xac, 0xe3, 0x79, +0x80, 0x47, 0x76, 0x7a, 0x9a, 0xa8, 0x7f, 0x3e, 0xdb, 0xff, 0x2e, 0xda, +0xbc, 0x2a, 0xec, 0x39, 0x0f, 0x00, 0x85, 0xca, 0x08, 0x21, 0xff, 0x0b, +0xa5, 0x2e, 0xab, 0xb4, 0xfd, 0xbd, 0x45, 0xfc, 0x5f, 0x48, 0xff, 0x90, +0x59, 0xe6, 0x49, 0xef, 0xdf, 0x81, 0xed, 0x94, 0x20, 0xdc, 0xf4, 0x00, +0x46, 0xb4, 0x09, 0x19, 0x8a, 0x82, 0x52, 0xda, 0x30, 0x79, 0xe1, 0xcd, +0x19, 0x54, 0x20, 0x24, 0xca, 0x75, 0xb4, 0xb1, 0x7c, 0x38, 0xb4, 0x94, +0x3e, 0xde, 0xd7, 0x75, 0x85, 0xda, 0x4d, 0x3b, 0x08, 0x4c, 0x9e, 0x87, +0xcc, 0x14, 0x85, 0xcc, 0x0e, 0xbc, 0x8c, 0x9b, 0x1e, 0x06, 0xc5, 0x1b, +0xb1, 0xdd, 0xa7, 0x7e, 0x87, 0x22, 0x24, 0x1f, 0x40, 0xf4, 0xde, 0xf6, +0x7e, 0xff, 0xa1, 0xe9, 0x53, 0x02, 0x5e, 0x2c, 0xbd, 0x39, 0x4a, 0xbc, +0xa9, 0xab, 0x28, 0x67, 0x16, 0x3d, 0xa3, 0xf3, 0xd2, 0x65, 0xf1, 0xb3, +0x3a, 0xcf, 0xa6, 0x20, 0x97, 0x2f, 0x97, 0x8c, 0x96, 0xf2, 0xe5, 0x39, +0x69, 0x86, 0xfa, 0xe3, 0xac, 0xdc, 0xf1, 0x10, 0xa3, 0x3f, 0x79, 0x6b, +0x81, 0x79, 0x95, 0x9b, 0xc1, 0xcd, 0xc4, 0x01, 0x90, 0x86, 0xfc, 0x73, +0x4a, 0x20, 0xf9, 0x85, 0x28, 0xa5, 0x66, 0xed, 0x07, 0x80, 0x01, 0x8a, +0xf0, 0x72, 0x49, 0xf0, 0x5c, 0xbc, 0xe4, 0x20, 0xda, 0x94, 0xd6, 0xcf, +0x9a, 0x93, 0x9c, 0x0e, 0xe3, 0xab, 0xa0, 0x59, 0xb5, 0xd2, 0xcc, 0x4e, +0x8e, 0x32, 0x9a, 0xc8, 0x11, 0xf1, 0xcb, 0xcb, 0x2a, 0xaf, 0x22, 0x71, +0xb1, 0x1d, 0x85, 0x02, 0x2d, 0x34, 0xd9, 0xc9, 0xf7, 0xe7, 0x56, 0x93, +0x44, 0xf4, 0xee, 0xf6, 0xf6, 0x45, 0x07, 0x28, 0xd9, 0x17, 0x82, 0x33, +0x0b, 0x02, 0x64, 0x46, 0x01, 0x50, 0x99, 0x24, 0xb9, 0x44, 0x2f, 0x38, +0xa9, 0xf9, 0x15, 0x50, 0x05, 0x2b, 0xe0, 0xe9, 0x60, 0x69, 0x3c, 0xff, +0xbc, 0xe7, 0xd7, 0x78, 0xbc, 0xa7, 0x07, 0x63, 0xe5, 0x36, 0x96, 0x6d, +0xdb, 0xcd, 0xec, 0xd8, 0x55, 0xc6, 0x2f, 0x9d, 0x62, 0xf2, 0xf2, 0xbb, +0xfa, 0xfe, 0xaf, 0xf2, 0x7f, 0x5e, 0x96, 0xdc, 0xd4, 0x85, 0x7c, 0xfd, +0x7f, 0x0f, 0x4a, 0x63, 0xb2, 0x58, 0x14, 0x83, 0x14, 0xe1, 0x4c, 0x5d, +0xc2, 0x2c, 0x5f, 0x0d, 0xc0, 0x40, 0x67, 0x17, 0xc9, 0xa1, 0x5e, 0xa2, +0xcb, 0x9b, 0xa8, 0xa8, 0x89, 0x11, 0xa8, 0xa8, 0xc4, 0xb0, 0x02, 0x28, +0x5c, 0x1d, 0x60, 0x7a, 0x74, 0x84, 0xac, 0x11, 0x25, 0xb4, 0x6c, 0x03, +0x86, 0x17, 0x27, 0xb2, 0xbc, 0x79, 0xfe, 0x19, 0xad, 0x63, 0xdf, 0x67, +0x71, 0xd3, 0x49, 0xf0, 0x72, 0x28, 0x69, 0x22, 0x84, 0x81, 0xe3, 0xf7, +0x83, 0xf2, 0x1c, 0x50, 0x24, 0x6b, 0x77, 0x9f, 0xfe, 0xf2, 0x2f, 0x1d, +0x40, 0x21, 0x7a, 0x04, 0x8a, 0x42, 0xdc, 0xd9, 0x01, 0xbd, 0x0a, 0x32, +0x10, 0x63, 0xd9, 0xda, 0xd5, 0xa8, 0x75, 0xcd, 0x5c, 0xed, 0xee, 0x65, +0x78, 0x64, 0x86, 0x9a, 0xd8, 0x06, 0x7f, 0x66, 0x3b, 0x88, 0x36, 0x6f, +0x26, 0x50, 0xdf, 0x40, 0x76, 0xf6, 0x1c, 0xcb, 0x6e, 0xdb, 0x09, 0x40, +0x7a, 0x6c, 0x90, 0xec, 0xd4, 0x28, 0x0a, 0xb8, 0x70, 0xf0, 0x71, 0xa6, +0x07, 0x3a, 0x09, 0x46, 0xeb, 0x51, 0x80, 0x00, 0x72, 0x33, 0x3d, 0x64, +0x13, 0x3f, 0xca, 0x17, 0xf0, 0x83, 0xe8, 0x3a, 0x2a, 0x8d, 0x64, 0xb1, +0x28, 0xef, 0x0c, 0x25, 0x48, 0x0f, 0x1f, 0x45, 0xcf, 0x14, 0x20, 0x94, +0xc3, 0xd2, 0xa6, 0x9b, 0x58, 0xb9, 0x76, 0x29, 0xce, 0xc8, 0x45, 0x2a, +0x9b, 0x5a, 0x70, 0xa6, 0x27, 0x29, 0xab, 0x5d, 0xc1, 0xd2, 0x4f, 0x7c, +0x86, 0xe1, 0x1f, 0xbf, 0x0e, 0x80, 0xe7, 0x3a, 0xbc, 0xff, 0xf4, 0xd7, +0x79, 0xfd, 0xa1, 0x66, 0x26, 0xfe, 0xe7, 0xc7, 0x00, 0x54, 0x2c, 0x5b, +0x8d, 0xbe, 0x29, 0xa4, 0xfa, 0xc8, 0x0c, 0x1f, 0xc9, 0x7b, 0x3e, 0x55, +0x7b, 0x6f, 0xc7, 0x7f, 0xdc, 0xb0, 0xf7, 0x03, 0x63, 0x07, 0x5a, 0xbf, +0xa9, 0x04, 0xdf, 0x40, 0x70, 0x59, 0x28, 0x4e, 0x28, 0xb8, 0x0f, 0xc0, +0x08, 0xd4, 0x12, 0xa8, 0xdf, 0x8e, 0xb4, 0x2a, 0xf2, 0x35, 0x8b, 0x52, +0xfa, 0x49, 0x93, 0xc1, 0x9f, 0xf6, 0x32, 0xda, 0xdd, 0x45, 0xd5, 0xaa, +0x8d, 0x24, 0xfb, 0x2f, 0xf9, 0xea, 0xd4, 0xa6, 0x0b, 0xd0, 0x3b, 0x7e, +0xdb, 0xe7, 0x1f, 0x27, 0x12, 0x1c, 0xf3, 0xcd, 0x1f, 0xcb, 0x37, 0x72, +0x7f, 0x2c, 0xe9, 0xad, 0xe2, 0xe1, 0xd3, 0xce, 0x8d, 0x0a, 0xa0, 0x19, +0x39, 0xd8, 0x56, 0x3f, 0x55, 0x35, 0x36, 0xb1, 0xe6, 0x77, 0xbb, 0x32, +0xa3, 0xcf, 0xb5, 0x3e, 0x8c, 0xc7, 0x93, 0x80, 0x14, 0xd2, 0x22, 0x10, +0xdb, 0x8a, 0x19, 0xf9, 0xc8, 0x5c, 0x00, 0x17, 0xe5, 0xe5, 0xc0, 0x73, +0x98, 0x99, 0x9a, 0xe1, 0xcc, 0xf3, 0x4f, 0x33, 0x3d, 0x78, 0x85, 0x62, +0x82, 0xd5, 0x75, 0xb4, 0xdc, 0xfd, 0x39, 0x2a, 0xad, 0x4e, 0x72, 0x53, +0x5d, 0x79, 0xf3, 0xe3, 0x63, 0xe1, 0xa9, 0xc6, 0x75, 0x77, 0x5e, 0x4c, +0xfe, 0xbf, 0xbf, 0x62, 0x1a, 0x7e, 0xae, 0xad, 0xcd, 0xf0, 0xbc, 0xa3, +0x40, 0x08, 0xbd, 0x3b, 0xaf, 0xc2, 0xaa, 0x5a, 0x8f, 0xb4, 0x6b, 0x50, +0x80, 0xde, 0x91, 0x3d, 0x0f, 0x4f, 0x41, 0xef, 0x4f, 0xce, 0xd1, 0xd7, +0xfe, 0x3a, 0xb9, 0x74, 0x8a, 0xf2, 0x86, 0x46, 0x1a, 0x36, 0xde, 0x4a, +0x5d, 0x43, 0x1a, 0x4f, 0xd7, 0xfb, 0x3c, 0x5d, 0x6e, 0x2e, 0xf3, 0x5b, +0xf5, 0xf7, 0x9f, 0x1d, 0xf9, 0xd5, 0xbd, 0x23, 0xfb, 0x97, 0x96, 0x72, +0x51, 0x1d, 0xde, 0x0f, 0xea, 0x0f, 0x00, 0x01, 0x80, 0x30, 0x31, 0x82, +0x75, 0xc8, 0xb2, 0x25, 0x48, 0xab, 0x5a, 0xbf, 0x13, 0xc0, 0x9b, 0xdb, +0xf0, 0x54, 0x16, 0x77, 0x76, 0x04, 0x2f, 0x9b, 0x28, 0xfa, 0xad, 0xc2, +0xbe, 0x9a, 0x5d, 0xa7, 0xbe, 0xf6, 0x2b, 0x7f, 0xc9, 0x97, 0x67, 0xe2, +0xc0, 0xa6, 0x95, 0xae, 0xb4, 0xbe, 0xaf, 0x94, 0x6a, 0x05, 0xe4, 0xa2, +0x0c, 0x80, 0xe3, 0x29, 0x8e, 0x92, 0x95, 0x5f, 0xa8, 0xdd, 0xd3, 0xde, +0xf5, 0xeb, 0x78, 0x4b, 0xb9, 0x90, 0x17, 0x84, 0x11, 0x77, 0x5b, 0xf7, +0x48, 0xa5, 0x1e, 0x52, 0xd0, 0x0c, 0x84, 0x00, 0x7b, 0x2e, 0x94, 0x03, +0x8c, 0x03, 0x7d, 0x0a, 0x5e, 0xac, 0xdd, 0xd5, 0xb1, 0x4f, 0xd7, 0xd9, +0x87, 0xe4, 0x7f, 0x01, 0x9c, 0x0b, 0xc5, 0xc1, 0xee, 0xb9, 0xae, 0x42, +0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +]) + +def front(): + global content + content = "

    Hello friend. Have you seen this guy?

    \n



    Why yes I have
    No, who's he?
    Canada
    " + +def points(): + global content + content = "

    Correct!

    \n

    Visit him.
    " + +def wrong(): + global content + content = "

    I'm a sad puppy.

    \n
    " + +def listf(vhost, url, get, get_len, post, post_len, header): + global content + global image + ret = {} + if url == '/image.png': + ret['content'] = image + ret['content_len'] = len(ret['content']) + ret['return'] = 1 + return ret + if post is None: + front() + elif 'q1=who' in post or 'q1=yes' in post: + points() + else: + wrong() + + ret['content'] = content + ret['content_len'] = len(ret['content']) + ret['return'] = 1 + + return ret + +monkey.init(None, 0, 0, None) +monkey.set_callback('data', listf) +monkey.start() +raw_input("Press enter to stop the server...") +monkey.stop() diff --git a/src/fluent-bit/lib/monkey/fuzz/CMakeLists.txt b/src/fluent-bit/lib/monkey/fuzz/CMakeLists.txt new file mode 100644 index 000000000..48100f5f3 --- /dev/null +++ b/src/fluent-bit/lib/monkey/fuzz/CMakeLists.txt @@ -0,0 +1,11 @@ +set(src + mk_fuzz_me.c) + +add_executable(mk_fuzz_me ${src}) +target_link_libraries(mk_fuzz_me monkey-core-static) + +set(src + mk_check.c) + +add_executable(mk_check ${src}) +target_link_libraries(mk_check monkey-core-static) diff --git a/src/fluent-bit/lib/monkey/fuzz/mk_check.c b/src/fluent-bit/lib/monkey/fuzz/mk_check.c new file mode 100644 index 000000000..acae6cba0 --- /dev/null +++ b/src/fluent-bit/lib/monkey/fuzz/mk_check.c @@ -0,0 +1,113 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +#include + +#include +#include +#include +#include + +#define API_ADDR "127.0.0.1" +#define API_PORT "8080" + +/* Main context set as global so the signal handler can use it */ +mk_ctx_t *ctx; + +void cb_main(mk_request_t *request, void *data) +{ + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + mk_http_send(request, ":)\n", 3, NULL); + mk_http_done(request); +} + +void cb_test_chunks(mk_request_t *request, void *data) +{ + int i = 0; + int len; + char tmp[32]; + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + for (i = 0; i < 1000; i++) { + len = snprintf(tmp, sizeof(tmp) -1, "test-chunk %6i\n ", i); + mk_http_send(request, tmp, len, NULL); + } + mk_http_done(request); +} + +void cb_test_big_chunk(mk_request_t *request, void *data) +{ + size_t chunk_size = 1024000000; + char *chunk; + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + chunk = calloc(1, chunk_size); + mk_http_send(request, chunk, chunk_size, NULL); + free(chunk); + mk_http_done(request); +} + + +static void signal_handler(int signal) +{ + write(STDERR_FILENO, "[engine] caught signal\n", 23); + + switch (signal) { + case SIGTERM: + case SIGINT: + mk_stop(ctx); + mk_destroy(ctx); + _exit(EXIT_SUCCESS); + default: + break; + } +} + +static void signal_init() +{ + signal(SIGINT, &signal_handler); + signal(SIGTERM, &signal_handler); +} + +int main() +{ + int vid; + + signal_init(); + + ctx = mk_create(); + if (!ctx) { + return -1; + } + + mk_config_set(ctx, + "Listen", API_PORT, + NULL); + + vid = mk_vhost_create(ctx, NULL); + mk_vhost_set(ctx, vid, + "Name", "monotop", + NULL); + mk_vhost_handler(ctx, vid, "/test_chunks", cb_test_chunks, NULL); + mk_vhost_handler(ctx, vid, "/test_big_chunk", cb_test_big_chunk, NULL); + mk_vhost_handler(ctx, vid, "/", cb_main, NULL); + + mk_info("Service: http://%s:%s/test_chunks", API_ADDR, API_PORT); + mk_start(ctx); + + sleep(3600); + + mk_stop(ctx); + mk_destroy(ctx); + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/fuzz/mk_fuzz_me.c b/src/fluent-bit/lib/monkey/fuzz/mk_fuzz_me.c new file mode 100644 index 000000000..0a88d3f1f --- /dev/null +++ b/src/fluent-bit/lib/monkey/fuzz/mk_fuzz_me.c @@ -0,0 +1,143 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +#include + +#include +#include +#include +#include + +#define API_ADDR "127.0.0.1" +#define API_PORT "8080" + +/* Main context set as global so the signal handler can use it */ +mk_ctx_t *ctx; + +void cb_main(mk_request_t *request, void *data) +{ + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + mk_http_send(request, ":)\n", 3, NULL); + mk_http_done(request); +} + +void cb_test_chunks(mk_request_t *request, void *data) +{ + int i = 0; + int len; + char tmp[32]; + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + for (i = 0; i < 1000; i++) { + len = snprintf(tmp, sizeof(tmp) -1, "test-chunk %6i\n ", i); + mk_http_send(request, tmp, len, NULL); + } + mk_http_done(request); +} + +void cb_test_big_chunk(mk_request_t *request, void *data) +{ + size_t chunk_size = 1024000000; + char *chunk; + (void) data; + + mk_http_status(request, 200); + mk_http_header(request, "X-Monkey", 8, "OK", 2); + + chunk = calloc(1, chunk_size); + mk_http_send(request, chunk, chunk_size, NULL); + free(chunk); + mk_http_done(request); +} + + +static void signal_handler(int signal) +{ + write(STDERR_FILENO, "[engine] caught signal\n", 23); + + switch (signal) { + case SIGTERM: + case SIGINT: + mk_stop(ctx); + mk_destroy(ctx); + _exit(EXIT_SUCCESS); + default: + break; + } +} + +static void signal_init() +{ + signal(SIGINT, &signal_handler); + signal(SIGTERM, &signal_handler); +} + +static void cb_queue_message(mk_mq_t *queue, void *data, size_t size, void *ctx) +{ + size_t i; + char *buf; + (void) ctx; + (void) queue; + + printf("=== cb queue message === \n"); + printf(" => %lu bytes\n", size); + printf(" => "); + + buf = data; + for (i = 0; i < size; i++) { + printf("%c", buf[i]); + } + printf("\n\n"); +} + + +HFND_FUZZING_ENTRY_FUNCTION(int argc, const char *const *argv) +{ + int i = 0; + int len; + int vid; + int qid; + char msg[800000]; + + signal_init(); + + ctx = mk_create(); + if (!ctx) { + return -1; + } + + /* Create a message queue and a callback for each message */ + qid = mk_mq_create(ctx, "/data", cb_queue_message, NULL); + + mk_config_set(ctx, + "Listen", API_PORT, + NULL); + + vid = mk_vhost_create(ctx, NULL); + mk_vhost_set(ctx, vid, + "Name", "monotop", + NULL); + mk_vhost_handler(ctx, vid, "/test_chunks", cb_test_chunks, NULL); + mk_vhost_handler(ctx, vid, "/test_big_chunk", cb_test_big_chunk, NULL); + mk_vhost_handler(ctx, vid, "/", cb_main, NULL); + + mk_info("Service: http://%s:%s/test_chunks", API_ADDR, API_PORT); + mk_start(ctx); + + for (i = 0; i < 5; i++) { + len = snprintf(msg, sizeof(msg) - 1, "[...] message ID: %i\n", i); + mk_mq_send(ctx, qid, &msg, len); + } + + sleep(3600); + + mk_stop(ctx); + mk_destroy(ctx); + + return 0; +} diff --git a/src/fluent-bit/lib/monkey/htdocs/CMakeLists.txt b/src/fluent-bit/lib/monkey/htdocs/CMakeLists.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/CMakeLists.txt @@ -0,0 +1 @@ + diff --git a/src/fluent-bit/lib/monkey/htdocs/css/bootstrap.min.css b/src/fluent-bit/lib/monkey/htdocs/css/bootstrap.min.css new file mode 100644 index 000000000..052f28afd --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/css/bootstrap.min.css @@ -0,0 +1,7 @@ +@import url("//fonts.googleapis.com/css?family=Lato:400,700,400italic");/*! + * bootswatch v3.3.4+1 + * Homepage: http://bootswatch.com + * Copyright 2012-2015 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.42857143;color:#2c3e50;background-color:#ffffff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#18bc9c;text-decoration:none}a:hover,a:focus{color:#18bc9c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#ffffff;border:1px solid #ecf0f1;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:21px;margin-bottom:21px;border:0;border-top:1px solid #ecf0f1}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#b4bcc2}h1,.h1,h2,.h2,h3,.h3{margin-top:21px;margin-bottom:10.5px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10.5px;margin-bottom:10.5px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:39px}h2,.h2{font-size:32px}h3,.h3{font-size:26px}h4,.h4{font-size:19px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:17px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:22.5px}}small,.small{font-size:86%}mark,.mark{background-color:#f39c12;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#b4bcc2}.text-primary{color:#2c3e50}a.text-primary:hover{color:#1a242f}.text-success{color:#ffffff}a.text-success:hover{color:#e6e6e6}.text-info{color:#ffffff}a.text-info:hover{color:#e6e6e6}.text-warning{color:#ffffff}a.text-warning:hover{color:#e6e6e6}.text-danger{color:#ffffff}a.text-danger:hover{color:#e6e6e6}.bg-primary{color:#fff;background-color:#2c3e50}a.bg-primary:hover{background-color:#1a242f}.bg-success{background-color:#18bc9c}a.bg-success:hover{background-color:#128f76}.bg-info{background-color:#3498db}a.bg-info:hover{background-color:#217dbb}.bg-warning{background-color:#f39c12}a.bg-warning:hover{background-color:#c87f0a}.bg-danger{background-color:#e74c3c}a.bg-danger:hover{background-color:#d62c1a}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid transparent}ul,ol{margin-top:0;margin-bottom:10.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:21px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #b4bcc2}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #ecf0f1}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#b4bcc2}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #ecf0f1;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:21px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#7b8a8b;background-color:#ecf0f1;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#b4bcc2;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:21px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ecf0f1}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ecf0f1}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ecf0f1}.table .table{background-color:#ffffff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ecf0f1}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ecf0f1}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#ecf0f1}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#ecf0f1}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#dde4e6}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#18bc9c}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#15a589}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#3498db}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#258cd1}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#f39c12}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#e08e0b}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#e74c3c}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#e43725}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15.75px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ecf0f1}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:inherit;color:#2c3e50;border:0;border-bottom:1px solid transparent}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:11px;font-size:15px;line-height:1.42857143;color:#2c3e50}.form-control{display:block;width:100%;height:43px;padding:10px 15px;font-size:15px;line-height:1.42857143;color:#2c3e50;background-color:#ffffff;background-image:none;border:1px solid #dce4ec;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#2c3e50;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(44,62,80,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(44,62,80,0.6)}.form-control::-moz-placeholder{color:#acb6c0;opacity:1}.form-control:-ms-input-placeholder{color:#acb6c0}.form-control::-webkit-input-placeholder{color:#acb6c0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#ecf0f1;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:43px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:33px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:64px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:21px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:11px;padding-bottom:11px;margin-bottom:0;min-height:36px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:33px;padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}select.input-sm{height:33px;line-height:33px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:33px;padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:33px;line-height:33px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:33px;padding:6px 9px;font-size:13px;line-height:1.5;min-height:34px}.input-lg{height:64px;padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}select.input-lg{height:64px;line-height:64px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:64px;padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:64px;line-height:64px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:64px;padding:18px 27px;font-size:19px;line-height:1.3333333;min-height:40px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:53.75px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:43px;height:43px;line-height:43px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:64px;height:64px;line-height:64px}.input-sm+.form-control-feedback{width:33px;height:33px;line-height:33px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#ffffff}.has-success .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#18bc9c}.has-success .form-control-feedback{color:#ffffff}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffffff}.has-warning .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#f39c12}.has-warning .form-control-feedback{color:#ffffff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ffffff}.has-error .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#e74c3c}.has-error .form-control-feedback{color:#ffffff}.has-feedback label~.form-control-feedback{top:26px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#597ea2}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:11px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:32px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:11px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:24.9999994px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:7px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:10px 15px;font-size:15px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ffffff;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#ffffff;background-color:#95a5a6;border-color:#95a5a6}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ffffff;background-color:#798d8f;border-color:#74898a}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#95a5a6;border-color:#95a5a6}.btn-default .badge{color:#95a5a6;background-color:#ffffff}.btn-primary{color:#ffffff;background-color:#2c3e50;border-color:#2c3e50}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#1a242f;border-color:#161f29}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#2c3e50;border-color:#2c3e50}.btn-primary .badge{color:#2c3e50;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#18bc9c;border-color:#18bc9c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#128f76;border-color:#11866f}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#18bc9c;border-color:#18bc9c}.btn-success .badge{color:#18bc9c;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#3498db;border-color:#3498db}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#217dbb;border-color:#2077b2}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#3498db;border-color:#3498db}.btn-info .badge{color:#3498db;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#f39c12;border-color:#f39c12}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#c87f0a;border-color:#be780a}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f39c12;border-color:#f39c12}.btn-warning .badge{color:#f39c12;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#e74c3c;border-color:#e74c3c}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#d62c1a;border-color:#cd2a19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#e74c3c;border-color:#e74c3c}.btn-danger .badge{color:#e74c3c;background-color:#ffffff}.btn-link{color:#18bc9c;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#18bc9c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#b4bcc2;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:13px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;-o-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:15px;text-align:left;background-color:#ffffff;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#7b8a8b;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#ffffff;background-color:#2c3e50}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#2c3e50}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#b4bcc2}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:13px;line-height:1.42857143;color:#b4bcc2;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:64px;padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:64px;line-height:64px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:33px;padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:33px;line-height:33px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:10px 15px;font-size:15px;font-weight:normal;line-height:1;color:#2c3e50;text-align:center;background-color:#ecf0f1;border:1px solid #dce4ec;border-radius:4px}.input-group-addon.input-sm{padding:6px 9px;font-size:13px;border-radius:3px}.input-group-addon.input-lg{padding:18px 27px;font-size:19px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#ecf0f1}.nav>li.disabled>a{color:#b4bcc2}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#b4bcc2;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#ecf0f1;border-color:#18bc9c}.nav .nav-divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ecf0f1}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#ecf0f1 #ecf0f1 #ecf0f1}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#2c3e50;background-color:#ffffff;border:1px solid #ecf0f1;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ecf0f1}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ecf0f1;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#ffffff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#2c3e50}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ecf0f1}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ecf0f1;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#ffffff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:60px;margin-bottom:21px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:19.5px 15px;font-size:19px;line-height:21px;height:60px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:13px;margin-bottom:13px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:9.75px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:21px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:21px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:19.5px;padding-bottom:19.5px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8.5px;margin-bottom:8.5px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8.5px;margin-bottom:8.5px}.navbar-btn.btn-sm{margin-top:13.5px;margin-bottom:13.5px}.navbar-btn.btn-xs{margin-top:19px;margin-bottom:19px}.navbar-text{margin-top:19.5px;margin-bottom:19.5px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#2c3e50;border-color:transparent}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#18bc9c;background-color:transparent}.navbar-default .navbar-text{color:#777777}.navbar-default .navbar-nav>li>a{color:#ffffff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#18bc9c;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#1a242f}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#1a242f}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#1a242f}.navbar-default .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#1a242f;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#18bc9c;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#1a242f}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-default .navbar-link{color:#ffffff}.navbar-default .navbar-link:hover{color:#18bc9c}.navbar-default .btn-link{color:#ffffff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#18bc9c}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#cccccc}.navbar-inverse{background-color:#18bc9c;border-color:transparent}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#2c3e50;background-color:transparent}.navbar-inverse .navbar-text{color:#ffffff}.navbar-inverse .navbar-nav>li>a{color:#ffffff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#2c3e50;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#15a589}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#128f76}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#128f76}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#149c82}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#15a589;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#2c3e50;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#15a589}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-inverse .navbar-link{color:#ffffff}.navbar-inverse .navbar-link:hover{color:#2c3e50}.navbar-inverse .btn-link{color:#ffffff}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#2c3e50}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#cccccc}.breadcrumb{padding:8px 15px;margin-bottom:21px;list-style:none;background-color:#ecf0f1;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#cccccc}.breadcrumb>.active{color:#95a5a6}.pagination{display:inline-block;padding-left:0;margin:21px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:10px 15px;line-height:1.42857143;text-decoration:none;color:#ffffff;background-color:#18bc9c;border:1px solid transparent;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#ffffff;background-color:#0f7864;border-color:transparent}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#ffffff;background-color:#0f7864;border-color:transparent;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#ecf0f1;background-color:#3be6c4;border-color:transparent;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:18px 27px;font-size:19px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:6px 9px;font-size:13px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:21px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#18bc9c;border:1px solid transparent;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#0f7864}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#ffffff;background-color:#18bc9c;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#95a5a6}.label-default[href]:hover,.label-default[href]:focus{background-color:#798d8f}.label-primary{background-color:#2c3e50}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#1a242f}.label-success{background-color:#18bc9c}.label-success[href]:hover,.label-success[href]:focus{background-color:#128f76}.label-info{background-color:#3498db}.label-info[href]:hover,.label-info[href]:focus{background-color:#217dbb}.label-warning{background-color:#f39c12}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#c87f0a}.label-danger{background-color:#e74c3c}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#d62c1a}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:13px;font-weight:bold;color:#ffffff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#2c3e50;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2c3e50;background-color:#ffffff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#ecf0f1}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:23px;font-weight:200}.jumbotron>hr{border-top-color:#cfd9db}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:67.5px}}.thumbnail{display:block;padding:4px;margin-bottom:21px;line-height:1.42857143;background-color:#ffffff;border:1px solid #ecf0f1;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#18bc9c}.thumbnail .caption{padding:9px;color:#2c3e50}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#18bc9c;border-color:#18bc9c;color:#ffffff}.alert-success hr{border-top-color:#15a589}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#3498db;border-color:#3498db;color:#ffffff}.alert-info hr{border-top-color:#258cd1}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#f39c12;border-color:#f39c12;color:#ffffff}.alert-warning hr{border-top-color:#e08e0b}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#e74c3c;border-color:#e74c3c;color:#ffffff}.alert-danger hr{border-top-color:#e43725}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:21px;margin-bottom:21px;background-color:#ecf0f1;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:13px;line-height:21px;color:#ffffff;text-align:center;background-color:#2c3e50;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#18bc9c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#3498db}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#e74c3c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#ffffff;border:1px solid #ecf0f1}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555555}a.list-group-item .list-group-item-heading{color:#333333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555555;background-color:#ecf0f1}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#ecf0f1;color:#b4bcc2;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#b4bcc2}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#2c3e50;border-color:#2c3e50}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#8aa4be}.list-group-item-success{color:#ffffff;background-color:#18bc9c}a.list-group-item-success{color:#ffffff}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#ffffff;background-color:#15a589}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-info{color:#ffffff;background-color:#3498db}a.list-group-item-info{color:#ffffff}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#ffffff;background-color:#258cd1}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-warning{color:#ffffff;background-color:#f39c12}a.list-group-item-warning{color:#ffffff}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#ffffff;background-color:#e08e0b}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-danger{color:#ffffff;background-color:#e74c3c}a.list-group-item-danger{color:#ffffff}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#ffffff;background-color:#e43725}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:21px;background-color:#ffffff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:17px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#ecf0f1;border-top:1px solid #ecf0f1;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ecf0f1}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:21px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ecf0f1}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ecf0f1}.panel-default{border-color:#ecf0f1}.panel-default>.panel-heading{color:#2c3e50;background-color:#ecf0f1;border-color:#ecf0f1}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ecf0f1}.panel-default>.panel-heading .badge{color:#ecf0f1;background-color:#2c3e50}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ecf0f1}.panel-primary{border-color:#2c3e50}.panel-primary>.panel-heading{color:#ffffff;background-color:#2c3e50;border-color:#2c3e50}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2c3e50}.panel-primary>.panel-heading .badge{color:#2c3e50;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2c3e50}.panel-success{border-color:#18bc9c}.panel-success>.panel-heading{color:#ffffff;background-color:#18bc9c;border-color:#18bc9c}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#18bc9c}.panel-success>.panel-heading .badge{color:#18bc9c;background-color:#ffffff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#18bc9c}.panel-info{border-color:#3498db}.panel-info>.panel-heading{color:#ffffff;background-color:#3498db;border-color:#3498db}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3498db}.panel-info>.panel-heading .badge{color:#3498db;background-color:#ffffff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3498db}.panel-warning{border-color:#f39c12}.panel-warning>.panel-heading{color:#ffffff;background-color:#f39c12;border-color:#f39c12}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f39c12}.panel-warning>.panel-heading .badge{color:#f39c12;background-color:#ffffff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f39c12}.panel-danger{border-color:#e74c3c}.panel-danger>.panel-heading{color:#ffffff;background-color:#e74c3c;border-color:#e74c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e74c3c}.panel-danger>.panel-heading .badge{color:#e74c3c;background-color:#ffffff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e74c3c}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#ecf0f1;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:22.5px;font-weight:bold;line-height:1;color:#000000;text-shadow:none;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#ffffff;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:15px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.navbar{border-width:0}.navbar-default .badge{background-color:#fff;color:#2c3e50}.navbar-inverse .badge{background-color:#fff;color:#18bc9c}.navbar-brand{line-height:1}.btn:active{-webkit-box-shadow:none;box-shadow:none}.btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.text-primary,.text-primary:hover{color:#2c3e50}.text-success,.text-success:hover{color:#18bc9c}.text-danger,.text-danger:hover{color:#e74c3c}.text-warning,.text-warning:hover{color:#f39c12}.text-info,.text-info:hover{color:#3498db}table a:not(.btn),.table a:not(.btn){text-decoration:underline}table .dropdown-menu a,.table .dropdown-menu a{text-decoration:none}table .success,.table .success,table .warning,.table .warning,table .danger,.table .danger,table .info,.table .info{color:#fff}table .success>th>a,.table .success>th>a,table .warning>th>a,.table .warning>th>a,table .danger>th>a,.table .danger>th>a,table .info>th>a,.table .info>th>a,table .success>td>a,.table .success>td>a,table .warning>td>a,.table .warning>td>a,table .danger>td>a,.table .danger>td>a,table .info>td>a,.table .info>td>a,table .success>a,.table .success>a,table .warning>a,.table .warning>a,table .danger>a,.table .danger>a,table .info>a,.table .info>a{color:#fff}table>thead>tr>th,.table>thead>tr>th,table>tbody>tr>th,.table>tbody>tr>th,table>tfoot>tr>th,.table>tfoot>tr>th,table>thead>tr>td,.table>thead>tr>td,table>tbody>tr>td,.table>tbody>tr>td,table>tfoot>tr>td,.table>tfoot>tr>td{border:none}table-bordered>thead>tr>th,.table-bordered>thead>tr>th,table-bordered>tbody>tr>th,.table-bordered>tbody>tr>th,table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>th,table-bordered>thead>tr>td,.table-bordered>thead>tr>td,table-bordered>tbody>tr>td,.table-bordered>tbody>tr>td,table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ecf0f1}.form-control,input{border-width:2px;-webkit-box-shadow:none;box-shadow:none}.form-control:focus,input:focus{-webkit-box-shadow:none;box-shadow:none}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning .form-control-feedback{color:#f39c12}.has-warning .form-control,.has-warning .form-control:focus{border:2px solid #f39c12}.has-warning .input-group-addon{border-color:#f39c12}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error .form-control-feedback{color:#e74c3c}.has-error .form-control,.has-error .form-control:focus{border:2px solid #e74c3c}.has-error .input-group-addon{border-color:#e74c3c}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success .form-control-feedback{color:#18bc9c}.has-success .form-control,.has-success .form-control:focus{border:2px solid #18bc9c}.has-success .input-group-addon{border-color:#18bc9c}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:transparent}.pager a,.pager a:hover{color:#fff}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{background-color:#3be6c4}.close{color:#fff;text-decoration:none;opacity:0.4}.close:hover,.close:focus{color:#fff;opacity:1}.alert .alert-link{color:#fff;text-decoration:underline}.progress{height:10px;-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:#ecf0f1}a.list-group-item-success.active{background-color:#18bc9c}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#15a589}a.list-group-item-warning.active{background-color:#f39c12}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#e08e0b}a.list-group-item-danger.active{background-color:#e74c3c}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#e43725}.panel-default .close{color:#2c3e50}.modal .close{color:#2c3e50}.popover{color:#2c3e50} \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/css/freelancer.css b/src/fluent-bit/lib/monkey/htdocs/css/freelancer.css new file mode 100644 index 000000000..89038db25 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/css/freelancer.css @@ -0,0 +1,459 @@ +/*! + * Start Bootstrap - Freelancer Bootstrap Theme (http://startbootstrap.com) + * Code licensed under the Apache License v2.0. + * For details, see http://www.apache.org/licenses/LICENSE-2.0. + */ + +body { + overflow-x: hidden; +} + +p { + font-size: 20px; +} + +p.small { + font-size: 16px; +} + +a, +a:hover, +a:focus, +a:active, +a.active { + outline: 0; + color: #18bc9c; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + text-transform: uppercase; + font-family: Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif; + font-weight: 700; +} + +hr.star-light, +hr.star-primary { + margin: 25px auto 30px; + padding: 0; + max-width: 250px; + border: 0; + border-top: solid 5px; + text-align: center; +} + +hr.star-light:after, +hr.star-primary:after { + content: "\f005"; + display: inline-block; + position: relative; + top: -.8em; + padding: 0 .25em; + font-family: FontAwesome; + font-size: 2em; +} + +hr.star-light { + border-color: #fff; +} + +hr.star-light:after { + color: #fff; + background-color: #18bc9c; +} + +hr.star-primary { + border-color: #2c3e50; +} + +hr.star-primary:after { + color: #2c3e50; + background-color: #fff; +} + +.img-centered { + margin: 0 auto; +} + +header { + text-align: center; + color: #fff; + background: #18bc9c; +} + +header .container { + padding-top: 100px; + padding-bottom: 50px; +} + +header img { + display: block; + margin: 0 auto 20px; +} + +header .intro-text .name { + display: block; + text-transform: uppercase; + font-family: Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 2em; + font-weight: 700; +} + +header .intro-text .skills { + font-size: 1.25em; + font-weight: 300; +} + +@media(min-width:768px) { + header .container { + padding-top: 200px; + padding-bottom: 100px; + } + + header .intro-text .name { + font-size: 4.75em; + } + + header .intro-text .skills { + font-size: 1.75em; + } +} + +@media(min-width:768px) { + .navbar-fixed-top { + padding: 25px 0; + -webkit-transition: padding .3s; + -moz-transition: padding .3s; + transition: padding .3s; + } + + .navbar-fixed-top .navbar-brand { + font-size: 2em; + -webkit-transition: all .3s; + -moz-transition: all .3s; + transition: all .3s; + } + + .navbar-fixed-top.navbar-shrink { + padding: 10px 0; + } + + .navbar-fixed-top.navbar-shrink .navbar-brand { + font-size: 1.5em; + } +} + +.navbar { + text-transform: uppercase; + font-family: Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif; + font-weight: 700; +} + +.navbar a:focus { + outline: 0; + +} +.navbar .navbar-nav { + letter-spacing: 1px; +} + +.navbar .navbar-nav li a:focus { + outline: 0; +} + +.navbar-default, +.navbar-inverse { + border: 0; +} + +section { + padding: 100px 0; +} + +section h2 { + margin: 0; + font-size: 3em; +} + +section.success { + color: #fff; + background: #18bc9c; +} + +section.success a, +section.success a:hover, +section.success a:focus, +section.success a:active, +section.success a.active { + outline: 0; + color: #2c3e50; +} + +@media(max-width:767px) { + section { + padding: 75px 0; + } + + section.first { + padding-top: 75px; + } +} + +#portfolio .portfolio-item { + right: 0; + margin: 0 0 15px; +} + +#portfolio .portfolio-item .portfolio-link { + display: block; + position: relative; + margin: 0 auto; + max-width: 400px; +} + +#portfolio .portfolio-item .portfolio-link .caption { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + background: rgba(24,188,156,.9); + -webkit-transition: all ease .5s; + -moz-transition: all ease .5s; + transition: all ease .5s; +} + +#portfolio .portfolio-item .portfolio-link .caption:hover { + opacity: 1; +} + +#portfolio .portfolio-item .portfolio-link .caption .caption-content { + position: absolute; + top: 50%; + width: 100%; + height: 20px; + margin-top: -12px; + text-align: center; + font-size: 20px; + color: #fff; +} + +#portfolio .portfolio-item .portfolio-link .caption .caption-content i { + margin-top: -12px; +} + +#portfolio .portfolio-item .portfolio-link .caption .caption-content h3, +#portfolio .portfolio-item .portfolio-link .caption .caption-content h4 { + margin: 0; +} + +#portfolio * { + z-index: 2; +} + +@media(min-width:767px) { + #portfolio .portfolio-item { + margin: 0 0 30px; + } +} + +.btn-outline { + margin-top: 15px; + border: solid 2px #fff; + font-size: 20px; + color: #fff; + background: 0 0; + transition: all .3s ease-in-out; +} + +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active, +.btn-outline.active { + border: solid 2px #fff; + color: #18bc9c; + background: #fff; +} + +.floating-label-form-group { + position: relative; + margin-bottom: 0; + padding-bottom: .5em; + border-bottom: 1px solid #eee; +} + +.floating-label-form-group input, +.floating-label-form-group textarea { + z-index: 1; + position: relative; + padding-right: 0; + padding-left: 0; + border: 0; + border-radius: 0; + font-size: 1.5em; + background: 0 0; + box-shadow: none!important; + resize: none; +} + +.floating-label-form-group label { + display: block; + z-index: 0; + position: relative; + top: 2em; + margin: 0; + font-size: .85em; + line-height: 1.764705882em; + vertical-align: middle; + vertical-align: baseline; + opacity: 0; + -webkit-transition: top .3s ease,opacity .3s ease; + -moz-transition: top .3s ease,opacity .3s ease; + -ms-transition: top .3s ease,opacity .3s ease; + transition: top .3s ease,opacity .3s ease; +} + +.floating-label-form-group::not(:first-child) { + padding-left: 14px; + border-left: 1px solid #eee; +} + +.floating-label-form-group-with-value label { + top: 0; + opacity: 1; +} + +.floating-label-form-group-with-focus label { + color: #18bc9c; +} + +form .row:first-child .floating-label-form-group { + border-top: 1px solid #eee; +} + +footer { + color: #fff; +} + +footer h3 { + margin-bottom: 30px; +} + +footer .footer-above { + padding-top: 50px; + background-color: #2c3e50; +} + +footer .footer-col { + margin-bottom: 50px; +} + +footer .footer-below { + padding: 25px 0; + background-color: #233140; +} + +.btn-social { + display: inline-block; + width: 50px; + height: 50px; + border: 2px solid #fff; + border-radius: 100%; + text-align: center; + font-size: 20px; + line-height: 45px; +} + +.btn:focus, +.btn:active, +.btn.active { + outline: 0; +} + +.scroll-top { + z-index: 1049; + position: fixed; + right: 2%; + bottom: 2%; + width: 50px; + height: 50px; +} + +.scroll-top .btn { + width: 50px; + height: 50px; + border-radius: 100%; + font-size: 20px; + line-height: 28px; +} + +.scroll-top .btn:focus { + outline: 0; +} + +.portfolio-modal .modal-content { + padding: 100px 0; + min-height: 100%; + border: 0; + border-radius: 0; + text-align: center; + background-clip: border-box; + -webkit-box-shadow: none; + box-shadow: none; +} + +.portfolio-modal .modal-content h2 { + margin: 0; + font-size: 3em; +} + +.portfolio-modal .modal-content img { + margin-bottom: 30px; +} + +.portfolio-modal .modal-content .item-details { + margin: 30px 0; +} + +.portfolio-modal .close-modal { + position: absolute; + top: 25px; + right: 25px; + width: 75px; + height: 75px; + background-color: transparent; + cursor: pointer; +} + +.portfolio-modal .close-modal:hover { + opacity: .3; +} + +.portfolio-modal .close-modal .lr { + z-index: 1051; + width: 1px; + height: 75px; + margin-left: 35px; + background-color: #2c3e50; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.portfolio-modal .close-modal .lr .rl { + z-index: 1052; + width: 1px; + height: 75px; + background-color: #2c3e50; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +.portfolio-modal .modal-backdrop { + display: none; + opacity: 0; +} \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/css/monkey.css b/src/fluent-bit/lib/monkey/htdocs/css/monkey.css new file mode 100644 index 000000000..6eeba5ccf --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/css/monkey.css @@ -0,0 +1,59 @@ +header { + background-color: #C57407; +} + + +.navbar-default { + background-color: #191F26; +} + +.navbar-brand { + margin-top: 15px; + max-width: 80%; + padding: 0; +} + +ul.nav li a { + color: #FFF !important; +} + +ul.nav li a:hover, ul.nav li a:active { + color: #ff9212 !important; +} + + +header a, a:hover, a:link, a:focus, a:active { + outline: 0; + color: #fff; + text-decoration: none; +} + + +#about a { + outline: 0; + color: #d77604; + font-weight: bold; + text-decoration: none; + font-size: 1.2em; +} + +footer a, a:active{ + outline: 0; + color: #d77604; +} + +h1 small { + color: #ffeeda; +} + +footer .footer-above { + background-color: #1D262F; +} + +footer .footer-below { + background-color: #191F26; +} + +i, .fa:hover, .fa:active, .fa:visited { + color: #C57407; +} diff --git a/src/fluent-bit/lib/monkey/htdocs/favicon.ico b/src/fluent-bit/lib/monkey/htdocs/favicon.ico new file mode 100644 index 000000000..f5cfefdfd Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/favicon.ico differ diff --git a/src/fluent-bit/lib/monkey/htdocs/font-awesome/css/font-awesome.min.css b/src/fluent-bit/lib/monkey/htdocs/font-awesome/css/font-awesome.min.css new file mode 100644 index 000000000..ec53d4d6d --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/FontAwesome.otf b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 000000000..81c9ad949 Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/FontAwesome.otf differ diff --git a/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.eot b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..84677bc0c Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.eot differ diff --git a/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.svg b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..d907b25ae --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.ttf b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..96a3639cd Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.ttf differ diff --git a/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.woff b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..628b6a52a Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/font-awesome/fonts/fontawesome-webfont.woff differ diff --git a/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.eot b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 000000000..b93a4953f Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.eot differ diff --git a/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.svg b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 000000000..94fb5490a --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.ttf b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 000000000..1413fc609 Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.ttf differ diff --git a/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 000000000..9e612858f Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff differ diff --git a/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff2 b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 000000000..64539b54c Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/src/fluent-bit/lib/monkey/htdocs/img/mk_banner.png b/src/fluent-bit/lib/monkey/htdocs/img/mk_banner.png new file mode 100644 index 000000000..bdf8a989d Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/img/mk_banner.png differ diff --git a/src/fluent-bit/lib/monkey/htdocs/img/mk_logo.png b/src/fluent-bit/lib/monkey/htdocs/img/mk_logo.png new file mode 100644 index 000000000..f7dd843dc Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/img/mk_logo.png differ diff --git a/src/fluent-bit/lib/monkey/htdocs/img/mk_signature.png b/src/fluent-bit/lib/monkey/htdocs/img/mk_signature.png new file mode 100644 index 000000000..1b257192d Binary files /dev/null and b/src/fluent-bit/lib/monkey/htdocs/img/mk_signature.png differ diff --git a/src/fluent-bit/lib/monkey/htdocs/index.html b/src/fluent-bit/lib/monkey/htdocs/index.html new file mode 100644 index 000000000..a5b6e16c7 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + + + Monkey Server v1.6 + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Monkey Server v1.6

    +
    +
    +

    + Monkey is a high performance Open Source Web Server and + development stack. It has been designed to be scalable by nature through low memory and CPU consumption, the + right choice for High-End production servers and Embedded devices. +

    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +

    Release Notes

    +

    Monkey v1.6.0

    +

    + This version is a major improvement since the previous series: improved TLS, add additional support for OSX and BSD, the scheduler is aware about protocol handlers (HTTP2 is coming!), a new HTTP parser have been implemented, the plugins can be static or dynamic, the build system is now based on CMake, general performance have been improved and much more. We invite you to read our official release notes: +

    +

    +

    +

    +
    +
    +

    Design, goals and Vision

    +

    Performance & Innovation

    +

    + Monkey is a complete event-driven HTTP framework. It have been designed as a + small core capable to extend it behavior through the plugin interface. +

    +

    + It have been highly optimize to reduce the memory and CPU consumption, making it a great choice for Embedded Linux + environments. +

    +
    +
    +
    +
    + + +
    + + +
    + + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + diff --git a/src/fluent-bit/lib/monkey/htdocs/js/bootstrap.min.js b/src/fluent-bit/lib/monkey/htdocs/js/bootstrap.min.js new file mode 100644 index 000000000..c8f82e592 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.js b/src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.js new file mode 100644 index 000000000..7c3bbc172 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.js @@ -0,0 +1,44 @@ +/** + * cbpAnimatedHeader.js v1.0.0 + * http://www.codrops.com + * + * Licensed under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2013, Codrops + * http://www.codrops.com + */ +var cbpAnimatedHeader = (function() { + + var docElem = document.documentElement, + header = document.querySelector( '.navbar-fixed-top' ), + didScroll = false, + changeHeaderOn = 300; + + function init() { + window.addEventListener( 'scroll', function( event ) { + if( !didScroll ) { + didScroll = true; + setTimeout( scrollPage, 250 ); + } + }, false ); + } + + function scrollPage() { + var sy = scrollY(); + if ( sy >= changeHeaderOn ) { + classie.add( header, 'navbar-shrink' ); + } + else { + classie.remove( header, 'navbar-shrink' ); + } + didScroll = false; + } + + function scrollY() { + return window.pageYOffset || docElem.scrollTop; + } + + init(); + +})(); \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.min.js b/src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.min.js new file mode 100644 index 000000000..b39cb0dcd --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/cbpAnimatedHeader.min.js @@ -0,0 +1,11 @@ +/** + * cbpAnimatedHeader.min.js v1.0.0 + * http://www.codrops.com + * + * Licensed under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2013, Codrops + * http://www.codrops.com + */ +var cbpAnimatedHeader=(function(){var b=document.documentElement,g=document.querySelector(".cbp-af-header"),e=false,a=300;function f(){window.addEventListener("scroll",function(h){if(!e){e=true;setTimeout(d,250)}},false)}function d(){var h=c();if(h>=a){classie.add(g,"cbp-af-header-shrink")}else{classie.remove(g,"cbp-af-header-shrink")}e=false}function c(){return window.pageYOffset||b.scrollTop}f()})(); \ No newline at end of file diff --git a/src/fluent-bit/lib/monkey/htdocs/js/classie.js b/src/fluent-bit/lib/monkey/htdocs/js/classie.js new file mode 100644 index 000000000..a96755488 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/classie.js @@ -0,0 +1,80 @@ +/*! + * classie - class helper functions + * from bonzo https://github.com/ded/bonzo + * + * classie.has( elem, 'my-class' ) -> true/false + * classie.add( elem, 'my-new-class' ) + * classie.remove( elem, 'my-unwanted-class' ) + * classie.toggle( elem, 'my-class' ) + */ + +/*jshint browser: true, strict: true, undef: true */ +/*global define: false */ + +( function( window ) { + +'use strict'; + +// class helper functions from bonzo https://github.com/ded/bonzo + +function classReg( className ) { + return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); +} + +// classList support for class management +// altho to be fair, the api sucks because it won't accept multiple classes at once +var hasClass, addClass, removeClass; + +if ( 'classList' in document.documentElement ) { + hasClass = function( elem, c ) { + return elem.classList.contains( c ); + }; + addClass = function( elem, c ) { + elem.classList.add( c ); + }; + removeClass = function( elem, c ) { + elem.classList.remove( c ); + }; +} +else { + hasClass = function( elem, c ) { + return classReg( c ).test( elem.className ); + }; + addClass = function( elem, c ) { + if ( !hasClass( elem, c ) ) { + elem.className = elem.className + ' ' + c; + } + }; + removeClass = function( elem, c ) { + elem.className = elem.className.replace( classReg( c ), ' ' ); + }; +} + +function toggleClass( elem, c ) { + var fn = hasClass( elem, c ) ? removeClass : addClass; + fn( elem, c ); +} + +var classie = { + // full names + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + // short names + has: hasClass, + add: addClass, + remove: removeClass, + toggle: toggleClass +}; + +// transport +if ( typeof define === 'function' && define.amd ) { + // AMD + define( classie ); +} else { + // browser global + window.classie = classie; +} + +})( window ); diff --git a/src/fluent-bit/lib/monkey/htdocs/js/freelancer.js b/src/fluent-bit/lib/monkey/htdocs/js/freelancer.js new file mode 100644 index 000000000..b1f77b360 --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/freelancer.js @@ -0,0 +1,37 @@ +/*! + * Start Bootstrap - Freelancer Bootstrap Theme (http://startbootstrap.com) + * Code licensed under the Apache License v2.0. + * For details, see http://www.apache.org/licenses/LICENSE-2.0. + */ + +// jQuery for page scrolling feature - requires jQuery Easing plugin +$(function() { + $('body').on('click', '.page-scroll a', function(event) { + var $anchor = $(this); + $('html, body').stop().animate({ + scrollTop: $($anchor.attr('href')).offset().top + }, 1500, 'easeInOutExpo'); + event.preventDefault(); + }); +}); + +// Floating label headings for the contact form +$(function() { + $("body").on("input propertychange", ".floating-label-form-group", function(e) { + $(this).toggleClass("floating-label-form-group-with-value", !! $(e.target).val()); + }).on("focus", ".floating-label-form-group", function() { + $(this).addClass("floating-label-form-group-with-focus"); + }).on("blur", ".floating-label-form-group", function() { + $(this).removeClass("floating-label-form-group-with-focus"); + }); +}); + +// Highlight the top nav as scrolling occurs +$('body').scrollspy({ + target: '.navbar-fixed-top' +}) + +// Closes the Responsive Menu on Menu Item Click +$('.navbar-collapse ul li a').click(function() { + $('.navbar-toggle:visible').click(); +}); diff --git a/src/fluent-bit/lib/monkey/htdocs/js/jqBootstrapValidation.js b/src/fluent-bit/lib/monkey/htdocs/js/jqBootstrapValidation.js new file mode 100644 index 000000000..29cbb083e --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/jqBootstrapValidation.js @@ -0,0 +1,912 @@ +/* jqBootstrapValidation + * A plugin for automating validation on Twitter Bootstrap formatted forms. + * + * v1.3.6 + * + * License: MIT - see LICENSE file + * + * http://ReactiveRaven.github.com/jqBootstrapValidation/ + */ + +(function( $ ){ + + var createdElements = []; + + var defaults = { + options: { + prependExistingHelpBlock: false, + sniffHtml: true, // sniff for 'required', 'maxlength', etc + preventSubmit: true, // stop the form submit event from firing if validation fails + submitError: false, // function called if there is an error when trying to submit + submitSuccess: false, // function called just before a successful submit event is sent to the server + semanticallyStrict: false, // set to true to tidy up generated HTML output + autoAdd: { + helpBlocks: true + }, + filter: function () { + // return $(this).is(":visible"); // only validate elements you can see + return true; // validate everything + } + }, + methods: { + init : function( options ) { + + var settings = $.extend(true, {}, defaults); + + settings.options = $.extend(true, settings.options, options); + + var $siblingElements = this; + + var uniqueForms = $.unique( + $siblingElements.map( function () { + return $(this).parents("form")[0]; + }).toArray() + ); + + $(uniqueForms).bind("submit", function (e) { + var $form = $(this); + var warningsFound = 0; + var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter); + $inputs.trigger("submit.validation").trigger("validationLostFocus.validation"); + + $inputs.each(function (i, el) { + var $this = $(el), + $controlGroup = $this.parents(".control-group").first(); + if ( + $controlGroup.hasClass("warning") + ) { + $controlGroup.removeClass("warning").addClass("error"); + warningsFound++; + } + }); + + $inputs.trigger("validationLostFocus.validation"); + + if (warningsFound) { + if (settings.options.preventSubmit) { + e.preventDefault(); + } + $form.addClass("error"); + if ($.isFunction(settings.options.submitError)) { + settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true)); + } + } else { + $form.removeClass("error"); + if ($.isFunction(settings.options.submitSuccess)) { + settings.options.submitSuccess($form, e); + } + } + }); + + return this.each(function(){ + + // Get references to everything we're interested in + var $this = $(this), + $controlGroup = $this.parents(".control-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(), + $form = $this.parents("form").first(), + validatorNames = []; + + // create message container if not exists + if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) { + $helpBlock = $('
    '); + $controlGroup.find('.controls').append($helpBlock); + createdElements.push($helpBlock[0]); + } + + // ============================================================= + // SNIFF HTML FOR VALIDATORS + // ============================================================= + + // *snort sniff snuffle* + + if (settings.options.sniffHtml) { + var message = ""; + // --------------------------------------------------------- + // PATTERN + // --------------------------------------------------------- + if ($this.attr("pattern") !== undefined) { + message = "Not in the expected format"; + if ($this.data("validationPatternMessage")) { + message = $this.data("validationPatternMessage"); + } + $this.data("validationPatternMessage", message); + $this.data("validationPatternRegex", $this.attr("pattern")); + } + // --------------------------------------------------------- + // MAX + // --------------------------------------------------------- + if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) { + var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax")); + message = "Too high: Maximum of '" + max + "'"; + if ($this.data("validationMaxMessage")) { + message = $this.data("validationMaxMessage"); + } + $this.data("validationMaxMessage", message); + $this.data("validationMaxMax", max); + } + // --------------------------------------------------------- + // MIN + // --------------------------------------------------------- + if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) { + var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin")); + message = "Too low: Minimum of '" + min + "'"; + if ($this.data("validationMinMessage")) { + message = $this.data("validationMinMessage"); + } + $this.data("validationMinMessage", message); + $this.data("validationMinMin", min); + } + // --------------------------------------------------------- + // MAXLENGTH + // --------------------------------------------------------- + if ($this.attr("maxlength") !== undefined) { + message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters"; + if ($this.data("validationMaxlengthMessage")) { + message = $this.data("validationMaxlengthMessage"); + } + $this.data("validationMaxlengthMessage", message); + $this.data("validationMaxlengthMaxlength", $this.attr("maxlength")); + } + // --------------------------------------------------------- + // MINLENGTH + // --------------------------------------------------------- + if ($this.attr("minlength") !== undefined) { + message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters"; + if ($this.data("validationMinlengthMessage")) { + message = $this.data("validationMinlengthMessage"); + } + $this.data("validationMinlengthMessage", message); + $this.data("validationMinlengthMinlength", $this.attr("minlength")); + } + // --------------------------------------------------------- + // REQUIRED + // --------------------------------------------------------- + if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) { + message = settings.builtInValidators.required.message; + if ($this.data("validationRequiredMessage")) { + message = $this.data("validationRequiredMessage"); + } + $this.data("validationRequiredMessage", message); + } + // --------------------------------------------------------- + // NUMBER + // --------------------------------------------------------- + if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") { + message = settings.builtInValidators.number.message; + if ($this.data("validationNumberMessage")) { + message = $this.data("validationNumberMessage"); + } + $this.data("validationNumberMessage", message); + } + // --------------------------------------------------------- + // EMAIL + // --------------------------------------------------------- + if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") { + message = "Not a valid email address"; + if ($this.data("validationValidemailMessage")) { + message = $this.data("validationValidemailMessage"); + } else if ($this.data("validationEmailMessage")) { + message = $this.data("validationEmailMessage"); + } + $this.data("validationValidemailMessage", message); + } + // --------------------------------------------------------- + // MINCHECKED + // --------------------------------------------------------- + if ($this.attr("minchecked") !== undefined) { + message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required"; + if ($this.data("validationMincheckedMessage")) { + message = $this.data("validationMincheckedMessage"); + } + $this.data("validationMincheckedMessage", message); + $this.data("validationMincheckedMinchecked", $this.attr("minchecked")); + } + // --------------------------------------------------------- + // MAXCHECKED + // --------------------------------------------------------- + if ($this.attr("maxchecked") !== undefined) { + message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required"; + if ($this.data("validationMaxcheckedMessage")) { + message = $this.data("validationMaxcheckedMessage"); + } + $this.data("validationMaxcheckedMessage", message); + $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked")); + } + } + + // ============================================================= + // COLLECT VALIDATOR NAMES + // ============================================================= + + // Get named validators + if ($this.data("validation") !== undefined) { + validatorNames = $this.data("validation").split(","); + } + + // Get extra ones defined on the element's data attributes + $.each($this.data(), function (i, el) { + var parts = i.replace(/([A-Z])/g, ",$1").split(","); + if (parts[0] === "validation" && parts[1]) { + validatorNames.push(parts[1]); + } + }); + + // ============================================================= + // NORMALISE VALIDATOR NAMES + // ============================================================= + + var validatorNamesToInspect = validatorNames; + var newValidatorNamesToInspect = []; + + do // repeatedly expand 'shortcut' validators into their real validators + { + // Uppercase only the first letter of each name + $.each(validatorNames, function (i, el) { + validatorNames[i] = formatValidatorName(el); + }); + + // Remove duplicate validator names + validatorNames = $.unique(validatorNames); + + // Pull out the new validator names from each shortcut + newValidatorNamesToInspect = []; + $.each(validatorNamesToInspect, function(i, el) { + if ($this.data("validation" + el + "Shortcut") !== undefined) { + // Are these custom validators? + // Pull them out! + $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) { + newValidatorNamesToInspect.push(el2); + }); + } else if (settings.builtInValidators[el.toLowerCase()]) { + // Is this a recognised built-in? + // Pull it out! + var validator = settings.builtInValidators[el.toLowerCase()]; + if (validator.type.toLowerCase() === "shortcut") { + $.each(validator.shortcut.split(","), function (i, el) { + el = formatValidatorName(el); + newValidatorNamesToInspect.push(el); + validatorNames.push(el); + }); + } + } + }); + + validatorNamesToInspect = newValidatorNamesToInspect; + + } while (validatorNamesToInspect.length > 0) + + // ============================================================= + // SET UP VALIDATOR ARRAYS + // ============================================================= + + var validators = {}; + + $.each(validatorNames, function (i, el) { + // Set up the 'override' message + var message = $this.data("validation" + el + "Message"); + var hasOverrideMessage = (message !== undefined); + var foundValidator = false; + message = + ( + message + ? message + : "'" + el + "' validation failed " + ) + ; + + $.each( + settings.validatorTypes, + function (validatorType, validatorTemplate) { + if (validators[validatorType] === undefined) { + validators[validatorType] = []; + } + if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) { + validators[validatorType].push( + $.extend( + true, + { + name: formatValidatorName(validatorTemplate.name), + message: message + }, + validatorTemplate.init($this, el) + ) + ); + foundValidator = true; + } + } + ); + + if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) { + + var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]); + if (hasOverrideMessage) { + validator.message = message; + } + var validatorType = validator.type.toLowerCase(); + + if (validatorType === "shortcut") { + foundValidator = true; + } else { + $.each( + settings.validatorTypes, + function (validatorTemplateType, validatorTemplate) { + if (validators[validatorTemplateType] === undefined) { + validators[validatorTemplateType] = []; + } + if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) { + $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]); + validators[validatorType].push( + $.extend( + validator, + validatorTemplate.init($this, el) + ) + ); + foundValidator = true; + } + } + ); + } + } + + if (! foundValidator) { + $.error("Cannot find validation info for '" + el + "'"); + } + }); + + // ============================================================= + // STORE FALLBACK VALUES + // ============================================================= + + $helpBlock.data( + "original-contents", + ( + $helpBlock.data("original-contents") + ? $helpBlock.data("original-contents") + : $helpBlock.html() + ) + ); + + $helpBlock.data( + "original-role", + ( + $helpBlock.data("original-role") + ? $helpBlock.data("original-role") + : $helpBlock.attr("role") + ) + ); + + $controlGroup.data( + "original-classes", + ( + $controlGroup.data("original-clases") + ? $controlGroup.data("original-classes") + : $controlGroup.attr("class") + ) + ); + + $this.data( + "original-aria-invalid", + ( + $this.data("original-aria-invalid") + ? $this.data("original-aria-invalid") + : $this.attr("aria-invalid") + ) + ); + + // ============================================================= + // VALIDATION + // ============================================================= + + $this.bind( + "validation.validation", + function (event, params) { + + var value = getValue($this); + + // Get a list of the errors to apply + var errorsFound = []; + + $.each(validators, function (validatorType, validatorTypeArray) { + if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) { + $.each(validatorTypeArray, function (i, validator) { + if (settings.validatorTypes[validatorType].validate($this, value, validator)) { + errorsFound.push(validator.message); + } + }); + } + }); + + return errorsFound; + } + ); + + $this.bind( + "getValidators.validation", + function () { + return validators; + } + ); + + // ============================================================= + // WATCH FOR CHANGES + // ============================================================= + $this.bind( + "submit.validation", + function () { + return $this.triggerHandler("change.validation", {submitting: true}); + } + ); + $this.bind( + [ + "keyup", + "focus", + "blur", + "click", + "keydown", + "keypress", + "change" + ].join(".validation ") + ".validation", + function (e, params) { + + var value = getValue($this); + + var errorsFound = []; + + $controlGroup.find("input,textarea,select").each(function (i, el) { + var oldCount = errorsFound.length; + $.each($(el).triggerHandler("validation.validation", params), function (j, message) { + errorsFound.push(message); + }); + if (errorsFound.length > oldCount) { + $(el).attr("aria-invalid", "true"); + } else { + var original = $this.data("original-aria-invalid"); + $(el).attr("aria-invalid", (original !== undefined ? original : false)); + } + }); + + $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation"); + + errorsFound = $.unique(errorsFound.sort()); + + // Were there any errors? + if (errorsFound.length) { + // Better flag it up as a warning. + $controlGroup.removeClass("success error").addClass("warning"); + + // How many errors did we find? + if (settings.options.semanticallyStrict && errorsFound.length === 1) { + // Only one? Being strict? Just output it. + $helpBlock.html(errorsFound[0] + + ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); + } else { + // Multiple? Being sloppy? Glue them together into an UL. + $helpBlock.html("
    • " + errorsFound.join("
    • ") + "
    " + + ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); + } + } else { + $controlGroup.removeClass("warning error success"); + if (value.length > 0) { + $controlGroup.addClass("success"); + } + $helpBlock.html($helpBlock.data("original-contents")); + } + + if (e.type === "blur") { + $controlGroup.removeClass("success"); + } + } + ); + $this.bind("validationLostFocus.validation", function () { + $controlGroup.removeClass("success"); + }); + }); + }, + destroy : function( ) { + + return this.each( + function() { + + var + $this = $(this), + $controlGroup = $this.parents(".control-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(); + + // remove our events + $this.unbind('.validation'); // events are namespaced. + // reset help text + $helpBlock.html($helpBlock.data("original-contents")); + // reset classes + $controlGroup.attr("class", $controlGroup.data("original-classes")); + // reset aria + $this.attr("aria-invalid", $this.data("original-aria-invalid")); + // reset role + $helpBlock.attr("role", $this.data("original-role")); + // remove all elements we created + if (createdElements.indexOf($helpBlock[0]) > -1) { + $helpBlock.remove(); + } + + } + ); + + }, + collectErrors : function(includeEmpty) { + + var errorMessages = {}; + this.each(function (i, el) { + var $el = $(el); + var name = $el.attr("name"); + var errors = $el.triggerHandler("validation.validation", {includeEmpty: true}); + errorMessages[name] = $.extend(true, errors, errorMessages[name]); + }); + + $.each(errorMessages, function (i, el) { + if (el.length === 0) { + delete errorMessages[i]; + } + }); + + return errorMessages; + + }, + hasErrors: function() { + + var errorMessages = []; + + this.each(function (i, el) { + errorMessages = errorMessages.concat( + $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : [] + ); + }); + + return (errorMessages.length > 0); + }, + override : function (newDefaults) { + defaults = $.extend(true, defaults, newDefaults); + } + }, + validatorTypes: { + callback: { + name: "callback", + init: function ($this, name) { + return { + validatorName: name, + callback: $this.data("validation" + name + "Callback"), + lastValue: $this.val(), + lastValid: true, + lastFinished: true + }; + }, + validate: function ($this, value, validator) { + if (validator.lastValue === value && validator.lastFinished) { + return !validator.lastValid; + } + + if (validator.lastFinished === true) + { + validator.lastValue = value; + validator.lastValid = true; + validator.lastFinished = false; + + var rrjqbvValidator = validator; + var rrjqbvThis = $this; + executeFunctionByName( + validator.callback, + window, + $this, + value, + function (data) { + if (rrjqbvValidator.lastValue === data.value) { + rrjqbvValidator.lastValid = data.valid; + if (data.message) { + rrjqbvValidator.message = data.message; + } + rrjqbvValidator.lastFinished = true; + rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + rrjqbvThis.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + } + ); + } + + return false; + + } + }, + ajax: { + name: "ajax", + init: function ($this, name) { + return { + validatorName: name, + url: $this.data("validation" + name + "Ajax"), + lastValue: $this.val(), + lastValid: true, + lastFinished: true + }; + }, + validate: function ($this, value, validator) { + if (""+validator.lastValue === ""+value && validator.lastFinished === true) { + return validator.lastValid === false; + } + + if (validator.lastFinished === true) + { + validator.lastValue = value; + validator.lastValid = true; + validator.lastFinished = false; + $.ajax({ + url: validator.url, + data: "value=" + value + "&field=" + $this.attr("name"), + dataType: "json", + success: function (data) { + if (""+validator.lastValue === ""+data.value) { + validator.lastValid = !!(data.valid); + if (data.message) { + validator.message = data.message; + } + validator.lastFinished = true; + $this.data("validation" + validator.validatorName + "Message", validator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + $this.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + }, + failure: function () { + validator.lastValid = true; + validator.message = "ajax call failed"; + validator.lastFinished = true; + $this.data("validation" + validator.validatorName + "Message", validator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + $this.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + }); + } + + return false; + + } + }, + regex: { + name: "regex", + init: function ($this, name) { + return {regex: regexFromString($this.data("validation" + name + "Regex"))}; + }, + validate: function ($this, value, validator) { + return (!validator.regex.test(value) && ! validator.negative) + || (validator.regex.test(value) && validator.negative); + } + }, + required: { + name: "required", + init: function ($this, name) { + return {}; + }, + validate: function ($this, value, validator) { + return !!(value.length === 0 && ! validator.negative) + || !!(value.length > 0 && validator.negative); + }, + blockSubmit: true + }, + match: { + name: "match", + init: function ($this, name) { + var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first(); + element.bind("validation.validation", function () { + $this.trigger("change.validation", {submitting: true}); + }); + return {"element": element}; + }, + validate: function ($this, value, validator) { + return (value !== validator.element.val() && ! validator.negative) + || (value === validator.element.val() && validator.negative); + }, + blockSubmit: true + }, + max: { + name: "max", + init: function ($this, name) { + return {max: $this.data("validation" + name + "Max")}; + }, + validate: function ($this, value, validator) { + return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative) + || (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative); + } + }, + min: { + name: "min", + init: function ($this, name) { + return {min: $this.data("validation" + name + "Min")}; + }, + validate: function ($this, value, validator) { + return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative) + || (parseFloat(value) >= parseFloat(validator.min) && validator.negative); + } + }, + maxlength: { + name: "maxlength", + init: function ($this, name) { + return {maxlength: $this.data("validation" + name + "Maxlength")}; + }, + validate: function ($this, value, validator) { + return ((value.length > validator.maxlength) && ! validator.negative) + || ((value.length <= validator.maxlength) && validator.negative); + } + }, + minlength: { + name: "minlength", + init: function ($this, name) { + return {minlength: $this.data("validation" + name + "Minlength")}; + }, + validate: function ($this, value, validator) { + return ((value.length < validator.minlength) && ! validator.negative) + || ((value.length >= validator.minlength) && validator.negative); + } + }, + maxchecked: { + name: "maxchecked", + init: function ($this, name) { + var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); + elements.bind("click.validation", function () { + $this.trigger("change.validation", {includeEmpty: true}); + }); + return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements}; + }, + validate: function ($this, value, validator) { + return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative) + || (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative); + }, + blockSubmit: true + }, + minchecked: { + name: "minchecked", + init: function ($this, name) { + var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); + elements.bind("click.validation", function () { + $this.trigger("change.validation", {includeEmpty: true}); + }); + return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements}; + }, + validate: function ($this, value, validator) { + return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative) + || (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative); + }, + blockSubmit: true + } + }, + builtInValidators: { + email: { + name: "Email", + type: "shortcut", + shortcut: "validemail" + }, + validemail: { + name: "Validemail", + type: "regex", + regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}", + message: "Not a valid email address" + }, + passwordagain: { + name: "Passwordagain", + type: "match", + match: "password", + message: "Does not match the given password" + }, + positive: { + name: "Positive", + type: "shortcut", + shortcut: "number,positivenumber" + }, + negative: { + name: "Negative", + type: "shortcut", + shortcut: "number,negativenumber" + }, + number: { + name: "Number", + type: "regex", + regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?", + message: "Must be a number" + }, + integer: { + name: "Integer", + type: "regex", + regex: "[+-]?\\\d+", + message: "No decimal places allowed" + }, + positivenumber: { + name: "Positivenumber", + type: "min", + min: 0, + message: "Must be a positive number" + }, + negativenumber: { + name: "Negativenumber", + type: "max", + max: 0, + message: "Must be a negative number" + }, + required: { + name: "Required", + type: "required", + message: "This is required" + }, + checkone: { + name: "Checkone", + type: "minchecked", + minchecked: 1, + message: "Check at least one option" + } + } + }; + + var formatValidatorName = function (name) { + return name + .toLowerCase() + .replace( + /(^|\s)([a-z])/g , + function(m,p1,p2) { + return p1+p2.toUpperCase(); + } + ) + ; + }; + + var getValue = function ($this) { + // Extract the value we're talking about + var value = $this.val(); + var type = $this.attr("type"); + if (type === "checkbox") { + value = ($this.is(":checked") ? value : ""); + } + if (type === "radio") { + value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : ""); + } + return value; + }; + + function regexFromString(inputstring) { + return new RegExp("^" + inputstring + "$"); + } + + /** + * Thanks to Jason Bunting via StackOverflow.com + * + * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910 + * Short link: http://tinyurl.com/executeFunctionByName + **/ + function executeFunctionByName(functionName, context /*, args*/) { + var args = Array.prototype.slice.call(arguments).splice(2); + var namespaces = functionName.split("."); + var func = namespaces.pop(); + for(var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } + return context[func].apply(this, args); + } + + $.fn.jqBootstrapValidation = function( method ) { + + if ( defaults.methods[method] ) { + return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return defaults.methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' ); + return null; + } + + }; + + $.jqBootstrapValidation = function (options) { + $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments); + }; + +})( jQuery ); diff --git a/src/fluent-bit/lib/monkey/htdocs/js/jquery.js b/src/fluent-bit/lib/monkey/htdocs/js/jquery.js new file mode 100644 index 000000000..d1608e37f --- /dev/null +++ b/src/fluent-bit/lib/monkey/htdocs/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("