
// // Copyright (c) 2007, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 27 Jun 07 Brian Frank Creation // using web ** ** WispReq ** class WispReq : WebReq { new make(WispService service, InStream in) { this.service = service this.in = in } override WispService service override Str method override Version version override Str:Str headers override Uri uri override Str:Obj stash := Str:Obj[:] override InStream in override Uri absUri { get { if (@absUri == null) { host := headers["Host"] if (host == null) throw Err.make("Missing Host header") @absUri = ("http://" + host + "/").toUri + uri } return @absUri } } override UserAgent userAgent { get { try { if (@userAgent == null) { header := headers["User-Agent"] if (header != null) @userAgent = UserAgent.fromStr(header) } } catch (Err e) { e.trace } return @userAgent } } override Str:Str { get { try { if (@cookies == null) { @cookies = Str:Str[:] header := headers["Cookie"] if (header != null) { header.split(";").each |Str s| { if (s[0] == '$') return c := Cookie.fromStr(s) @cookies[c.name] = c.value } } @cookies = @cookies.ro } } catch (Err e) { e.trace } return @cookies } } override Str:Str form { get { if (@form == null && headers["Content-Type"] == "application/x-www-form-urlencoded") { len := headers["Content-Length"] if (len == null) throw IOErr.make("Missing Content-Length header") @form = Uri.decodeQuery(in.readLine(len.toInt)) } return @form } } }