Commits on Jul 24, 2014
  1. Use iolist_to_binary/iolist_size instead of custom functions

    capflam committed Jul 23, 2014
    And avoid some useless conversions
Commits on Jul 23, 2014
  1. Merge pull request #180 from yakaz/fix-contenttype-matching-in-yaws_api

    vinoski committed Jul 23, 2014
    yaws_api: Fix matching of Content-Type in `parse_post/1`
  2. yaws_api: Fix matching of Content-Type in parse_post/1

    dumbbell committed Jul 23, 2014
    "application/x-www-form-urlencoded" can be followed by attributes, such
    as "; charset=UTF-8".
Commits on Jul 21, 2014
  1. Update known dialyzer warnings

    capflam committed Jul 21, 2014
  2. Split content data of FCGI records to be compliant with the spec

    capflam committed Jul 21, 2014
    According to the FCGI specification, the size of the content data should be
    lesser or equal to 65535.
    See for details.
Commits on Jul 10, 2014
  1. Remove support of wildcards for R15B03 and previous

    capflam committed Jul 10, 2014
    A bug in filelib:wildcard/1,2 was fixed in R16B:
    So, wildcard strings in the configuration file are now forbidden for older
  2. Add support of wildcards and relative paths to load sub-config files.

    capflam committed Jul 10, 2014
    Now, subconfig and subconfigdir targets accept relative paths, searched
    relatively to the configuration location. So for the configuration
    "/etc/yaws/yaws.conf", all relative files and directories will be searched from
    "/etc/yaws". Of course, absolute paths are always supported.
    furthermore, the subconfig target can take Unix-style wildcard strings to
    include several files at once. See filelib:wildcard/1 for details.
    Last, hidden files, starting by a dot, will be ignored in any cases.
  3. Check #deflate.min_compress_size option for large files

    capflam committed Jul 10, 2014
    Now large files are compressed only if their size is greater than
    the #deflate.min_compress_size option.
  4. Relax rules that allow the parsing of a query string or an urlencoded…

    capflam committed Jul 8, 2014
    … body
    The parsing of a query string or an urlencoded body was allowed, respectively,
    for 'GET' or 'POST' requests. Now, this can be done for any kind of requests. Of
    course, a body is parsed only if its Content-Type is set to
    In the same way, a body can now be parsed as a multipart content if its
    Content-Type is set to 'multipart/form-data', regardless of the request type.
    As a consequence of these changes, yaws_api:getvar/2 now returns the merged
    result of values found in the query string and in the urlencoded body (if any).
