2.95 Changes

- Improved error handling in WCS scripts. WCS scripts now display accurate error information if available. When running with DEBUGMODE .T. the wwVFPSCript class will now try to find the error in the original WCS source file and pop up an editor window with the code highlighted to make it easier to fix script errors. NOTE: Make sure you close the edit window before rerunning the script since the VFP editor locks files with exclusive access.

- wwServer now has a nScriptmode flag that determines how scripts are to be run either interpreted or precompiled. This switch is configurable with a new ScriptMode flag in wcmain.ini or equivalent and thus configurable externally while the server is running.

- Web Connection now works Apache for Windows in ISAPI mode. The Setup program can now create an automated installation for Apache servers.

- New wwFTP class in wwIPStuff. The wwFTP class provides improved FTP functionality to update the functions that already exist in wwIPStuff. Updates includes status events for uploads and downloads and new implementation with native, modifiable VFP code rather than calling a function in wwIPStuff.DLL.

- FTP functions have been fixed to always force going to server instead of reading from the cache as they did previously. Fixed.

- New NTSecurity class that allows setting of NT User ACL rights. Add users to files and set rights on a per user basis. Also read user rights and retrieve groups that users are part of.

- Setup program now asks to automatically configure the TEMP directory security for CHANGE rights under NT when configuring for IIS.

- Fixed problem with garbage characters in text based email attachments in wwIPStuff.dll. Problem would occur only with text messages where a string of extra characters would often show up after the text message or following the attachment. Fixed.

- Fixed problem with HTTPGetExAnsync with SSL connections. HTTPS Connections would hang. Fixed.

- RASHangup now works properly with Win95. RASHangup is the counterpart to RASDial for dialing a Dial Up Networking connection.

- wwPDF now has a new method called SetLandscapeMode that can be set to force the PDF Writer to print in Landscape mode.

Change Log

