Commit graph

1442 commits

Author SHA1 Message Date
Jo-Philipp Wich
001e15a0db [PATCH] Explicit Cache-Control for lucid.http static content
The Chrome web browser revalidates every resource if no explicit Cache-Control or Expires HTTP/1.1 header is sent. This makes the page loads appear to take a long time on pages with a few external resources, adding 300-500ms 
per item. This includes the XHR json responses that set page images, like wireless signal indicators and the like-- the images are revalidated on every XHR response. As an example, the Network -> Interfaces page generates 16 
requests to the lucid http server:

    Main HTML
    cascade.css
    xhr.js
    tabbg.png
    cbi.js
    loading.gif
    ethernet_disabled.png
    reload.png
    reset.gif
    edit.gif
    remove.gif
    add.gif
    bridge.png
    vlan.png
    wifi.png
    iface_status 

Of those, 14 should be pulled from cache but they are all valdiated. The lucid server returns the correct 304 (Not Modified) responses but it delays the apparent page load time because of the backlog it creates at the http 
server.

I would suggest setting explicit cache control on all files returned by the lucid http directory dispatcher. The "Expires" header is reportedly more widely supported, however this relies on the clock on the OpenWrt? system 
being accurate, which may not be the case. The "Cache-Control: max-age=" allows the server to set a timeout in seconds. I've included a patch that sets revalidate interval to 1 year, which is the value recommended by google.
Reference:  http://code.google.com/speed/page-speed/docs/caching.html

Note this could create an issue if there are luci application which are generating files which change that are being served by the lucid http DirectoryPublisher?. I'm not sure if there is anyone doing that. If needed, this can 
probably be created as an option to the DirectoryPublisher? config stanza for each vhost.

Finally, this only affects the Google Chrome browser, as both IE9 and Firefox seem to have their own revalidation interval in the absence of explicit cache control which may be based on the last modified time of the resource. 
Even in Chrome, this change doesn't take effect until the item is re-served with a 200 HTTP response so Chrome's cache should be cleared after this patch is applied. The patch can be extended to include cache control on 304 
responses, but I'd not worry about cluttering the code with it because the problem will solve itself once chrome redownloads the resource.
2012-01-09 00:04:54 +00:00
Jo-Philipp Wich
a4996261ea libs/web: remove debugging code 2012-01-08 23:39:29 +00:00
Jo-Philipp Wich
875baa244a libs/web: allow zero-length string literals when parsing datatypes 2012-01-08 23:36:35 +00:00
Jo-Philipp Wich
9fcdf0fe81 libs/web: introduce recursive expression support for datatypes, introduce "or" and "and" datatypes
The commit adds a recursive parser for datatype expressions which allows nesting of validators,
this allows for complex expressions like  "list(or(range(0,65535),'infinite'))" to allow a list of
values which are either integers between 0 and 65535 or the literal string "inifinite".
That change also deprecates combined datatypes like "ipaddr" ["or(ip4addr,ip6addr)"] or
"host" ["or(hostname,ip4addr,ip6addr)"]
2012-01-08 23:33:47 +00:00
Jo-Philipp Wich
3812f29087 libs/web: remove neg_ipaddr, neg_ip4addr and neg_network_ip4addr datatypes, can be represented with neg(type) 2012-01-07 22:06:02 +00:00
Jo-Philipp Wich
481cd6feb7 libs/core: remove various uses of global vars in luci.ip 2012-01-01 15:51:37 +00:00
Jo-Philipp Wich
574eff4e8e libs/core: rework luci.model.uci.apply() to return the commandline as table, suitable for passing to nixio.exec() 2011-12-20 19:02:14 +00:00
Jo-Philipp Wich
3553d308f6 [PATCH] Naive fix for bug #208
For SimpleSection, use the section name (always "1") instead of the
section type in the CBI-like string used to identify the upload.  This
allows upload fields to be placed in SimpleSections.  The fix changes a
minimal number of lines, but does introduce some unnecessary confusion,
it may or may not be better than a more thorough/invasive fix.

