smthttp.l


!----------------------------------------------------------------------------
!   Name:       smthttp.l
!   Title:      Dialog for SMT HTTP server
!   Package:    Libero SMT 2.x
!
!   Written:    1996/04/22  iMatix SMT kernel team smt@imatix.com
!   Revised:    2000/02/18
!
!   Copyright:  Copyright (c) 1991-2000 iMatix Corporation
!   License:    This is free software; you can redistribute it and/or modify
!               it under the terms of the SMT License Agreement as provided
!               in the file LICENSE.TXT.  This software is distributed in
!               the hope that it will be useful, but without any warranty.
!----------------------------------------------------------------------------
-schema=smtschm.c

After-Init:
    (--) Master                             -> Master-Input
          + Open-Server-Log-File
          + Load-Virtual-Hosts
          + Check-Rootdir-Exists
          + Open-Ssl-Socket-If-Needed
          + Open-Master-Socket
          + Set-Server-Process-State
          + Wait-For-Socket-Input
    (--) Sock-Retry                         -> Master-Input
          + Open-Master-Socket
          + Set-Server-Process-State
          + Wait-For-Socket-Input
    (--) Client                             -> Client-Input
          + Prepare-Client-Thread
          + Prepare-To-Read-Request
          + Read-Input-From-Socket

Master-Input:
    (--) Ok                                 ->
          + Accept-Client-Connection
          + Wait-For-Socket-Input
    (--) New-Ssl-Client                     ->
          + Create-Ssl-Child-Thread
    (--) Timer                              ->
          + Reload-Config-If-Needed
    (--) Restart                            -> Master-Restart
          + Free-All-Server-Resources
          + Kill-All-Active-Connections
          + Prepare-To-Close-Master-Socket
          + Wait-For-Connections-To-Close
    (--) Sock-Retry                         ->
          + Open-Master-Socket
          + Wait-For-Socket-Input
    (--) Sock-Closed                        -> End-Thread
          + Signal-Socket-Closed
          + Check-Socket-Type
    (--) Cancel                             ->
          +
    (--) Ssl-Open                           ->
          + Get-Ssl-Master-Port
    (--) Wsx-Install                        ->
          + Install-Wsx-Alias
    (--) Wsx-Cancel                         ->
          + Cancel-Wsx-Alias

Master-Restart: <>
    (--) Timer                              -> Master-Input
          + Close-Master-Socket
          + Reload-Config-If-Changed
          + Open-Server-Log-File
          + Load-Virtual-Hosts
          + Check-Rootdir-Exists
          + Restart-Ftp-Server-If-Reqd
          + Restart-Ssl-Agent-If-Reqd
          + Open-Ssl-Socket-If-Needed
          + Open-Master-Socket
          + Wait-For-Socket-Input
!   We reject any connection requests that come in now
    (--) Ok                                 ->
          + Reject-Client-Connection
          + Wait-For-Socket-Input
!   Superstate defines error-handling for client threads.
!   This makes error handling a little faster in all child
!   threads; in any case the Defaults handling is secure too.

Client:
    (--) Sock-Error                         ->
          + Signal-Socket-Error
          + Terminate-The-Thread
    (--) Sock-Closed                        ->
          + Terminate-The-Thread
    (--) Sock-Timeout                       ->
          + Terminate-The-Thread
    (--) Sock-Retry                         ->
          + Terminate-The-Thread
    (--) Error                              ->
          + Write-Http-Header
          + Terminate-The-Thread
    (--) Ssl-Error                          ->
          + Terminate-The-Thread
    (--) Bad-Request                        ->
          + Signal-Bad-Request
          + Terminate-The-Thread
    (--) Unauthorized                       ->
          + Signal-Url-Unauthorized
          + Terminate-The-Thread
    (--) Forbidden                          ->
          + Signal-Url-Forbidden
          + Terminate-The-Thread
    (--) Not-Found                          ->
          + Signal-Url-Not-Found
          + Terminate-The-Thread
    (--) Too-Large                          ->
          + Signal-Too-Large
          + Terminate-The-Thread
    (--) Internal-Error                     ->
          + Signal-Internal-Error
          + Terminate-The-Thread
    (--) Not-Implemented                    ->
          + Signal-Not-Implemented
          + Terminate-The-Thread
    (--) Overloaded                         ->
          + Signal-Overloaded
          + Terminate-The-Thread

