uWSGI 2.0.23__tar.gz → 2.0.25__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {uwsgi-2.0.23 → uwsgi-2.0.25}/.github/workflows/compile-test.yml +14 -8
- {uwsgi-2.0.23 → uwsgi-2.0.25}/.github/workflows/test.yml +3 -3
- {uwsgi-2.0.23 → uwsgi-2.0.25}/PKG-INFO +1 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/alarm.c +6 -5
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/cache.c +6 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/config.c +1 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/ini.c +0 -3
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/logging.c +10 -10
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/loop.c +3 -3
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master.c +1 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master_checks.c +1 -1
- uwsgi-2.0.25/core/regexp.c +178 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/routing.c +25 -16
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/ssl.c +4 -4
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/static.c +10 -10
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/utils.c +8 -30
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/uwsgi.c +33 -60
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/yaml.c +0 -2
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/glusterfs/glusterfs.c +1 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/php_plugin.c +8 -4
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/uwsgiplugin.py +6 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/pyloader.c +3 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/python_plugin.c +3 -1
- uwsgi-2.0.25/tests/threads_atexit.py +44 -0
- uwsgi-2.0.25/tests/threads_heavy.py +29 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgi.gemspec +1 -1
- {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgi.h +36 -23
- {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgiconfig.py +33 -26
- {uwsgi-2.0.23 → uwsgi-2.0.25}/valgrind/valgrind-generate-sups.sh +4 -2
- uwsgi-2.0.23/core/regexp.c +0 -110
- {uwsgi-2.0.23 → uwsgi-2.0.25}/.gitignore +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/CONTRIBUTORS +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/INSTALL +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/LICENSE +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/Makefile +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/README +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/apache2/mod_Ruwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/apache2/mod_proxy_uwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/apache2/mod_uwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/attach.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/bin/uwsgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/all.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/asyncio.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/base.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/cgi.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/core.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/coroae.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/coverity.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/default.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/django.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/embedded.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/erlang.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/gccgo.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/gevent.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/glusterfs.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/gridfs.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/jwsgi.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/lib.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/lua.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/luap.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/minimal.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/modular.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/mono.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/nolang.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/package.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/php.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/plonly.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/ppa.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/psgi.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyerl.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pylua.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyonly.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pypy.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pypyonly.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyring.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyuwsgi.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyuwsginossl.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/rack.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/rados.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/rbonly.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/ring.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/ruby2.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/servlet.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/travis.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/unbit.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/unbitstaff.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/uwsgi.it.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/v8.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/Uwsgi.pm +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/binder.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/centos_init_script +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/cgi_python.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/cryptologger.rb +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/emperormon.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/fdconf.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/graphite_uwsgi.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/launchd/it.unbit.uwsgi.emperor.plist +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/launchd/it.unbit.uwsgi.plist +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/loadapp.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/pypy/uwsgi_pypy_greenlets.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/pyuwsgi.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/runuwsgi.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/securesubscribe.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/spoolqueue/producer.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/spoolqueue/tasks.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/spoolqueue/tasksconsumer.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/subscribe.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/twuwsgi.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/upstart/emperor.conf +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/upstart/uwsgi.conf +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/upython +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/urack.rb +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi-cache-monitor.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi.erl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi.java +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi.rb +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi_client.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi_dynamic_client.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgisubscribers.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/xinetd_uwsgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/async.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/buffer.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/chunked.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/clang_fake.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/clock.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/cookie.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/cron.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/daemons.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/emperor.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/errors.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/event.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/exceptions.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/fifo.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/fsmon.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/gateway.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/hash.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/hooks.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/init.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/io.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/json.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/legion.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/lock.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/logging. +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master_events.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master_utils.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/metrics.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/mount.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/mule.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/notify.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/offload.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/plugins.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/plugins_builder.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/progress.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/protocol.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/querystring.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/queue.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/rb_timers.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/reader.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/rpc.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/sendfile.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/setup_utils.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/sharedarea.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/signal.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/skel.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/snmp.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/socket.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/spooler.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/stats.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/storage.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/strings.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/subscription.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/timebomb.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/transformations.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/websockets.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/writer.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/xmlconf.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/zeus.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/core/zlib.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap2.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap3.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap4.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap5.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config17.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config2.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config2.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config30.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/corostream.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/debug.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/fibers.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/fibers.yml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/flaskpost.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/heavytest.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/heavytest.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/info_uwsgi.php +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/logic.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/mega.xml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/mjpeg_stream.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/mojoapp.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/multi.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/multi.xml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/multiapp.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/protected.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/router.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/simple_app.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/simple_app_wsgi2.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/simple_logger.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/sites.xml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/sputnik.ws +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/staticfilesnmp.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/taskqueue.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgi.xml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter2.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter3.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter4.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter5.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgistatus.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/welcome.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/welcome.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/welcome3.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/werkzeug.js +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/werkzeug.yml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/werkzeug_strict.yml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/xmlindex-html.xsl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/xmlindex.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/zmqgevent.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/ext/uwsgi/extconf.rb +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/install.sh +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/lib/linux_ns.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/lib/netlink.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/lib/sun_fixes.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/logo_uWSGI.png +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/logo_uWSGI.svg +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/mongrel2-uwsgi.conf +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/airbrake/airbrake_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/airbrake/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_curl/alarm_curl_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_curl/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_speech/alarm_speech.m +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_speech/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_xmpp/alarm_xmpp_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_xmpp/gloox.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_xmpp/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/asyncio/asyncio.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/asyncio/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cache/cache.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cache/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/carbon/carbon.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/carbon/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cgi/cgi_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cgi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_backlog2/cheaper_backlog2.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_backlog2/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_busyness/cheaper_busyness.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_busyness/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_monotonic/clock_monotonic.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_monotonic/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_realtime/clock_realtime.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_realtime/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/corerouter.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/cr.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/cr_common.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/cr_map.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/coroae/coroae.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/coroae/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cplusplus/base.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cplusplus/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cplusplus/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/curl_cron/curl_cron.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/curl_cron/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dumbloop/dumb.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dumbloop/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dummy/dummy.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dummy/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/echo/echo_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/echo/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_amqp/amqp.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_amqp/emperor_amqp.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_amqp/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_mongodb/emperor_mongodb.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_mongodb/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_mongodb/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_pg/emperor_pg.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_pg/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_zeromq/emperor_zeromq.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_zeromq/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/example/example_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/example/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/exception_log/exception_log.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/exception_log/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fastrouter/fastrouter.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fastrouter/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fiber/fiber.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fiber/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/forkptyrouter/forkptyrouter.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/forkptyrouter/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gccgo/gccgo_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gccgo/uwsgi.go +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gccgo/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/geoip/geoip.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/geoip/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/gevent.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/gevent.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/hooks.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/glusterfs/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/graylog2/graylog2_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/graylog2/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/greenlet/greenlet.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/greenlet/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gridfs/gridfs.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gridfs/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gridfs/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/common.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/http.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/https.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/keepalive.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/spdy3.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/spdy3.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/jvm.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/jvm_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/uwsgi.java +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jwsgi/jwsgi_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jwsgi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ldap/ldap.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ldap/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/legion_cache_fetch/legion_cache_fetch.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/legion_cache_fetch/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libffi/libffi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libffi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libtcc/libtcc.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libtcc/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logcrypto/logcrypto.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logcrypto/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logfile/logfile.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logfile/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logpipe/logpipe.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logpipe/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logsocket/logsocket_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logsocket/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logzmq/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logzmq/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/lua/lua_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/lua/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/matheval/math.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/matheval/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodb/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodb/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodblog/mongodblog_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodblog/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongrel2/mongrel2.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongrel2/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mono/mono_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mono/uwsgi.cs +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mono/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/msgpack/msgpack.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/msgpack/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/nagios/nagios.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/nagios/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/notfound/notfound.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/notfound/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/objc_gc/objc_gc.m +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/objc_gc/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pam/pam.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pam/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/common.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/session.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ping/ping_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ping/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi_loader.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi_response.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/uwsgi_plmodule.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pty/pty.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pty/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/README +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/pypy_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/pypy_setup.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/gil.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/profiler.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/pump_subhandler.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/pyutils.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/raw.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/symimporter.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/tracebacker.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/uwsgi_pymodule.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/uwsgi_python.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/web3_subhandler.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/wsgi_handlers.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/wsgi_headers.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/wsgi_subhandler.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pyuwsgi/pyuwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pyuwsgi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/rack_api.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/rack_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/uwsgi_rack.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rados/rados.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rados/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rawrouter/rawrouter.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rawrouter/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rbthreads/rbthreads.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rbthreads/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/redislog/redislog_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/redislog/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ring/ring_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ring/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_access/router_access.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_access/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_basicauth/router_basicauth.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_basicauth/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_cache/router_cache.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_cache/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_expires/expires.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_expires/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_hash/router_hash.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_hash/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_http/router_http.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_http/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_memcached/router_memcached.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_memcached/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_metrics/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_metrics/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_radius/radius.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_radius/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redirect/router_redirect.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redirect/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redis/router_redis.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redis/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_rewrite/router_rewrite.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_rewrite/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_spnego/router_spnego.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_spnego/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_static/router_static.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_static/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_uwsgi/router_uwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_uwsgi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_xmldir/router_xmldir.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_xmldir/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rpc/rpc_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rpc/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rrdtool/rrdtool.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rrdtool/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rsyslog/rsyslog_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rsyslog/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ruby19/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/servlet/servlet_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/servlet/uwsgi_servlet.java +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/servlet/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/signal/signal_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/signal/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/spooler/spooler_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/spooler/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sqlite3/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sqlite3/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ssi/ssi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ssi/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sslrouter/sslrouter.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sslrouter/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stackless/stackless.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stackless/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_file/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_file/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/stats_pusher_mongodb.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_socket/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_socket/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_statsd/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_statsd/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/symcall/symcall_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/symcall/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/syslog/syslog_plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/syslog/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/systemd_logger/systemd_logger.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/systemd_logger/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tornado/tornado.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tornado/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_chunked/chunked.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_chunked/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_gzip/gzip.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_gzip/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_offload/offload.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_offload/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_template/tt.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_template/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_tofile/tofile.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_tofile/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_toupper/toupper.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_toupper/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/common.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/common.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/firewall.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/tuntap.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ugreen/ugreen.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ugreen/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_commonjs.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_jsgi.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_uwsgi.cc +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_uwsgi.h +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/webdav/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/webdav/webdav.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xattr/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xattr/xattr.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xslt/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xslt/xslt.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zabbix/plugin.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zabbix/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zergpool/uwsgiplugin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zergpool/zergpool.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/BUILD +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/base.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/fastcgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/http.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/puwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/scgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/uwsgi.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/setup.cpyext.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/setup.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/setup.pyuwsgi.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/cachebitmap.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/cachebitmap.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/cachetest.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/clojure/myapp.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/core/apps/read_body_and_send.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/core/read_body_and_send.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/core/url_sanitize.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/go/cachetest.go +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/go/complextest.go +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/go/uploadtest.go +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/java/rpc.java +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/lua/basic.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mono/cache.aspx +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mules/mulebrain.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mules/reload.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mules/signal_management.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/active_workers_signal.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/apps/input_with_offset.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_benchmark.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_harakiri.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_hello.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_input_with_offset.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_post.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_sleepy.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_streaming.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/pypy/t_continulet1.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/pypy/t_continulet2.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/forcecl.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/manage_script_name/manage_script_name_test.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/manage_script_name/test_manage_script_name.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/manage_script_name/useless_app.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_decorator_test.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_decorator_tests.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_handlers.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/testba.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/README.md +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/config.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/project.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/app.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/basic.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/body.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/simple.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/upload.clj +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/routing/auth.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/routing/errorlimiter.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/routing/limiter.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/bigranges.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/bigranges.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/sharedarea_incdec.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/sharedarea_incdec.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/spooler/read.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/spooler/reload.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/spooler/spooldir/.gitignore +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/webdav/carddav.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/xslt/cd.xml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/xslt/cd.xml.xslt +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/t/xslt/routex.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/Responder.pm +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/__init__.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/badthread.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/badwrites.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/cpubound_async.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/cpubound_green.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/cpubound_stackless.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/main.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-nothreads.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-singleinterpreter-threads-10workers.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-singleinterpreter-threads-1worker.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-threads-10workers.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-threads-1worker.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/nomaster-threads-10workers.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/nomaster-threads-1worker.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/sitecustomize.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/decoratortest.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/fileserve_async.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gevent_spool.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-deadlocks.sh +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-python.sh +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-rack.sh +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-shared.sh +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/grunter.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/harakiri.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/iobound_async.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/iobound_async_unix.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/iobound_green.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/logger.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/mako_ugreen.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/mulefunc.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/multiapp.txt +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/myadmin.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/pgbound_async.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/picazzo.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/psycogreen_green.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/psycopg2_green.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/pump.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/queue.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/refcount.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/rpc.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/rpc.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/runningthread.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sendchunked.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sharedarea.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sig.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/signals.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sigwait.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sleeping_async.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sleeping_green.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sleepthreadasync.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/slow.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/spoolme.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/static/test.txt +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/static/test2.txt +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/staticfile.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/streamer.psgi +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/t/static.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/templates/queue.html +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testapp.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testfilewrapper.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testgevent.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testpy3.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testrpc.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testsignals.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testworkers.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testyieldnone.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/threads.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/travis.sh +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/ugevent.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/web3.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat_async.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat_asyncio.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.lua +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.pl +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.ru +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/werkzeug_app.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgi_main.c +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgidecorators.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgidsl.rb +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/valgrind/README +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vassals/broodlord.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vassals/cc.ini +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vassals/multi.xml +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask001/app1.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask002/app2.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask003/app3.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask004/app4.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask005/app5.py +0 -0
- {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/nginx.conf +0 -0
@@ -10,6 +10,9 @@ jobs:
|
|
10
10
|
build:
|
11
11
|
strategy:
|
12
12
|
matrix:
|
13
|
+
libpcre: ["libpcre3-dev", "libpcre2-dev"]
|
14
|
+
os: ["ubuntu-20.04", "ubuntu-22.04"]
|
15
|
+
cc: [gcc, clang]
|
13
16
|
include:
|
14
17
|
- os: ubuntu-20.04
|
15
18
|
php: "php7.4"
|
@@ -17,6 +20,9 @@ jobs:
|
|
17
20
|
- os: ubuntu-22.04
|
18
21
|
php: "php8.1"
|
19
22
|
php-config: "php-config8.1"
|
23
|
+
exclude:
|
24
|
+
- os: ubuntu-20.04
|
25
|
+
cc: "clang"
|
20
26
|
|
21
27
|
runs-on: ${{ matrix.os }}
|
22
28
|
|
@@ -29,7 +35,7 @@ jobs:
|
|
29
35
|
run: |
|
30
36
|
sudo apt update -qq
|
31
37
|
sudo apt install --no-install-recommends -qqyf python3-dev \
|
32
|
-
libxml2-dev
|
38
|
+
libxml2-dev ${{ matrix.libpcre }} libcap2-dev \
|
33
39
|
libargon2-0-dev libsodium-dev \
|
34
40
|
${{ matrix.php }}-dev lib${{ matrix.php }}-embed \
|
35
41
|
liblua5.1-0-dev ruby-dev \
|
@@ -43,16 +49,16 @@ jobs:
|
|
43
49
|
libcurl4-openssl-dev \
|
44
50
|
openjdk-11-jdk libgloox-dev gccgo \
|
45
51
|
cli-common-dev mono-devel mono-mcs uuid-dev \
|
46
|
-
curl check
|
47
|
-
- uses: actions/checkout@
|
48
|
-
- name: Build kitchensink uWSGI binary
|
49
|
-
run: UWSGICONFIG_PHPPATH=${{ matrix.php-config }} /usr/bin/python3 uwsgiconfig.py --build travis
|
52
|
+
curl check ${{ matrix.cc == 'clang' && 'clang' || '' }}
|
53
|
+
- uses: actions/checkout@v4
|
54
|
+
- name: Build kitchensink uWSGI binary with gcc or default with clang
|
55
|
+
run: CC=${{ matrix.cc }} UWSGICONFIG_PHPPATH=${{ matrix.php-config }} /usr/bin/python3 uwsgiconfig.py --build ${{ matrix.cc == 'gcc' && 'travis' || '' }}
|
50
56
|
- name: Build uWSGI binary
|
51
57
|
run: |
|
52
|
-
/usr/bin/python3 uwsgiconfig.py --build base
|
58
|
+
CC=${{ matrix.cc }} /usr/bin/python3 uwsgiconfig.py --build base
|
53
59
|
- name: Build cgi plugin
|
54
60
|
run: |
|
55
|
-
/usr/bin/python3 uwsgiconfig.py --plugin plugins/cgi base
|
61
|
+
CC=${{ matrix.cc }} /usr/bin/python3 uwsgiconfig.py --plugin plugins/cgi base
|
56
62
|
- name: Build dummy plugin
|
57
63
|
run: |
|
58
|
-
/usr/bin/python3 uwsgiconfig.py --plugin plugins/dummy base
|
64
|
+
CC=${{ matrix.cc }} /usr/bin/python3 uwsgiconfig.py --plugin plugins/dummy base
|
@@ -21,13 +21,13 @@ jobs:
|
|
21
21
|
run: |
|
22
22
|
sudo apt update -qq
|
23
23
|
sudo apt install --no-install-recommends -qqyf python${{ matrix.python-version }}-dev \
|
24
|
-
|
24
|
+
libpcre2-dev libjansson-dev libcap2-dev \
|
25
25
|
curl check
|
26
26
|
- name: Install distutils
|
27
27
|
if: contains(fromJson('["3.6","3.7","3.8","3.9","3.10","3.11","3.12"]'), matrix.python-version)
|
28
28
|
run: |
|
29
29
|
sudo apt install --no-install-recommends -qqyf python${{ matrix.python-version }}-distutils \
|
30
|
-
- uses: actions/checkout@
|
30
|
+
- uses: actions/checkout@v4
|
31
31
|
- name: Run unit tests
|
32
32
|
if: matrix.test-suite == 'unittest'
|
33
33
|
run: make tests
|
@@ -61,7 +61,7 @@ jobs:
|
|
61
61
|
sudo apt install --no-install-recommends -qqyf python3-dev \
|
62
62
|
libpcre3-dev libjansson-dev libcap2-dev ruby2.7-dev \
|
63
63
|
curl check
|
64
|
-
- uses: actions/checkout@
|
64
|
+
- uses: actions/checkout@v4
|
65
65
|
- name: Run unit tests
|
66
66
|
run: make tests
|
67
67
|
- name: Build uWSGI binary
|
@@ -160,7 +160,7 @@ static struct uwsgi_alarm_instance *uwsgi_alarm_get_instance(char *name) {
|
|
160
160
|
}
|
161
161
|
|
162
162
|
|
163
|
-
#
|
163
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
164
164
|
static int uwsgi_alarm_log_add(char *alarms, char *regexp, int negate) {
|
165
165
|
|
166
166
|
struct uwsgi_alarm_log *old_ual = NULL, *ual = uwsgi.alarm_logs;
|
@@ -170,7 +170,8 @@ static int uwsgi_alarm_log_add(char *alarms, char *regexp, int negate) {
|
|
170
170
|
}
|
171
171
|
|
172
172
|
ual = uwsgi_calloc(sizeof(struct uwsgi_alarm_log));
|
173
|
-
if (uwsgi_regexp_build(regexp, &ual->pattern
|
173
|
+
if (uwsgi_regexp_build(regexp, &ual->pattern)) {
|
174
|
+
free(ual);
|
174
175
|
return -1;
|
175
176
|
}
|
176
177
|
ual->negate = negate;
|
@@ -330,7 +331,7 @@ void uwsgi_alarms_init() {
|
|
330
331
|
usl = usl->next;
|
331
332
|
}
|
332
333
|
|
333
|
-
#
|
334
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
334
335
|
// then map log-alarm
|
335
336
|
usl = uwsgi.alarm_logs_list;
|
336
337
|
while (usl) {
|
@@ -376,14 +377,14 @@ void uwsgi_alarm_trigger_uai(struct uwsgi_alarm_instance *uai, char *msg, size_t
|
|
376
377
|
}
|
377
378
|
}
|
378
379
|
|
379
|
-
#
|
380
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
380
381
|
// check if a log should raise an alarm
|
381
382
|
void uwsgi_alarm_log_check(char *msg, size_t len) {
|
382
383
|
if (!uwsgi_strncmp(msg, len, "[uwsgi-alarm", 12))
|
383
384
|
return;
|
384
385
|
struct uwsgi_alarm_log *ual = uwsgi.alarm_logs;
|
385
386
|
while (ual) {
|
386
|
-
if (uwsgi_regexp_match(ual->pattern,
|
387
|
+
if (uwsgi_regexp_match(ual->pattern, msg, len) >= 0) {
|
387
388
|
if (!ual->negate) {
|
388
389
|
struct uwsgi_alarm_ll *uall = ual->alarms;
|
389
390
|
while (uall) {
|
@@ -737,6 +737,12 @@ void uwsgi_cache_fix(struct uwsgi_cache *uc) {
|
|
737
737
|
if (uci->expires && (!next_scan || next_scan > uci->expires)) {
|
738
738
|
next_scan = uci->expires;
|
739
739
|
}
|
740
|
+
if (!uc->lru_head && !uci->lru_prev) {
|
741
|
+
uc->lru_head = i;
|
742
|
+
}
|
743
|
+
if (!uc->lru_tail && !uci->lru_next) {
|
744
|
+
uc->lru_tail = i;
|
745
|
+
}
|
740
746
|
restored++;
|
741
747
|
}
|
742
748
|
else {
|
@@ -314,7 +314,7 @@ int uwsgi_logic_opt_if_not_hostname(char *key, char *value) {
|
|
314
314
|
return 0;
|
315
315
|
}
|
316
316
|
|
317
|
-
#
|
317
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
318
318
|
int uwsgi_logic_opt_if_hostname_match(char *key, char *value) {
|
319
319
|
if (uwsgi_regexp_match_pattern(uwsgi.logic_opt_data, uwsgi.hostname)) {
|
320
320
|
add_exported_option(key, uwsgi_substitute(value, "%(_)", uwsgi.logic_opt_data), 0);
|
@@ -87,8 +87,6 @@ void uwsgi_ini_config(char *file, char *magic_table[]) {
|
|
87
87
|
char *key;
|
88
88
|
char *val;
|
89
89
|
|
90
|
-
int lines = 1;
|
91
|
-
|
92
90
|
char *section_asked = "uwsgi";
|
93
91
|
char *colon;
|
94
92
|
int got_section = 0;
|
@@ -130,7 +128,6 @@ void uwsgi_ini_config(char *file, char *magic_table[]) {
|
|
130
128
|
if (ini_line == NULL) {
|
131
129
|
break;
|
132
130
|
}
|
133
|
-
lines++;
|
134
131
|
|
135
132
|
// skip empty line
|
136
133
|
key = ini_lstrip(ini);
|
@@ -414,7 +414,7 @@ void uwsgi_setup_log_master(void) {
|
|
414
414
|
usl = usl->next;
|
415
415
|
}
|
416
416
|
|
417
|
-
#
|
417
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
418
418
|
// set logger by its id
|
419
419
|
struct uwsgi_regexp_list *url = uwsgi.log_route;
|
420
420
|
while (url) {
|
@@ -707,7 +707,7 @@ void uwsgi_logit_simple(struct wsgi_request *wsgi_req) {
|
|
707
707
|
}
|
708
708
|
|
709
709
|
if (uwsgi.logging_options.memory_report == 1) {
|
710
|
-
rlen = snprintf(mempkt, 4096, "{address space usage: %
|
710
|
+
rlen = snprintf(mempkt, 4096, "{address space usage: %llu bytes/%lluMB} {rss usage: %llu bytes/%lluMB} ", (unsigned long long) uwsgi.workers[uwsgi.mywid].vsz_size, (unsigned long long) uwsgi.workers[uwsgi.mywid].vsz_size / 1024 / 1024,
|
711
711
|
(unsigned long long) uwsgi.workers[uwsgi.mywid].rss_size, (unsigned long long) uwsgi.workers[uwsgi.mywid].rss_size / 1024 / 1024);
|
712
712
|
logvec[logvecpos].iov_base = mempkt;
|
713
713
|
logvec[logvecpos].iov_len = rlen;
|
@@ -749,7 +749,7 @@ void get_memusage(uint64_t * rss, uint64_t * vsz) {
|
|
749
749
|
int i;
|
750
750
|
procfile = fopen("/proc/self/stat", "r");
|
751
751
|
if (procfile) {
|
752
|
-
i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %
|
752
|
+
i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %llu", (unsigned long long *) vsz, (unsigned long long *) rss);
|
753
753
|
if (i != 2) {
|
754
754
|
uwsgi_log("warning: invalid record in /proc/self/stat\n");
|
755
755
|
} else {
|
@@ -763,7 +763,7 @@ void get_memusage(uint64_t * rss, uint64_t * vsz) {
|
|
763
763
|
int i;
|
764
764
|
procfile = fopen("/proc/self/stat", "r");
|
765
765
|
if (procfile) {
|
766
|
-
i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %
|
766
|
+
i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %llu", (unsigned long long *) vsz, (unsigned long long *) rss);
|
767
767
|
if (i != 2) {
|
768
768
|
uwsgi_log("warning: invalid record in /proc/self/stat\n");
|
769
769
|
}
|
@@ -1398,11 +1398,11 @@ int uwsgi_master_log(void) {
|
|
1398
1398
|
|
1399
1399
|
ssize_t rlen = read(uwsgi.shared->worker_log_pipe[0], uwsgi.log_master_buf, uwsgi.log_master_bufsize);
|
1400
1400
|
if (rlen > 0) {
|
1401
|
-
#
|
1401
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
1402
1402
|
uwsgi_alarm_log_check(uwsgi.log_master_buf, rlen);
|
1403
1403
|
struct uwsgi_regexp_list *url = uwsgi.log_drain_rules;
|
1404
1404
|
while (url) {
|
1405
|
-
if (uwsgi_regexp_match(url->pattern,
|
1405
|
+
if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
|
1406
1406
|
return 0;
|
1407
1407
|
}
|
1408
1408
|
url = url->next;
|
@@ -1411,7 +1411,7 @@ int uwsgi_master_log(void) {
|
|
1411
1411
|
int show = 0;
|
1412
1412
|
url = uwsgi.log_filter_rules;
|
1413
1413
|
while (url) {
|
1414
|
-
if (uwsgi_regexp_match(url->pattern,
|
1414
|
+
if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
|
1415
1415
|
show = 1;
|
1416
1416
|
break;
|
1417
1417
|
}
|
@@ -1424,7 +1424,7 @@ int uwsgi_master_log(void) {
|
|
1424
1424
|
url = uwsgi.log_route;
|
1425
1425
|
int finish = 0;
|
1426
1426
|
while (url) {
|
1427
|
-
if (uwsgi_regexp_match(url->pattern,
|
1427
|
+
if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
|
1428
1428
|
struct uwsgi_logger *ul_route = (struct uwsgi_logger *) url->custom_ptr;
|
1429
1429
|
if (ul_route) {
|
1430
1430
|
uwsgi_log_func_do(uwsgi.requested_log_encoders, ul_route, uwsgi.log_master_buf, rlen);
|
@@ -1464,11 +1464,11 @@ int uwsgi_master_req_log(void) {
|
|
1464
1464
|
|
1465
1465
|
ssize_t rlen = read(uwsgi.shared->worker_req_log_pipe[0], uwsgi.log_master_buf, uwsgi.log_master_bufsize);
|
1466
1466
|
if (rlen > 0) {
|
1467
|
-
#
|
1467
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
1468
1468
|
struct uwsgi_regexp_list *url = uwsgi.log_req_route;
|
1469
1469
|
int finish = 0;
|
1470
1470
|
while (url) {
|
1471
|
-
if (uwsgi_regexp_match(url->pattern,
|
1471
|
+
if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
|
1472
1472
|
struct uwsgi_logger *ul_route = (struct uwsgi_logger *) url->custom_ptr;
|
1473
1473
|
if (ul_route) {
|
1474
1474
|
uwsgi_log_func_do(uwsgi.requested_log_req_encoders, ul_route, uwsgi.log_master_buf, rlen);
|
@@ -60,6 +60,9 @@ void *uwsgi_get_loop(char *name) {
|
|
60
60
|
|
61
61
|
void simple_loop() {
|
62
62
|
uwsgi_loop_cores_run(simple_loop_run);
|
63
|
+
// Other threads may still run. Make sure they will stop.
|
64
|
+
uwsgi.workers[uwsgi.mywid].manage_next_request = 0;
|
65
|
+
|
63
66
|
if (uwsgi.workers[uwsgi.mywid].shutdown_sockets)
|
64
67
|
uwsgi_shutdown_all_sockets();
|
65
68
|
}
|
@@ -78,9 +81,6 @@ void uwsgi_setup_thread_req(long core_id, struct wsgi_request *wsgi_req) {
|
|
78
81
|
int i;
|
79
82
|
sigset_t smask;
|
80
83
|
|
81
|
-
|
82
|
-
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &i);
|
83
|
-
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &i);
|
84
84
|
pthread_setspecific(uwsgi.tur_key, (void *) wsgi_req);
|
85
85
|
|
86
86
|
if (core_id > 0) {
|
@@ -253,7 +253,7 @@ static void master_check_listen_queue() {
|
|
253
253
|
uint64_t backlog = 0;
|
254
254
|
struct uwsgi_socket *uwsgi_sock = uwsgi.sockets;
|
255
255
|
while(uwsgi_sock) {
|
256
|
-
if (uwsgi_sock->family == AF_INET) {
|
256
|
+
if (uwsgi_sock->family == AF_INET || uwsgi_sock->family == AF_INET6) {
|
257
257
|
get_tcp_info(uwsgi_sock);
|
258
258
|
}
|
259
259
|
#ifdef __linux__
|
@@ -180,7 +180,7 @@ done:
|
|
180
180
|
|
181
181
|
}
|
182
182
|
|
183
|
-
int uwsgi_master_check_harakiri(int w, int c,
|
183
|
+
int uwsgi_master_check_harakiri(int w, int c, time_t harakiri) {
|
184
184
|
/**
|
185
185
|
* Triggers a harakiri when the following conditions are met:
|
186
186
|
* - harakiri timeout > current time
|
@@ -0,0 +1,178 @@
|
|
1
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
2
|
+
#include "uwsgi.h"
|
3
|
+
|
4
|
+
extern struct uwsgi_server uwsgi;
|
5
|
+
|
6
|
+
void uwsgi_opt_pcre_jit(char *opt, char *value, void *foobar) {
|
7
|
+
#if defined(PCRE_STUDY_JIT_COMPILE) && defined(PCRE_CONFIG_JIT)
|
8
|
+
int has_jit = 0, ret;
|
9
|
+
ret = pcre_config(PCRE_CONFIG_JIT, &has_jit);
|
10
|
+
if (ret != 0 || has_jit != 1)
|
11
|
+
return;
|
12
|
+
uwsgi.pcre_jit = PCRE_STUDY_JIT_COMPILE;
|
13
|
+
#elif defined(PCRE2_CONFIG_JIT)
|
14
|
+
int has_jit = 0, ret;
|
15
|
+
ret = pcre2_config(PCRE2_CONFIG_JIT, &has_jit);
|
16
|
+
if (ret != 0)
|
17
|
+
return;
|
18
|
+
uwsgi.pcre_jit = has_jit;
|
19
|
+
#endif
|
20
|
+
}
|
21
|
+
|
22
|
+
int uwsgi_regexp_build(char *re, uwsgi_pcre ** pattern) {
|
23
|
+
|
24
|
+
#ifdef UWSGI_PCRE2
|
25
|
+
int errnbr;
|
26
|
+
long unsigned int erroff;
|
27
|
+
|
28
|
+
*pattern = pcre2_compile((const unsigned char *) re, PCRE2_ZERO_TERMINATED, 0, &errnbr, &erroff, NULL);
|
29
|
+
#else
|
30
|
+
const char *errstr;
|
31
|
+
int erroff;
|
32
|
+
|
33
|
+
*pattern = uwsgi_malloc(sizeof(uwsgi_pcre));
|
34
|
+
(*pattern)->p = pcre_compile((const char *) re, 0, &errstr, &erroff, NULL);
|
35
|
+
#endif
|
36
|
+
#ifdef UWSGI_PCRE2
|
37
|
+
if (!(*pattern)) {
|
38
|
+
uwsgi_log("pcre error: code %d at offset %d\n", errnbr, erroff);
|
39
|
+
#else
|
40
|
+
if (!((*pattern)->p)) {
|
41
|
+
uwsgi_log("pcre error: %s at offset %d\n", errstr, erroff);
|
42
|
+
#endif
|
43
|
+
return -1;
|
44
|
+
}
|
45
|
+
|
46
|
+
#ifdef UWSGI_PCRE2
|
47
|
+
if (uwsgi.pcre_jit) {
|
48
|
+
errnbr = pcre2_jit_compile(*pattern, PCRE2_JIT_COMPLETE);
|
49
|
+
if (errnbr) {
|
50
|
+
pcre2_code_free(*pattern);
|
51
|
+
uwsgi_log("pcre JIT compile error code %d\n", errnbr);
|
52
|
+
return -1;
|
53
|
+
}
|
54
|
+
#else
|
55
|
+
int opt = uwsgi.pcre_jit;
|
56
|
+
|
57
|
+
(*pattern)->extra = (pcre_extra *) pcre_study((const pcre *) (*pattern)->p, opt, &errstr);
|
58
|
+
if ((*pattern)->extra == NULL && errstr != NULL) {
|
59
|
+
pcre_free((*pattern)->p);
|
60
|
+
free(*pattern);
|
61
|
+
uwsgi_log("pcre (study) error: %s\n", errstr);
|
62
|
+
return -1;
|
63
|
+
#endif
|
64
|
+
}
|
65
|
+
|
66
|
+
return 0;
|
67
|
+
|
68
|
+
}
|
69
|
+
|
70
|
+
int uwsgi_regexp_match(uwsgi_pcre *pattern, const char *subject, int length) {
|
71
|
+
#ifdef UWSGI_PCRE2
|
72
|
+
return pcre2_match(pattern, (const unsigned char *)subject, length, 0, 0, NULL, NULL);
|
73
|
+
#else
|
74
|
+
return pcre_exec((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, subject, length, 0, 0, NULL, 0);
|
75
|
+
#endif
|
76
|
+
}
|
77
|
+
|
78
|
+
int uwsgi_regexp_match_ovec(uwsgi_pcre *pattern, const char *subject, int length, int *ovec, int n) {
|
79
|
+
|
80
|
+
#ifdef UWSGI_PCRE2
|
81
|
+
int rc;
|
82
|
+
int i;
|
83
|
+
pcre2_match_data *match_data;
|
84
|
+
size_t *pcre2_ovec;
|
85
|
+
|
86
|
+
match_data = pcre2_match_data_create_from_pattern(pattern, NULL);
|
87
|
+
rc = pcre2_match(pattern, (const unsigned char *)subject, length, 0, 0, match_data, NULL);
|
88
|
+
|
89
|
+
/*
|
90
|
+
* Quoting PCRE{,2} spec, "The first pair of integers, ovector[0]
|
91
|
+
* and ovector[1], identify the portion of the subject string matched
|
92
|
+
* by the entire pattern. The next pair is used for the first capturing
|
93
|
+
* subpattern, and so on." Therefore, the ovector size is the number of
|
94
|
+
* capturing subpatterns (INFO_CAPTURECOUNT), from uwsgi_regexp_ovector(),
|
95
|
+
* as matching pairs, plus room for the first pair.
|
96
|
+
*/
|
97
|
+
if (n > 0) {
|
98
|
+
// copy pcre2 output vector to uwsgi output vector
|
99
|
+
pcre2_ovec = pcre2_get_ovector_pointer(match_data);
|
100
|
+
for (i=0;i<(n+1)*2;i++) {
|
101
|
+
ovec[i] = pcre2_ovec[i];
|
102
|
+
}
|
103
|
+
#else
|
104
|
+
if (n > 0) {
|
105
|
+
return pcre_exec((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, subject, length, 0, 0, ovec, PCRE_OVECTOR_BYTESIZE(n));
|
106
|
+
#endif
|
107
|
+
}
|
108
|
+
|
109
|
+
#ifdef UWSGI_PCRE2
|
110
|
+
pcre2_match_data_free(match_data);
|
111
|
+
|
112
|
+
return rc;
|
113
|
+
#else
|
114
|
+
return pcre_exec((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, subject, length, 0, 0, NULL, 0);
|
115
|
+
#endif
|
116
|
+
}
|
117
|
+
|
118
|
+
int uwsgi_regexp_ovector(const uwsgi_pcre *pattern) {
|
119
|
+
|
120
|
+
int n;
|
121
|
+
#ifdef UWSGI_PCRE2
|
122
|
+
if (pcre2_pattern_info(pattern, PCRE2_INFO_CAPTURECOUNT, &n))
|
123
|
+
#else
|
124
|
+
if (pcre_fullinfo((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, PCRE_INFO_CAPTURECOUNT, &n))
|
125
|
+
#endif
|
126
|
+
return 0;
|
127
|
+
|
128
|
+
return n;
|
129
|
+
}
|
130
|
+
|
131
|
+
char *uwsgi_regexp_apply_ovec(char *src, int src_n, char *dst, int dst_n, int *ovector, int n) {
|
132
|
+
|
133
|
+
int i;
|
134
|
+
int dollar = 0;
|
135
|
+
|
136
|
+
size_t dollars = n;
|
137
|
+
|
138
|
+
for(i=0;i<dst_n;i++) {
|
139
|
+
if (dst[i] == '$') {
|
140
|
+
dollars++;
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
char *res = uwsgi_malloc(dst_n + (src_n * dollars) + 1);
|
145
|
+
char *ptr = res;
|
146
|
+
|
147
|
+
for (i = 0; i < dst_n; i++) {
|
148
|
+
if (dollar) {
|
149
|
+
if (isdigit((int) dst[i])) {
|
150
|
+
int pos = (dst[i] - 48);
|
151
|
+
if (pos <= n) {
|
152
|
+
pos = pos * 2;
|
153
|
+
memcpy(ptr, src + ovector[pos], ovector[pos + 1] - ovector[pos]);
|
154
|
+
ptr += ovector[pos + 1] - ovector[pos];
|
155
|
+
}
|
156
|
+
}
|
157
|
+
else {
|
158
|
+
*ptr++ = '$';
|
159
|
+
*ptr++ = dst[i];
|
160
|
+
}
|
161
|
+
dollar = 0;
|
162
|
+
}
|
163
|
+
else {
|
164
|
+
if (dst[i] == '$') {
|
165
|
+
dollar = 1;
|
166
|
+
}
|
167
|
+
else {
|
168
|
+
*ptr++ = dst[i];
|
169
|
+
}
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
*ptr++ = 0;
|
174
|
+
|
175
|
+
return res;
|
176
|
+
}
|
177
|
+
|
178
|
+
#endif
|
@@ -211,7 +211,7 @@ int uwsgi_apply_routes_do(struct uwsgi_route *routes, struct wsgi_request *wsgi_
|
|
211
211
|
subject = *subject2 ;
|
212
212
|
subject_len = *subject_len2;
|
213
213
|
}
|
214
|
-
n = uwsgi_regexp_match_ovec(routes->pattern,
|
214
|
+
n = uwsgi_regexp_match_ovec(routes->pattern, subject, subject_len, routes->ovector[wsgi_req->async_id], routes->ovn[wsgi_req->async_id]);
|
215
215
|
}
|
216
216
|
else {
|
217
217
|
int ret = routes->if_func(wsgi_req, routes);
|
@@ -506,15 +506,15 @@ void uwsgi_fixup_routes(struct uwsgi_route *ur) {
|
|
506
506
|
|
507
507
|
// fill them if needed... (this is an optimization for route with a static subject)
|
508
508
|
if (ur->subject && ur->subject_len) {
|
509
|
-
|
509
|
+
if (uwsgi_regexp_build(ur->orig_route, &ur->pattern)) {
|
510
510
|
exit(1);
|
511
511
|
}
|
512
512
|
|
513
513
|
int i;
|
514
514
|
for(i=0;i<uwsgi.cores;i++) {
|
515
|
-
|
515
|
+
ur->ovn[i] = uwsgi_regexp_ovector(ur->pattern);
|
516
516
|
if (ur->ovn[i] > 0) {
|
517
|
-
ur->ovector[i] = uwsgi_calloc(sizeof(int) * (
|
517
|
+
ur->ovector[i] = uwsgi_calloc(sizeof(int) * PCRE_OVECTOR_BYTESIZE(ur->ovn[i]));
|
518
518
|
}
|
519
519
|
}
|
520
520
|
}
|
@@ -1484,38 +1484,47 @@ static int uwsgi_route_condition_regexp(struct wsgi_request *wsgi_req, struct uw
|
|
1484
1484
|
ur->condition_ub[wsgi_req->async_id] = uwsgi_routing_translate(wsgi_req, ur, NULL, 0, ur->subject_str, semicolon - ur->subject_str);
|
1485
1485
|
if (!ur->condition_ub[wsgi_req->async_id]) return -1;
|
1486
1486
|
|
1487
|
-
|
1488
|
-
pcre_extra *pattern_extra;
|
1487
|
+
uwsgi_pcre *pattern;
|
1489
1488
|
char *re = uwsgi_concat2n(semicolon+1, ur->subject_str_len - ((semicolon+1) - ur->subject_str), "", 0);
|
1490
|
-
if (uwsgi_regexp_build(re, &pattern
|
1489
|
+
if (uwsgi_regexp_build(re, &pattern)) {
|
1491
1490
|
free(re);
|
1492
1491
|
return -1;
|
1493
1492
|
}
|
1494
1493
|
free(re);
|
1495
1494
|
|
1496
1495
|
// a condition has no initialized vectors, let's create them
|
1497
|
-
ur->ovn[wsgi_req->async_id] = uwsgi_regexp_ovector(pattern
|
1496
|
+
ur->ovn[wsgi_req->async_id] = uwsgi_regexp_ovector(pattern);
|
1498
1497
|
if (ur->ovn[wsgi_req->async_id] > 0) {
|
1499
1498
|
ur->ovector[wsgi_req->async_id] = uwsgi_calloc(sizeof(int) * (3 * (ur->ovn[wsgi_req->async_id] + 1)));
|
1500
1499
|
}
|
1501
1500
|
|
1502
|
-
if (uwsgi_regexp_match_ovec(pattern,
|
1503
|
-
|
1501
|
+
if (uwsgi_regexp_match_ovec(pattern, ur->condition_ub[wsgi_req->async_id]->buf, ur->condition_ub[wsgi_req->async_id]->pos, ur->ovector[wsgi_req->async_id], ur->ovn[wsgi_req->async_id] ) >= 0) {
|
1502
|
+
#ifdef UWSGI_PCRE2
|
1503
|
+
pcre2_code_free(pattern);
|
1504
|
+
#else
|
1505
|
+
pcre_free(pattern->p);
|
1504
1506
|
#ifdef PCRE_STUDY_JIT_COMPILE
|
1505
|
-
pcre_free_study(
|
1507
|
+
pcre_free_study(pattern->extra);
|
1506
1508
|
#else
|
1507
|
-
pcre_free(
|
1509
|
+
pcre_free(pattern->extra);
|
1510
|
+
#endif
|
1511
|
+
free(pattern);
|
1508
1512
|
#endif
|
1509
1513
|
return 1;
|
1510
1514
|
}
|
1511
1515
|
|
1512
|
-
|
1516
|
+
#ifdef UWSGI_PCRE2
|
1517
|
+
pcre2_code_free(pattern);
|
1518
|
+
#else
|
1519
|
+
pcre_free(pattern->p);
|
1513
1520
|
#ifdef PCRE_STUDY_JIT_COMPILE
|
1514
|
-
pcre_free_study(
|
1521
|
+
pcre_free_study(pattern->extra);
|
1515
1522
|
#else
|
1516
|
-
pcre_free(
|
1523
|
+
pcre_free(pattern->extra);
|
1517
1524
|
#endif
|
1518
|
-
|
1525
|
+
free(pattern);
|
1526
|
+
#endif
|
1527
|
+
return 0;
|
1519
1528
|
}
|
1520
1529
|
|
1521
1530
|
static int uwsgi_route_condition_empty(struct wsgi_request *wsgi_req, struct uwsgi_route *ur) {
|
@@ -145,10 +145,10 @@ static int uwsgi_sni_cb(SSL *ssl, int *ad, void *arg) {
|
|
145
145
|
|
146
146
|
if (uwsgi.subscription_dotsplit) goto end;
|
147
147
|
|
148
|
-
#
|
148
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
149
149
|
struct uwsgi_regexp_list *url = uwsgi.sni_regexp;
|
150
150
|
while(url) {
|
151
|
-
if (uwsgi_regexp_match(url->pattern,
|
151
|
+
if (uwsgi_regexp_match(url->pattern, (char *)servername, servername_len) >= 0) {
|
152
152
|
SSL_set_SSL_CTX(ssl, url->custom_ptr);
|
153
153
|
return SSL_TLSEXT_ERR_OK;
|
154
154
|
}
|
@@ -621,7 +621,7 @@ void uwsgi_opt_sni(char *opt, char *value, void *foobar) {
|
|
621
621
|
return;
|
622
622
|
}
|
623
623
|
|
624
|
-
#
|
624
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
625
625
|
if (!strcmp(opt, "sni-regexp")) {
|
626
626
|
struct uwsgi_regexp_list *url = uwsgi_regexp_new_list(&uwsgi.sni_regexp, v);
|
627
627
|
url->custom_ptr = ctx;
|
@@ -630,7 +630,7 @@ void uwsgi_opt_sni(char *opt, char *value, void *foobar) {
|
|
630
630
|
#endif
|
631
631
|
struct uwsgi_string_list *usl = uwsgi_string_new_list(&uwsgi.sni, v);
|
632
632
|
usl->custom_ptr = ctx;
|
633
|
-
#
|
633
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
634
634
|
}
|
635
635
|
#endif
|
636
636
|
|
@@ -35,11 +35,11 @@ int uwsgi_static_want_gzip(struct wsgi_request *wsgi_req, char *filename, size_t
|
|
35
35
|
usl = usl->next;
|
36
36
|
}
|
37
37
|
|
38
|
-
#
|
38
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
39
39
|
// check for regexp
|
40
40
|
struct uwsgi_regexp_list *url = uwsgi.static_gzip;
|
41
41
|
while(url) {
|
42
|
-
if (uwsgi_regexp_match(url->pattern,
|
42
|
+
if (uwsgi_regexp_match(url->pattern, filename, *filename_len) >= 0) {
|
43
43
|
goto gzip;
|
44
44
|
}
|
45
45
|
url = url->next;
|
@@ -216,7 +216,7 @@ int uwsgi_add_expires_type(struct wsgi_request *wsgi_req, char *mime_type, int m
|
|
216
216
|
return 0;
|
217
217
|
}
|
218
218
|
|
219
|
-
#
|
219
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
220
220
|
int uwsgi_add_expires(struct wsgi_request *wsgi_req, char *filename, int filename_len, struct stat *st) {
|
221
221
|
|
222
222
|
struct uwsgi_dyn_dict *udd = uwsgi.static_expires;
|
@@ -225,7 +225,7 @@ int uwsgi_add_expires(struct wsgi_request *wsgi_req, char *filename, int filenam
|
|
225
225
|
char expires[31];
|
226
226
|
|
227
227
|
while (udd) {
|
228
|
-
if (uwsgi_regexp_match(udd->pattern,
|
228
|
+
if (uwsgi_regexp_match(udd->pattern, filename, filename_len) >= 0) {
|
229
229
|
int delta = uwsgi_str_num(udd->value, udd->vallen);
|
230
230
|
int size = uwsgi_http_date(now + delta, expires);
|
231
231
|
if (size > 0) {
|
@@ -238,7 +238,7 @@ int uwsgi_add_expires(struct wsgi_request *wsgi_req, char *filename, int filenam
|
|
238
238
|
|
239
239
|
udd = uwsgi.static_expires_mtime;
|
240
240
|
while (udd) {
|
241
|
-
if (uwsgi_regexp_match(udd->pattern,
|
241
|
+
if (uwsgi_regexp_match(udd->pattern, filename, filename_len) >= 0) {
|
242
242
|
int delta = uwsgi_str_num(udd->value, udd->vallen);
|
243
243
|
int size = uwsgi_http_date(st->st_mtime + delta, expires);
|
244
244
|
if (size > 0) {
|
@@ -260,7 +260,7 @@ int uwsgi_add_expires_path_info(struct wsgi_request *wsgi_req, struct stat *st)
|
|
260
260
|
char expires[31];
|
261
261
|
|
262
262
|
while (udd) {
|
263
|
-
if (uwsgi_regexp_match(udd->pattern,
|
263
|
+
if (uwsgi_regexp_match(udd->pattern, wsgi_req->path_info, wsgi_req->path_info_len) >= 0) {
|
264
264
|
int delta = uwsgi_str_num(udd->value, udd->vallen);
|
265
265
|
int size = uwsgi_http_date(now + delta, expires);
|
266
266
|
if (size > 0) {
|
@@ -273,7 +273,7 @@ int uwsgi_add_expires_path_info(struct wsgi_request *wsgi_req, struct stat *st)
|
|
273
273
|
|
274
274
|
udd = uwsgi.static_expires_path_info_mtime;
|
275
275
|
while (udd) {
|
276
|
-
if (uwsgi_regexp_match(udd->pattern,
|
276
|
+
if (uwsgi_regexp_match(udd->pattern, wsgi_req->path_info, wsgi_req->path_info_len) >= 0) {
|
277
277
|
int delta = uwsgi_str_num(udd->value, udd->vallen);
|
278
278
|
int size = uwsgi_http_date(st->st_mtime + delta, expires);
|
279
279
|
if (size > 0) {
|
@@ -295,7 +295,7 @@ int uwsgi_add_expires_uri(struct wsgi_request *wsgi_req, struct stat *st) {
|
|
295
295
|
char expires[31];
|
296
296
|
|
297
297
|
while (udd) {
|
298
|
-
if (uwsgi_regexp_match(udd->pattern,
|
298
|
+
if (uwsgi_regexp_match(udd->pattern, wsgi_req->uri, wsgi_req->uri_len) >= 0) {
|
299
299
|
int delta = uwsgi_str_num(udd->value, udd->vallen);
|
300
300
|
int size = uwsgi_http_date(now + delta, expires);
|
301
301
|
if (size > 0) {
|
@@ -308,7 +308,7 @@ int uwsgi_add_expires_uri(struct wsgi_request *wsgi_req, struct stat *st) {
|
|
308
308
|
|
309
309
|
udd = uwsgi.static_expires_uri_mtime;
|
310
310
|
while (udd) {
|
311
|
-
if (uwsgi_regexp_match(udd->pattern,
|
311
|
+
if (uwsgi_regexp_match(udd->pattern, wsgi_req->uri, wsgi_req->uri_len) >= 0) {
|
312
312
|
int delta = uwsgi_str_num(udd->value, udd->vallen);
|
313
313
|
int size = uwsgi_http_date(st->st_mtime + delta, expires);
|
314
314
|
if (size > 0) {
|
@@ -507,7 +507,7 @@ int uwsgi_real_file_serve(struct wsgi_request *wsgi_req, char *real_filename, si
|
|
507
507
|
if (uwsgi_response_prepare_headers(wsgi_req, "200 OK", 6)) return -1;
|
508
508
|
}
|
509
509
|
|
510
|
-
#
|
510
|
+
#if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
|
511
511
|
uwsgi_add_expires(wsgi_req, real_filename, real_filename_len, st);
|
512
512
|
uwsgi_add_expires_path_info(wsgi_req, st);
|
513
513
|
uwsgi_add_expires_uri(wsgi_req, st);
|