Set the enctype for the form element in the simpleform view to be
multipart/form-data because the default
application/x-www-form-urlencoded does not support input files.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2011-12-20 17:52:10 +00:00
Jo-Philipp Wich
8358175f25 libs/web: show input/forward hints in zonelist widget only if bnoth allowany and allowlocal are enabled 2011-12-20 17:51:44 +00:00
Jo-Philipp Wich
b89300eb67 libs/web: prevent break between action buttons in tblsection template 2011-12-20 03:57:40 +00:00
Jo-Philipp Wich
48838ea0f7 libs/web: fix placeholder attribute for DynList 2011-12-20 03:00:17 +00:00
Jo-Philipp Wich
161218a576 libs/web: fix undesired autofocus of DynamicList widget 2011-12-20 02:56:03 +00:00
Jo-Philipp Wich
6ae669da06 libs/web: improve ip6addr datype validation, accept both CIDR and IP/Mask notation 2011-12-20 02:44:32 +00:00
Jo-Philipp Wich
24c4cce3ae libs/web: add "any" option to firewall_zonelist widget 2011-12-19 20:09:20 +00:00
Jo-Philipp Wich
21a0fcc4c1 libs/web: rework DynamicList widget to support dynamic lists composed of comboboxes 2011-12-19 18:55:59 +00:00
Jo-Philipp Wich
375a476d27 libs/web: rework hostname match to not allow arbritary sequences of numbers and dots 2011-12-16 06:05:51 +00:00
Jo-Philipp Wich
3a0905f21c libs/web: add list(...) datatype for space separated lists of arbritary datatypes 2011-12-16 05:52:24 +00:00
Jo-Philipp Wich
ca7bc48ebc [PATCH] Abstract address UNIX sockets not binding properly (by capnbry@gmail.com, #366)
In #274, I stated abstract namespace and autobound abstract namespace datagram UNIX domain sockets work perfectly with nixio. However, I may have jumped the gun on that conclusion. Turns out they work perfectly for only one 
concurrent connection.

The problem is that when binding to an abstract address socket, which begins with a NULL byte, nixio strncpy's the name into the sockaddr_un structure, which effectively copies nothing. It then binds to an address of 180 NULLs, 
which is completely legal, but obviously you run into problems when a second client tries to bind to the same address.

The rules are as follows ( http://linux.die.net/man/7/unix) for the names:

  * If the name is blank, bind() should pass that the addrlen of sizeof(sa_family_t) and Linux will autobind a name that begins with null and is followed by 5 digits.
  * If the first character of the name is non-null, the name is a pathname and is null-terminated. addrlen should be sizeof(sockaddr_un), but the length can also be the pathname len + sizeof(sa_family_t) as the value will be 
null-terminated by the kernel unix socket driver
  * If the first character is null, the address is abstract and the value should not be null-terminated and addrlen is pathname + sizeof(sa_family_t) 

The attached patch fixes bind/connect/sendto by shortening the addrlen passed to be pathname len + sizeof(sa_family_t), which generates the correct socket names for all 3 cases above.
It also fixes the address returned by recvfrom, which currently returns a blank string for any abstract address socket (as they begin with a null).
2011-12-16 02:10:37 +00:00
Jo-Philipp Wich
757e9c2f1c libs/web: add missing parts of previous commit 2011-12-16 01:18:34 +00:00
Jo-Philipp Wich
cdcfb5502b libs/web: implement "network" cbi datatype 2011-12-16 01:18:15 +00:00
Jo-Philipp Wich
c5811d52d0 libs/web: allow one-character hostnames 2011-12-14 15:01:54 +00:00
Jo-Philipp Wich
df3ee4c199 libs/core: fix undefined tostring() in network model 2011-12-05 19:36:50 +00:00
Jo-Philipp Wich
fd130ead81 libs/core: expose txpower offset values in network model 2011-12-05 18:34:22 +00:00
Jo-Philipp Wich
f6ee6322f9 From c63e369d57cb6862a8890c7b2ee1b6b449b2c42d Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Mon, 5 Dec 2011 14:36:34 +0100
Subject: [PATCH] libs/sys: read model name from /tmp/sysinfo/model if present

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
2011-12-05 16:38:54 +00:00
Jo-Philipp Wich
099e97532c libs/web: add assert() statements for unresolvable function case 2011-11-30 12:50:32 +00:00
Jo-Philipp Wich
3face70859 libs/nixio: link with libcrypto when using OpenSSL as digest backend 2011-11-20 18:18:46 +00:00
Jo-Philipp Wich
cfe48c17d3 libs/core: fix removal of wifi networks without interface attached (OpenWrt #10400) 2011-11-12 11:27:10 +00:00
Jo-Philipp Wich
fbaef58943 libs/sys: update zoneinfo data to version 2011n (#345) 2011-11-10 11:21:13 +00:00
Jo-Philipp Wich
96f494f4ba libs/web: dispatcher: fix access to template properties in attr() and ifattr() helpers (#10317) 2011-10-30 15:00:54 +00:00
Jo-Philipp Wich
84cbbf3968 libs/core: fix status reporting of standalone wifi iface in network model 2011-10-28 22:36:15 +00:00
Jo-Philipp Wich
d60d892385 libs/sys: recent busybox versions changed top output from %MEM to %VSZ, fix luci.sys.process.list() accordingly 2011-10-26 21:23:37 +00:00
Jo-Philipp Wich
334756a472 libs/web: fix possible dispatcher crash 2011-10-26 03:04:41 +00:00
Jo-Philipp Wich
e12b8dbc1f libs/web: move ifattr() and attr() helpers into dispatcher scope to make them avilable to all templates, remove duplicate exports in cbi tempalte scope 2011-10-26 02:17:45 +00:00
Jo-Philipp Wich
5f7d2719b2 libs/web: dispatcher add node_childs() and node_visible() helper functions for templates 2011-10-26 00:24:17 +00:00
Jo-Philipp Wich
6021cf3bdf libs/web: dispatcher: implement a "firstchild()" target which simply redirects to the first child of a node, useful for menus that are empty by default and may gain arbritary childs 2011-10-25 22:48:43 +00:00
Jo-Philipp Wich
621fff61a3 libs/nixio: remove forgotten stamp file 2011-10-24 21:39:47 +00:00
Jo-Philipp Wich
8cd46b595a libs/web: cbi: support description attribute in nullsection instances 2011-10-23 04:21:14 +00:00
Jo-Philipp Wich
a24d340ca4 libs/web: fix package name in error suggestion 2011-10-21 17:22:48 +00:00
Jo-Philipp Wich
f83cdb1b8b libs/ipkg: give caller more control over filter pattern 2011-10-15 03:10:19 +00:00
Jo-Philipp Wich
55297447cd libs/ipkg: don't --autoremove; its dangeros. Attempting to uninstall kmod-ipt-nat with it will remove half of luci too, additionally opkg segfaults and corrupts the status database 2011-10-14 22:25:07 +00:00
Jo-Philipp Wich
1ffe61277e move protocol support into a new protocols/ subdir 2011-10-11 02:07:15 +00:00
Jo-Philipp Wich
cd46e1611e libs/web: handle .redirect property for SimpleForm widgets 2011-10-11 01:20:36 +00:00
Jo-Philipp Wich
2c316a6aab libs/core: more fixes for network model 2011-10-11 01:14:11 +00:00
Jo-Philipp Wich
be9f5d6872 libs/core: mark relay protocol as floating 2011-10-10 18:50:42 +00:00
Jo-Philipp Wich
2337ee9206 libs/web: add network_netlist widget option to filter virtual networks 2011-10-10 18:10:12 +00:00
Jo-Philipp Wich
96846f1518 libs/core: remove uneeded error import 2011-10-09 22:04:00 +00:00
Jo-Philipp Wich
c7a95b6683 libs/core: add more heuristics to infer device name from switch name 2011-10-09 22:02:46 +00:00
Jo-Philipp Wich
ce024e350a libs/core: add luci.model.network.get_protocol(protoname[, networkname]) 2011-10-09 21:16:59 +00:00
Jo-Philipp Wich
63608d2636 libs/web: sent origin section id encoded in cbi.cts. requests 2011-10-09 20:14:25 +00:00
Jo-Philipp Wich
4fb5f1aca6 libs/web: pass origin section id to :create() callback, needed when multiple, filtered TypedSection instances of the same type are used within a single Map 2011-10-09 20:07:02 +00:00