Client-Input: <>
    (--) Ok                                 -> Have-Client-Request
          + Read-Http-Request-Next
          + Check-If-Request-Complete
    (--) Sock-Retry                         -> Client-Input
          + Read-Input-From-Socket

Have-Client-Request: <>
    (--) More                               -> Client-Input
          + Read-Input-From-Socket
    (--) Post                               -> Have-Client-Post
          + Check-If-Post-Data-Complete
    (--) Finished                           -> Execute-Http-Request
          + Parse-Http-Request
          + Resolve-Virtual-Hostname
          + Check-Client-Ip-Allowed

Client-Input-Post: <>
    (--) Ok                                 -> Have-Client-Post
          + Read-Http-Posted-Data
          + Check-If-Post-Data-Complete
    (--) Sock-Retry                         -> Client-Input-Post
          + Read-Input-From-Socket

Have-Client-Post: <>
    (--) More                               -> Client-Input-Post
          + Read-Input-From-Socket
    (--) Finished                           -> Execute-Http-Request
          + Parse-Http-Request
          + Resolve-Virtual-Hostname
          + Check-Client-Ip-Allowed

Execute-Http-Request: <>
    (--) Get-Request                        -> Process-Http-Get
          + Get-Url-Type
    (--) Post-Request                       -> Process-Http-Post
          + Get-Url-Type
    (--) Update-Request                     -> Process-Http-Update
          + Get-Url-Type

Process-Http-Get: <>
    (--) Html                               -> Have-Type-Of-Get
          + Check-File-Or-Directory
    (--) Cgi                                -> Have-Type-Of-Cgi
          + Check-File-Or-Directory
    (--) Filter                             -> Have-Type-Of-Filter
          + Check-File-Or-Directory
    (--) Wsx                                -> Trying-To-Get-Wsx
          + Check-If-Protected

Have-Type-Of-Get: <>
    (--) File                               -> Trying-To-Get-File
          + Check-If-Protected
    (--) Executable                         -> Trying-To-Get-File
          + Check-If-Protected
    (--) Directory                          -> Trying-To-Get-Dir
          + Check-If-Protected

Trying-To-Get-File: <>
    (--) Ok                                 -> Get-Range-Header
          + Check-For-Conditional-Get
          + Look-For-Range-Header
!   Exceptions produced by If-Modified and If-Not-Modified headers
    (--) Not-Modified                       -> Request-Finished
          + Signal-Not-Modified
          + Check-If-Keep-Alive
    (--) Precondition                       -> Request-Finished
          + Signal-Precondition
          + Check-If-Keep-Alive

Get-Range-Header:
    (--) Ok                                 -> Get-Range-If-Header
          + Look-For-Range-If-Header
    (--) Not-Found                          -> After-Sending-File
          + Write-Http-Header
          + Send-File-To-Browser

Get-Range-If-Header:
    (--) Ok                                 -> Have-Range-To-Send
          + Signal-Partial-Content
          + Get-Next-Range-Specifier
    (--) Modified                           -> After-Sending-File
          + Write-Http-Header
          + Send-File-To-Browser

Have-Range-To-Send:
    (--) More                               -> After-Sending-Range
          + Write-Http-Range-Header
          + Write-Http-Range-Body
    (--) Finished                           -> Request-Finished
          + Check-If-Keep-Alive

          +

After-Sending-Range:
    (--) Finished                           -> Have-Range-To-Send
          + Write-Http-Range-Footer
          + Get-Next-Range-Specifier

          +