Commits on Jul 7, 2014
  1. Add systemd service script and fix other init scripts

    capflam committed Jun 23, 2014
    Other changes:
     * Replace README by
     * Add travis configuration
     * Fix testsuite and dependencies detection
  2. Handle a bug in unicode module in releases R14B04 and previous

    capflam committed Jun 23, 2014
    The code points 16#FFFE and 16#FFFF (not assigned but valid) are considered as
    invalid in releases R14B04 and previous. So for these releases, the websockets
    testsuite always failed. This commit worked around the bug.
    It was fixed in OTP with the commit 34db767655:
  3. Do not set recbuf by default on listening sockets

    capflam committed Jun 23, 2014
    This patch removes a bug I experienced on FreeBSD during tests on the loopback
    interface because of its MTU. So, I don't really know why that happens on
    FreeBSD and not on Linux, but because loopback MTU is greater than the recbuf
    value (16K on loopback vs 8k in Yaws), if a client sends data, Yaws will read
    them very slowly.
    Furthermore, there is no good reason to tweak this value by default. And, if
    required, it is always possible to configure it.
  4. Fix a backward compatibility bug with inet:parse_strict_address/1

    capflam committed Jun 23, 2014
    inet:parse_strict_address/1 was introduced in R16. For previous releases, we
    need to rely on inet_parse:ipv4strict_address/1 and
    inet_parse:ipv6strict_address/1 functions.
  5. Massive autotools refactoring & cleanup

    capflam committed Jun 10, 2014
    Now, all makefile are generated by automake. This way, many things are more
    configurable and maintainable.
    Main (visible) changes:
     * Now, you can configure and compile Yaws outside the source directory. It is
       also possible to generate an archive for distribution, using the 'dist' target
       (from now, 'distcheck' target should always pass).
     * We track .erl dependencies using '-M*' flags of ERLC.
     * generated header 'yaws_configure.hrl' disappears. HAVE_SENDFILE,
       HAVE_ERLANG_SENDFILE and HAVE_CRYPTO_HASH macros are defined in ERLC flags.
     * yaws_generated:localinstall/0 function disappears (see comment about local
     * To create a windows installer, we just need to run the 'mkinstaller'
       target. Read win32/README.developer for details.
     * We use standard Erlang installation path for Yaws, relative to the erlang
       library directory (/usr/lib/erlang/lib). Now, '$(libdir)/yaws' is a link. We
       do the same for yapp application.
     * "local install" was removed. Now, to do a "developer install", we just need
       to set a prefix during the project configuration using --prefix option. So,
       you need to install yaws to test it.
     * DESTDIR variable is still supported.
     * scripts/make-release was rewritten to use 'dist' and 'mkinstaller' targets.
     * Installation of Yaws applications has slightly changed. Now they are
       installed in their own directory, in '$(localstatedir)/yaws'. So, chat
       application will be installed in '$(localstatedir)/yaws/chat', with 'www' and
       'ebin' subdirs.
    Main targets (others than all/install/clean....):
      * all           : compile Yaws
      * debug         : compile Yaws with debug flags
      * clean         : remove files produced by all or debug target
      * install       : do a proper install of Yaws
      * doc or docs   : build the documentation
      * check or test : launch tests
      * cleantest     : remove files produced by check target
      * dialyzer      : run dialyzer on Yaws
      * mkinstaller   : build an installer for windows
      * cleaninstaller: remove files produced by mkinstaller target
      * apps          : compile Yaws applications (chat,mail,wiki,yapp)
      * cleanapps     : remove files produced by apps target
      * installapps   : install Yaws applications
      * fullinstall   : install + installapps
      * fullclean     : clean + cleantest + cleanapps + cleaninstaller
      To install an application, run: (cd application/{APP} && make install)
    Of course, many things can be customized during configuration and Rebar still
    works as expected. To do an install with (almost) the same tree than with
    previous of Yaws, do:
      $> ./configure yawsdir=${prefix}/lib/yaws yappdir=${prefix}/lib/yapp \
            --sysconfdir=/etc --localstatedir=/var
      $> make install
    Here is the default installation tree on my debian:
        ├── lib
        │   └── erlang
        │       └── lib
        │           ├── yapp-0.4.2
        │           │   ├── doc/
        │           │   ├── ebin/
        │           │   ├── examples/
        │           │   └── priv/docroot/
        │           └── yaws-1.98
        │               ├── ebin/
        │               ├── include/
        │               └── priv/
        │               ├── examples/
        ├── local/bin/yaws
        ├── local/etc/init.d/yaws
        ├── local/etc/yaws/
        ├── local/etc/mail/yaws-webmail.conf
        ├── local/lib/pkgconfig/yaws.pc
        ├── local/lib/yapp -> /usr/lib/erlang/lib/yapp-0.4.2
        ├── local/lib/yaws -> /usr/lib/erlang/lib/yaws-1.98
        ├── local/share/doc/yaws/yaws.pdf
        ├── local/share/man/{man1,man5}/
        ├── local/var/log/yaws
        ├── local/var/run/yaws
        └── local/var/yaws
            ├── chat/{ebin,www}
            ├── mail/{ebin,www}
            ├── wiki/{ebin,www}
            └── www
Commits on May 27, 2014
  1. update known dialyzer warnings

    vinoski committed May 27, 2014
Commits on May 20, 2014
  1. convert non-ASCII characters in json2 decoding

    vinoski committed May 20, 2014
    Non-ASCII characters in JSON strings are now decoded to UTF-8.
Commits on Apr 29, 2014
  1. fix broken rebar build

    vinoski committed Apr 29, 2014
    In commit cb49390 I broke the ability for yaws to be used as a rebar
    dependency for other projects. Move src/ back to
    src/ Move the code in rebar.config.script to
    src/ file to process the app dependencies for
    src/ Change src/Makefile to process app dependencies when
    creating ebin/
Commits on Apr 22, 2014
  1. Merge pull request #176 from richcarl/remove-vsn-attributes

    vinoski committed Apr 22, 2014
    remove -vsn attributes to ensure the MD5 sum is used for all modules
Commits on Apr 16, 2014
  1. Merge pull request #175 from yakaz/fcgi-ipv6

    vinoski committed Apr 16, 2014
    IPv6 address parsing + IPv6 lookup for FastCGI and reverse proxy
Commits on Apr 15, 2014
  1. Add a nslookup_pref global parameter

    dumbbell committed Apr 9, 2014
    This parameter allows to change the name resolution and connection
    preference for fcgi servers and revproxy URLs. It takes a list of the
    form [inet | inet6].
    For instance, to perform only IPv4 resolution:
        nslookup_pref = [inet]
    To perform both IPv4 and IPv6, but try IPv6 first:
        nslookup_pref = [inet6, inet]
    The default value is [inet]. Therefore, the behavior remains the same
    with this addition.
    This parameter is used by two new functions:
        o  yaws:tcp_connect/{3,4}
        o  yaws:ssl_connect/{3,4}
    They are wrappers around gen_tcp:connect/{3,4} and ssl:connect/{3,4} and
    take care of connection retries for each configured family.
  2. Accept an IPv6 between "[...]" as an fcgi server hostname

    dumbbell committed Apr 9, 2014
    Here are some examples:
        php_handler = <fcgi, [::1]:9000>
        fcgi_app_server = [::1]:9000
    The square brackets syntax is already used in URLs (http://[::1]:8080/)
    and allows to mix an IPv6 address and a port number.
    While here, fix a bug in revproxy URL parsing where IPv6 between
    brackets were considered as a syntax error.
Commits on Apr 14, 2014
  1. Merge pull request #174 from yakaz/install-freebsd

    vinoski committed Apr 14, 2014
    scripts/Install: Create ${etcdir}/rc.d on FreeBSD
  2. scripts/Install: Create ${etcdir}/rc.d on FreeBSD

    dumbbell committed Apr 14, 2014
    If Yaws is installed in a non-standard directory, we must create
    ${etcdir}/rc.d before copying the init script there.
Commits on Apr 13, 2014
Commits on Apr 12, 2014
  1. allow a cleanup pid with replace_cookie_session

    vinoski committed Apr 12, 2014
    Add yaws_api:replace_cookie_session/3 and
    yaws_session_server:replace_session/3 to allow the user to pass a cleanup
    pid in order to associate a new cleanup process with the replacement
    session. Thanks to Patrick Moy for suggesting this.
Commits on Apr 11, 2014
  1. allow extra app dependencies for to be configured

    vinoski committed Apr 3, 2014
    Yaws can depend on crypto for random numbers and hashes, and on the
    compiler for .yaws pages. But the default file specifies only
    kernel and stdlib as application dependencies, since not all Yaws
    deployments use crypto or compiler. Still, if a Yaws system uses crypto and
    compiler without including them in the file, building and
    deploying an Erlang/OTP release for that system will fail.
    Add --enable-crypto and --enable-compiler options to the configure script
    to allow the user to add either or both of these applications to the file. Specifying the --enable-crypto option also causes the Yaws
    startup code to start the crypto application; likewise for
    --enable-compiler and the compiler application.
    For rebar builds, enhance rebar.config.script to generate the same files
    the configure script generates for any extra app dependencies. Setting the
    YAWS_APPDEPS environment variable to a space- or comma-separated list of
    addition applications to add to, e.g.
    YAWS_APPDEPS='crypto compiler'
    causes rebar to add those apps to the generated file and ensure
    they're started before Yaws started.
Commits on Apr 2, 2014
  1. dialyzer maintenance

    vinoski committed Apr 2, 2014
    Fix known dialyzer warnings. Also change Makefile dialyzer rule to make it
    easier to see pass/fail results.
Commits on Mar 27, 2014
  1. remove unused -DDYNAMIC_DRIVER from c_src/Makefile

    vinoski committed Mar 27, 2014
    Thanks to Richard Carlsson for pointing out this unused option.
Commits on Mar 25, 2014
  1. add check for YAWS_DISABLE_PAM to rebar.config.script

    vinoski committed Mar 25, 2014
    Setting the OS environment variable YAWS_DISABLE_PAM to any value causes
    rebar builds to avoid building pam. This is equivalent to using the
    --disable-pam option with configure, and is useful for building in
    environments where pam development files are not available.
  2. add .rebar dir to .gitignore

    vinoski committed Mar 25, 2014
Commits on Mar 20, 2014
  1. fix #173: set ibrowse dep to v3.0.4 in rebar.config

    vinoski committed Mar 20, 2014
    Set ibrowse dependency to version 3.0.4 to match what test/Makefile
    selects. Later versions do not work so well on OS X Mavericks.