Patch title: Release 94 bulk changes
Abstract:
File: /pliant/graphic/browser/client/connect.pli
Key:
    Removed line
    Added line
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "context.pli"
module "/pliant/util/pml/io.pli"
module "/pliant/util/pml/channel.pli"


function url_split url protocol server path
  arg Str url ; arg_w Str protocol server path
  var Str all := url
  var Int dp := all search ":" -1
  var Int slash := all search "/" all:len
  if dp>0 and slash>dp
    protocol := all 0 dp ; all := all dp+1 all:len
  else
    protocol := ""
  if (all eparse "//" any:server "/" any:path)
    path := "/"+path
  else
    server := "" ; path := all


method session connect_another url context s -> status
  arg_rw BrowserSession session ; arg Str url ; arg Dictionary context ; arg_rw Stream s ; arg ExtendedStatus status
  url_split url (var Str protocol) (var Str server) (var Str path)
  # console "connect to url " url " -> " protocol " , " server " , " path eol
  if protocol="loopback"
    status := s open "loopback:/client/browser" in+out+safe+noautopost
    s otag "pliant"
    s oattr "service" "browser"
  eif protocol="tcp"
    if (server eparse any:(var Str server2) ":" (var Int port))
      server := server2
    else
      port := 36
    status := s open "tcp://"+server+"/client/"+string:port in+out+safe+noautopost # FIXME: find correct port
    s otag "pliant"
    s oattr "service" "browser"
  eif protocol="host" or protocol="site"
    var Pointer:BrowserLogin login :> session:console:login first server
    if not exists:login
      login :> session:console:login first ""
    if exists:login
      status := s open "zchannel2:/browser/"+protocol+"/"+server+"/user/"+login:user+"/"+login:password in+out+safe+noautopost
    else
      status := failure "no login"
  if status=failure
    console "server connection oops" eol


method session connect_main url context -> s
  arg_rw BrowserSession session ; arg Str url ; arg Dictionary context ; arg Link:Stream s
  each extra session:extra_connections
    extra safe_configure "shutdown"
  session url := url
  session context := context
  session namespace := var Dictionary empty_dictionary
  s :> new Stream
  session connect_another url context s
  url_split url (var Str protocol) (var Str server) (var Str path)
  if protocol="tcp" and (server eparse any:(var Str server2) ":" (var Int port))
    server := server2
  eif protocol="host"
    server := ""
  s otag "connect" server path
  s flush anytime
  session connection :> s
  thread
    part session "browser session instructions processor"
      var BrowserClientContext cc
      cc session :> share session
      cc connection :> s
      cc eos := false
      while not cc:eos and s=success
        cc process_instruction true


export url_split '. connect_main' '. connect_another'