Process-Http-Post: <>
    (--) Html                               ->
          + Signal-Bad-Request
          + Terminate-The-Thread
    (--) Cgi                                -> Have-Type-Of-Cgi
          + Check-File-Or-Directory
    (--) Filter                             -> Have-Type-Of-Filter
          + Check-File-Or-Directory
    (--) Wsx                                -> Trying-To-Get-Wsx
          + Check-If-Protected

Process-Http-Update: <>
    (--) Html                               -> Have-Type-Of-Update
          + Check-File-Or-Directory
    (--) Cgi                                ->
          + Signal-Bad-Request
          + Terminate-The-Thread
    (--) Wsx                                ->
          + Signal-Bad-Request
          + Terminate-The-Thread
    (--) Filter                             ->
          + Signal-Bad-Request
          + Terminate-The-Thread

Have-Type-Of-Update: <>
    (--) File                               -> Trying-To-Update
          + Check-If-Protected
    (--) Not-Found                          -> Trying-To-Update
          + Check-If-Protected
    (--) Executable                         ->
          + Signal-Url-Forbidden
          + Terminate-The-Thread
    (--) Directory                          ->
          + Signal-Url-Forbidden
          + Terminate-The-Thread

Trying-To-Update: <>
    (--) Ok                                 -> Request-Finished
          + Update-Resource-From-Request
          + Write-Http-Header
          + Check-If-Keep-Alive

After-Sending-File: <>
    (--) Finished                           -> Request-Finished
          + Check-If-Keep-Alive

Trying-To-Get-Dir: <>
    (--) Ok                                 -> Have-Default
          + Get-Default-Web-Page

Have-Default: <>
    (--) File                               -> Process-Http-Get
          + Get-Url-Type
    (--) Not-Found                          -> After-Sending-File
          + Make-Directory-Listing
          + Write-Http-Header
          + Send-File-To-Browser

Have-Type-Of-Cgi: <>!   If /cgi-bin contains non-executable file (e.g. image) we just send it

    (--) File                               -> Trying-To-Get-File
          + Check-If-Protected
    (--) Executable                         -> Before-Running-Cgi
          + Check-If-Protected
    (--) Directory                          -> Trying-To-Get-Dir
          + Check-If-Protected

Before-Running-Cgi: <>
    (--) Ok                                 -> Wait-For-Cgi
          + Create-Cgi-Process
          + Wait-Process-End

Wait-For-Cgi: <>
    (--) Timer                              -> Wait-For-Cgi
          + Wait-Process-End
    (--) Finished                           -> After-Sending-File
          + Close-Child-Process
          + Reparse-Process-Output
          + Write-Http-Header
          + Send-File-To-Browser
    (--) Redirect                           -> Process-Http-Get
          + Get-Url-Type
    (--) Error                              ->
          + Close-Child-Process
          + Write-Http-Header
          + Terminate-The-Thread

Have-Type-Of-Filter: <>
    (--) File                               -> Trying-To-Get-Filter
          + Check-If-Protected
    (--) Executable                         -> Trying-To-Get-Filter
          + Check-If-Protected
    (--) Directory                          -> Trying-To-Get-Dir
          + Check-If-Protected

Trying-To-Get-Filter: <>
    (--) Ok                                 -> Wait-For-Filter
          + Create-Filter-Process
          + Wait-Process-End

Wait-For-Filter: <>
    (--) Timer                              -> Wait-For-Filter
          + Wait-Process-End
    (--) Finished                           -> After-Sending-File
          + Close-Child-Process
          + Reparse-Process-Output
          + Write-Http-Header
          + Send-File-To-Browser
    (--) Redirect                           -> Process-Http-Get
          + Get-Url-Type
    (--) Error                              ->
          + Close-Child-Process
          + Write-Http-Header
          + Terminate-The-Thread

Trying-To-Get-Wsx: <>
    (--) Ok                                 -> Wait-For-Wsx
          + Pass-Request-To-Wsx-Agent