| Topics

    Version 2.90
    ------------
    *  IMPORTANT: WC 2.90 changes the log file format! Due to a conflict
       of the Request field in the log format the Request field has been
       renamed to QueryStr. The Request field name was causing very difficult
       to track naming conflicts with the Request object used by Web
       Connection. To update, either rename your CGILOG field or simply
       delete the file altogether and let WC rebuild the file.

    *  New HTML Help File included. The Help file built with
       West Wind HTML Help Builder is a skeleton help file that
       has imported the Web Connection class header information into
       a searchable reference. Documentation is not complete - the
       help file only reflects what it's in the class and method
       headers, but it should make it much easier to find functionality
       and get a quick function prototype for method calls.

    *  A new switch in wc.dll allows running COM objects outside
       of the COM pool. With this optional request specific switch
       servers run once and immediately unload. Use this for
       extensive long-running requests that would otherwise
       tie up the pool. Format is: wc.dll/single?wwDemo~Testpage
       using the /single extra path.

    *  A new switch in wc.ini allows Automation servers to stay alive
       instead of timing out after 8 minutes. The KeepAlive=1 flag will
       keep an extra reference to the COM object to force it to always
       stay active. Greatly stabilizes COM operation.

    *  There has been a partial re-write of the COM management code
       in wc.dll. The new code relies more heavily on ATL components
       for COM interface calls greatly reducing the code complexity.
       The result has been much improved stability at the Surplus
       sites under ever increasing loads - exceptions have been
       virtually eliminated and server reload code is more reliable.
       In combination with the KeepAlive setting above servers have
       not crashed in 1 month of high load operation at Surplus...

    *  The wc.dll Show Status Administration screen has been greatly
       improved. The form now provides a number of maintaince links
       directly on the status page. All load/unload and the configuration
       links all return back to this central page as well.

    *  All wc.dll maintainence operations now run under the SYSTEM account
       so access permissions copying files and shutting down processes
       becomes more reliable. The SYSTEM account should have rights to
       to perform most security tasks without causing security holes.

    *  Functions in wwMaint now look at the AdminAccount key in wc.ini
       for user verification rather than another setting in wcmain.ini.
       This makes the Web Connection Admin security settings localized
       in a single file.

    *  wwIPStuff::SendMail and SendMailAsync now properly support
       Mime type attachments. You can attach any file and send
       it along with your email message. This fixes the problems
       in older versions that only sent UUEncoded attachments which
       were not automatically decoded. Messages are now fully
       Mime and Base64 compliant.

    *  wwHTMLForm now supports rendering forms with no data or using
       script tags (<%= Guest.Name %>) embedding the controlsource into
       the form instead of values. This should facilitate using the VFP
       form editor to build Dynamic HTML forms as a WYSIWYG editor.
       Check docs for wwHTMLForm for updated information on the nValueType
       property. wwForm has also been updated to support this display
       mechanism.

    *  New features for wwIPStuff::HTTPGetEx now includes the ability
       to retrieve the HTTP headers and a new OnHTTPBufferUpdate()
       event that fires when data is received. The lHTTPCancelRequest
       flag can be set in this event to cancel an HTTP download.
       This allows for  building a status display while downloading
       HTTP Requests as well as providing support for simple UI
       operations like a Cancel button.

    *  New wwMaint function to display the Web Connection DLL Error
       log in wwcgierr.txt. The function is accessed via the maintainence
       page using the  wwMaint::wcErrorFile method. This link can also
       clear the error log.

    *  Fixed several issues in wwHTMLForm: Spinners can now be rendered
       correctly as textboxes. MultiSelect listbox selections now render
       properly. However, updating multiple listbox selections must be
       performed manually. SetValues() will only update the first selections
       by setting the value.

    Version 2.85
    ------------
    *  Support for a plain CGI connector has been added. The
       new CGI connector replaces the old Windows CGI connector
       for better compatibility with the ISAPI version and
       broader Web Server support - CGI should allow running
       Web Connection on just about any Windows based Web
       server. The new CGI executable is wc.exe. Additional
       Auto installation options for various non-ISAPI
       servers will be added shortly.

    *  File Uploads via multi-part forms have been implemented.
       You can now use the FILE input type on a form and retrieve
       the file on the server side using the following new
       methods of wwCGI: GetMultipartFile(), GetMultipartFormVar()

    *  New wwHTTPAsync class that is a event driven control that
       allows background downloads of HTTP requests. The control
       fires OnDownloadComplete events to let you know that the
       request has completed, returning the HTTP result or error
       code.

    *  Implemented Round Robin server cycling for COM servers
       in addition to the traditional load based server cycling.
       Load based sends requests to higher servers in the queue
       only if the first one(s) are already busy. Round Robin
       always cycles through the server pool. Implemented via
       ServerLoading= in wc.ini.

    *  wwIPStuff::SendMail now works with the IIS4 ESMTP
       server. Basic Support for ESMTP has been added
       but may not work with all servers.

    *  wwIPStuff::nHTTPPort has been added to allow accessing
       HTTP servers on non-standard ports. Value is 0 by default
       which uses the default HTTP and HTTPS ports. If set that
       port is specifically used.

    *  wwIPStuff::RasDial no longer brings up a dialog box
       on a failed RAS dial connection. Instead it now
       sets the cErrorMsg property when the return from
       RasDial is .f.

    *  Fixed memory leak introduced in ISAPI DLL V2.75
       occurring only with COM server operation.

    *  Fixed bad pointer references in ISAPI DLL code when
       COM servers crash. A GPF in the VFP server would
       cause memory of IN parameters to be corrupted and
       cause a (handled) exception in the DLL. Fixed.

    *  Improved Error info provided on the Error page sent
       from the wwProcess::Error method. Added new method
       SendErrorEmail() to wwProcess to simplify customized
       error messages for email.

    *  New functions in wwUtils: StripHTML, IsComObject,
       ShowHTML (displays HTML String in browser)
       PropertyDump (displays object properties
       and values as string)

    *  There have been several fixes to the WCS Active Server
       like scripting functions. Thanks to Randy Pearson for
       his help in resolving several reference bugs that
       caused strange errors in the Web Connection server.
       Fixed.

    *  The scripting engine also now includes an updated error
       reporting mechanism that shows the error line of code
       along with a few surrounding lines of code for context.

    Under Construction:
    *  Added new samples that show how to take advantage
       of RDS (Remote Data Services/ADO) with Web Connection.

    Version 2.75
    ------------
    *  Enterprise Edition now includes a wwPDF class in .\Tools.
       Class allows programmatic creation of PDF files using
       the Adobe PDF printer writer. Allow creation of printable
       reports over the Web.

    *  wwIPStuff::HTTPGetExAsync has been added. The Async
       version just goes off and runs an HTTP request in the
       background. You can specify an output file for the
       result so you can check for completion of the request.

    *  Miscellaneous updates to the wwHTMLForm class that
       should provide slightly better speed.

    *  New Install program that uses a more Wizard like
       interface. The install program has also been more
       streamlined to allow for more generic creation of
       applications (to be added later).

    *  New wwWebServer configuration class. This class
       allows for easy creation of Virtual directories
       and script maps for: IIS4, IIS3, PWS3 and 4,
       WebSite and Commerce Builder. Tell the class
       which server to use and then call single methods
       to add virtuals and script maps.

    Version 2.72
    ---------------------
    *  Fixed DHTML Form rendering problem caused by IE 4.01.
       Layering now works correctly. Special thanks to
       Jan Dorresteijn for his help in finding the workaround.
       Fixed.

    *  Updated installation to support scriptmaps
       with WebSite 2.2.

    *  wwIPStuff: Changed default from PROXY settings
       to direct settings. New nHTTPConnectType property
       allows to configure this setting dynamically.

    *  wwIPStuff: Email interface enhancements to support
       some ill-behaved SMTP servers. Expanded message buffer
       to 512 bytes, and added code to allow non-compliant
       content headers.

    *  New wwCGI methods: GetLogicalPath(), GetExecutablePath().
       Both of these are useful for scriptmaps. GetExecutablePath
       in particular can allow you to route requests based on
       virtual directory rather than a 'query' paramameter:
       lcVirtual = JustFname(loCGI.GetExecutablePath())
       CASE lcVirtual = '/wconnect/'
          DO wwdemo.prg with THIS

    Version 2.71
    ---------------------
    *  New messaging mechanism that does away with the INI file
       for server information. This new interface to the Web
       Connection DLL uses URLEncoded formatting to transfer
       all data in a single chunk. For OLE Automation this
       means no messaging files at all - for file based it
       means 2 message files instead of at least 4. Request
       transfer times have improved about 30% overall. Small
       speed improvements should also occur on the FoxPro
       end for reading form and server vars.

    *  New wwPostRequest class subclasses wwCGI to access the
       URLEncoded request buffer. Other than the split code that
       separates form vars from server/browser vars this code
       is compatible with all URLEncoded formats used by other
       products. It will work with FoxISAPI unchanged.

    *  New wwIPStuff::wwHTTPData class. This class facilitates
       running SQL statements over HTTP and returning data to the
       client in similar fashion as VFP's SQLExecute(). Results
       can be returned in cursors. Supports both client and
       server methods and a generic processing routine that
       can handle data requests without custom code (pending
       security)

    *  Support for Client Certificates has been added for IIS.
       The new wwCGI::GetClientCertificate() method allows retrieving
       subject information from a client side certificate.
       ClientCerts work only with the new URLEncoded Post method
       interface. The INI file interface does not receive the
       information.

    *  New MergeText function in wwUtils. This version of
       MergeText is generic and optimized to work with
       Active Server type tags (<% %> and <%= %>) and processes
       expressions and Codeblocks (dynamic in runtime). This
       mechanism will eventually replace the ## syntax used
       by Web Connection for template expansion. The function
       is generic so you can use your choice of delimiters.
       In addition a slight performance improvement can be
       seen by this new version of MergeText. wwHTML::MergeText()
       continues to be used by the HTML class internally to
       support the extended ## syntax for codeblocks.

    *  The new MergeText functionality has been integrated with
       ShowHTMLFile() and ShowMemoPage() for rendering of .WC
       pages optionally. You can now specify <!-- WCS_TEMPLATE -->
       at the top of a .WC page to force Web Connection to use
       Active Server Syntax instead of the ## syntax for expanded
       expressions and code. The new flag is optional and ## continues
       to be the default behavior. The phrase WCS_TEMPLTATE must
       appear within the first 80 characters of the document.

    *  New Log statistics form that summarize Web Connection
       Hit logs based on the query string parameters. See at
       glance which links are most frequently hit and how long
       they take. Requires IE 4.

    *  wwIPStuff HTTPGetEx() method now does not require
       a pre-allocated buffer. When omitting the tnSize
       parameter or passing in 0 by reference the output
       from HTTPGetEx() will now dynamically build the
       string output.

    *  Fixed HTTP Header problem with overridden error pages
       generated by the Web Connection DLL. Missing header would
       cause pages to not display or try to download. FIXED.

    *  Fixed problem with WC.DLL not loading under old versions of
       Windows 95. The DLL would not load due to missing DCOM
       API functions. The functions are now late bound at runtime.
       Fixed.

    *  Fixed Automation problem with wc.dll when reloading servers
       after the initial timeout. The first hit on a server could
       potentially be interrupted by another request resulting in
       corrupted data. Problem also affected manually or GPF unloaded
       servers. Fixed.

    *  Added new Active Server compatible method names to wwCGI
       class: Form (like GetFormVar), QueryString (like
       GetUrlEncodedParameter) and ServerVariables (like GetCGIVar).
       All new methods work like the old ones except QueryString()
       which has been enhanced to work with either positional,
       numeric parameters or URLEncoded, named parameters. You can
       now do: QueryString(1) or QueryString('Name') or QueryString()
       to return the whole thing.

    *  Added Write Method to wwHTML for ASP compatibility.

    *  The Request/Status viewer now (finally<s>) supports copying
       text to the clipboard.

    *  Fixed Setup for PWS 4.0 under Win95. Code tried to use the IIS4
       set up routine which is completely different for Win95. Reverted
       back to registry code (IIS3 type setup). Fixed.

    *  The DLL Status display has been significantly enhanced to provide
       more information and allow basic admin task in a single form.
       You can now Hold Requests in this form and see the change
       immediately. You can also reload settings from here now.
       Automation servers now show the machine name if running a
       remote server (if specified through WC's syntax).

    *  DHTML Grid now displays numeric values right aligned.

    *  The Web Connection Log can now log a script name in addition
       to the querystring. For those building applications with
       scriptmaps the scriptname will be more important than
       the querystring.

    Version 2.60
    ---------------------
    *  Support for new scripting engine based on ASP model.
       New script maps for .WCS and .FXP which allow running
       pages using <% %> to embed FoxPro code and constructs
       into static HTML pages stored on disk. Pages are compiled
       prior to running. See sample page for example and
       Classes.doc for detailed info. Beta Implementation with
       limited documentation and minimal ASP Object support.

    *  IIS 4.0 installation migrated to VFP code. Scriptmaps
       still require external code - moved to self contained
       Delphi DLL as to not require any runtimes. New Admin
       class wwIISAdmin.prg can be found in TOOLS and allows
       access to most Active Directory services.

    *  Fixed bug in ISAPI DLL that did not properly return
       variable names that contain spaces. Fixed.

    *  Miscellaneous bug fixes related to minor problems with
       status form not properly updating the permanent settings.
       Also, fixed log viewer bug that caused File In Use Erros.

    Version 2.56
    ---------------------
    *  Fixed problems with IIS 4.0 installations related to VB runtime
       compatibility. Also, added additional check code to give instructions
       if the Registration component cannot be installed.

    *  Updated Error Handler logging code to properly set the Error flag.
       Previously the flag was not used in wwProcess::Error. If you use
       your own error methods it's suggested you pass the new 4th llError
       parameter for any error requests.

    Version 2.55
    ---------------------
    *  New DCOM remote server loading mechanism introduced
       to avoid requirement for multiple classIds for instantiating
       both local and remote servers. The Server name can now be
       specified as part of the WC.INI ServerX= key. This greatly
       simplifies remote server deployment and makes it feasible
       to create servers off a single codebase.

    *  Session Object improvements for easier maintainance of user
       specific state information. New wwProcess::InitSession() method
       handles automatic retrieval and creation of Session Cookie making
       it possible to simply access the new wwProcess::oSession object
       and its Set and GetSessionVar() methods.

    *  The wwSQL Class now automatically connects to either a named connection
       in a DBC or with Connection string passed to the Connect() method.

    *  Error Field on the CGILOG table makes retrieval of errors easier and
       quicker. NOTE: PREVIOUS VERSION USERS MUST DELETE THEIR CGILOG FILE OR
       UPDATE THE STRUCTURE WITH THE NEW ERROR FIELD!!!

    *  The Web Connection DLL now adds a default HTTP header if the VFP
       application doesn't return one. Although this makes up for accidentally
       left out headers  on the VFP end it's still highly recommended to
       create the header as part of each request!

    *  The Server Status request display now shows a request in progress rather
       than the 'Processing...' message. This should help in debugging servers
       that hang or crash due to a logic error by displaying the currently running
       request. The display has also been truncated for more efficient use of
       the display space.

    *  The Install program now supports entering setup info into the IIS 4.0
       Metabase for automated setup on IIS4. The Enterprise Edition also adds
       a wwIISAdmin component (VB5) for accessing the IIS4 metabase.

    *  New leaner versions of wc.dll and wwIPStuff. Binary file sizes cut by
       30%.

    Version 2.50
    ---------------------
    *  Enterprise edition introduced.

    *  New Customer Info IE 4.0 form demo. Demonstrates a complex
       form running as is.

    *  Added wwSQL class to Enterprise Edition. This class wraps
       SQL Passthrough into an error safe class for easy connection
       management.

    *  Added FileDelete Win32 Executable application to Enterprise.
       This utility allows deletion of files in a specified directory
       in timed interval. Use to clean up and timeout temp files or to
       manage temporary files created for display or file downloads.
       See TOOLS directory.

    *  Fixed bug with wc.dll when submitting large POST forms.
       The problem occcurred only on forms with over 30 fields
       and containing several textareas. Re-wrote this piece of
       MS code and in the process rewrote entire form posting
       mechanism to be more efficient.

    *  New Edit Server Status page that uses IE 4.0 form rendering
       to display the Status Form of the Web Connection server.
       You can view and edit the values from this window.

    *  Addition of [HTML PAGES] section in wc.ini to allow error
       messages to be overridden with custom pages. The pages are
       fully static, but allow the page to look more tailored to
       your own site image. See WCONNECT.DOC for more info.

    *  New wwCGI::aFormVars() method that parses all HTML form
       variables into an array of key value pairs.

    *  Many fixes and updates to the wwHTMLForm class to
       coincide with the release of IE 4.0. The documentation
       has also been updated to outline the operation of the
       class and some of the things you need to watch out for.

    *  wwHTMLForm now renders Images. Images are renamed to
       .GIF from .BMP/.ICO and pathed to WWFORM_IMAGEPATH
       defined in WCONNECT.H. Image Buttons are also supported
       Image buttons submit form.

    *  TextBoxes now recognized explicit alignment from VFP
       forms. Numeric fields now use TRANSFORM() instead of
       always forcing number to 2 decimals (this results
       in variable length numerics but it's much nicer for
       editing where the form value determines the display).

    * Stephen Genusa Process Viewer ASP component is now
      auto-installed for use in Admin.asp. This component
      lets you quickly view all NT processes running on
      NT and you can program it to display only the relevant
      processes for your application (default is ww*.exe and wc*.exe
      and dr*.exe - you'll have to change the filter to
      fit other EXE servers).

    * New DCOMCnfgServer function in wwUtils
      allows programmatic setting of the Impersonating
      user security for Automation servers. This can
      do away with the DCOMCnfg step in the build
      cycle. Also added a sample on how you might
      use this to automate building your Automation
      servers in TOOLS\BldOle.prg.