Wait-For-Wsx: <>
    (--) Wsx-Ok                             -> Process-Wsx-Done
          + Get-Wsx-Return-Fields
    (--) Wsx-Multi                          -> Process-Wsx-Multipart
          + Get-Wsx-Return-Fields
    (--) Wsx-Binary                         -> Process-Wsx-Done
          + Get-Wsx-Bin-Return-Fields
    (--) Wsx-Multibin                       -> Process-Wsx-Multipart
          + Get-Wsx-Bin-Return-Fields
    (--) Wsx-Error                          ->
          + Get-Wsx-Error-Fields
          + Write-Http-Header
          + Terminate-The-Thread
    (--) Wsx-Redirect                       ->
          + Get-Wsx-Redirect-Fields
          + Write-Http-Header
          + Terminate-The-Thread
    (--) Wsx-Restart                        -> Process-Wsx-Restart
          + Get-Wsx-Return-Fields
    (--) Wsx-Kill                           -> Process-Wsx-Kill
          + Get-Wsx-Return-Fields

Process-Wsx-Done:!   Normally the WSX response data is in the event body

    (--) Wsx-Ok                             -> Request-Finished
          + Reparse-Http-Body
          + Write-Http-Header
          + Write-Http-Body
          + Check-If-Keep-Alive
!   But it might be redirected to a file
    (--) Wsx-Redirect                       -> After-Sending-File
          + Reparse-Process-Output
          + Write-Http-Header
          + Send-File-To-Browser

Process-Wsx-Multipart:
    (--) Wsx-Ok                             -> Wait-For-Wsx
          + Reparse-Http-Body
          + Write-Http-Header
          + Write-Http-Body
    (--) Wsx-Redirect                       -> Wait-For-Wsx
          + Reparse-Process-Output
          + Write-Http-Header
          + Send-File-To-Browser

Process-Wsx-Restart:
    (--) Wsx-Ok                             ->
          + Reparse-Http-Body
          + Write-Http-Header
          + Write-Http-Body
          + Send-Master-Thread-Restart
          + Terminate-The-Thread
    (--) Wsx-Redirect                       ->
          + Reparse-Process-Output
          + Write-Http-Header
          + Send-File-To-Browser
          + Send-Master-Thread-Restart
          + Terminate-The-Thread

Process-Wsx-Kill:
    (--) Wsx-Ok                             ->
          + Reparse-Http-Body
          + Write-Http-Header
          + Write-Http-Body
          + Send-Master-Thread-Shutdown
          + Terminate-The-Thread
    (--) Wsx-Redirect                       ->
          + Reparse-Process-Output
          + Write-Http-Header
          + Send-File-To-Browser
          + Send-Master-Thread-Shutdown
          + Terminate-The-Thread

Request-Finished: <>
    (--) Ok                                 -> Client-Input
          + Partial-Clear-Http-Context
          + Read-Input-From-Socket
    (--) Close                              ->
          + Terminate-The-Thread

Defaults:
    (--) Exception                          -> End-Thread
          + Check-Socket-Type
    (--) Shutdown                           -> End-Thread
          + Check-Socket-Type
    (--) Cancel                             -> End-Thread
          + Check-Socket-Type
    (--) Fatal                              ->
          + Free-All-Server-Resources
          + Shutdown-The-Application
          + Terminate-The-Thread
    (--) Sock-Error                         -> End-Thread
          + Signal-Socket-Error
          + Check-Socket-Type
    (--) Sock-Closed                        -> End-Thread
          + Check-Socket-Type
    (--) Sock-Timeout                       -> End-Thread
          + Check-Socket-Type
    (--) Sock-Retry                         -> End-Thread
          + Check-Socket-Type
    (--) $other                             ->
          +

End-Thread:
    (--) Master                             ->
          + Free-All-Server-Resources
          + Shutdown-The-Application
          + Prepare-To-Close-Master-Socket
          + Close-Master-Socket
          + Terminate-The-Thread
    (--) Client                             ->
          + Flush-Socket-Requests
          + Terminate-The-Thread

Generated by Framer 1.0 © 1997 iMatix