rem
rem
Rem  Copyright (c) 1995, 1996, 1997 by Oracle Corporation. All rights reserved.
Rem    NAME
Rem      owa.sql - package of procedures called directly from OWA
Rem    DESCRIPTION
Rem      This file contains one package:
Rem         owa     - These procedures are interface procedures for
Rem                     the Oracle Web Agent.  These procedures should
Rem                     not be called by an end-user.
Rem
Rem    NOTES
Rem      The Oracle Web Agent is needed to use these facilities.
Rem      The package htp is needed to use these facilities.
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem     pkapasi    10/18/06 - Enhancement Request#5610575(add reset_get_page)
Rem     pkapasi    07/25/02 - Use NOCOPY for performance (bug#2482024)
Rem     ehlee      10/12/01 - Add 32k cookie support (bug#1936565) 
Rem     skwong     07/20/01 - Add RAW support to GET_PAGE interfaces
Rem     pkapasi    06/12/01 - Merge OAS specific helper functions
Rem     rdasarat   01/22/98 - Overload init_cgi_env procedure
Rem     rdasarat   10/31/97 - Moving version to 4.0
Rem     rdasarat   08/09/97 - Replaced OWA_INIT with OWA_CUSTOM
Rem     mpal       07/09/97 - Replaced OWA_INIT with OWA_CUSTOM
Rem     mpal       04/23/97 - Changed Minor Version to 1 (Fixing bug# 482019)
Rem     rpang      01/27/97 - Restored PRAGMA RESTRICT_REFERENCES (bug#439474)
Rem     rpang      01/27/97 - Added initialize procedure
Rem     rpang      07/03/96 - Added initialzation section to touch OWA_INIT
Rem     mbookman   07/09/95 - Creation

REM Creating OWA package body...
create or replace package body OWA is

     /********************************************/
    /* Initialize the CGI environment variables */
   /********************************************/
   procedure init_cgi_env (param_val in vc_arr) is
      num_params number := param_val.count;
      ix         number;
      nameIx     number;
      var_name   vc_arr;
   begin
      /* Initialize cgi names */
      /* Keep this list in the same order as in ndwoa.h file */
      var_name(1) := 'SERVER_SOFTWARE';
      var_name(2) := 'SERVER_NAME';
      var_name(3) := 'GATEWAY_INTERFACE';
      var_name(4) := 'REMOTE_HOST';
      var_name(5) := 'REMOTE_ADDR';
      var_name(6) := 'AUTH_TYPE';
      var_name(7) := 'REMOTE_USER';
      var_name(8) := 'REMOTE_IDENT';
      var_name(9) := 'HTTP_ACCEPT';
      var_name(10) := 'HTTP_USER_AGENT';
      var_name(11) := 'SERVER_PROTOCOL';
      var_name(12) := 'SERVER_PORT';
      var_name(13) := 'SCRIPT_NAME';
      var_name(14) := 'PATH_INFO';
      var_name(15) := 'PATH_TRANSLATED';
      var_name(16) := 'HTTP_REFERER';
      var_name(17) := 'HTTP_COOKIE';

      nameIx := 0;
      ix := 0;
      for i in 1..num_params
      loop
         nameIx := nameIx + 1;
         if (param_val(i) is NOT NULL)
         then
            ix := ix + 1;
            cgi_var_name(ix)  := var_name(nameIx);
            cgi_var_val(ix)  := param_val(i);
         end if;
      end loop;
      num_cgi_vars := ix;
   end;

   procedure init_cgi_env (num_params in number,
                           param_name in vc_arr,
                           param_val  in vc_arr) is
      j      number := 0;
      cookie varchar2(32000) := ''; 
      found  boolean := FALSE;
   begin

      for i in 1..num_params
      loop
         if (param_name(i) = 'HTTP_COOKIE')
         then
            found := TRUE;
            cookie := cookie || param_val(i);
         else
            j := j + 1;
            cgi_var_name(j) := param_name(i);
            cgi_var_val(j)  := param_val(i);
         end if;
      end loop;

      if (found)
      then 
         j := j + 1;
         cgi_var_name(j) := 'HTTP_COOKIE';
         cgi_var_val(j) := cookie;
      end if;
 
      num_cgi_vars := j;
   end;

     /*****************************************/
    /* Get the output from the user's PL/SQL */
   /*****************************************/
   function get_line (irows out integer) return varchar2 is
   begin
      return(htp.get_line(irows));
   end;

   procedure get_page (thepage     out NOCOPY htp.htbuf_arr,
                       irows    in out integer ) is
   begin
      htp.get_page(thepage, irows);
   end;

   /* Start of OAS specific helper procedure */
   procedure get_page_charset_convert (thepage     out NOCOPY htp.htbuf_arr,
                       irows    in out integer,
                       charset  in     varchar2 ) is
   begin
      htp.get_page_charset_convert(thepage, irows, charset);
   end;
   /* End of OAS specific helper procedure */

   /* Add here to match the new HTP.GET_PAGE_RAW interface */
   procedure get_page_raw (thepage     out NOCOPY htp.htraw_arr,
                           irows    in out integer ) is
   begin
      htp.get_page_raw(thepage, irows);
   end;

   procedure reset_get_page is
   begin
      htp.reset_get_page;
   end;

   /* Added to set package global safely */
   procedure set_user_id(usr in varchar2) is
   begin
      user_id := usr;
   end set_user_id;

   /* Added to set package global safely */
   procedure set_password(pwd in varchar2) is
   begin
      password := pwd;
   end set_password;

   /* Added to set package global safely */
   procedure set_transfer_mode (tmode in varchar2) is
   begin
      HTP.set_transfer_mode(tmode);
   end set_transfer_mode;

       /*******************************************************************/
      /* Initialize function -                                           */
     /*    This function is called when a DCD is invoked for the first  */
    /*   time when PL/SQL Agent starts up.                             */
   /*******************************************************************/
   function initialize return integer is
     dummy number;
     majVersion number;
     minVersion number;
   begin

     -- Please ensure you update major, minor versions for every release
     majVersion := 4;
     minVersion := 0;

     auth_scheme := OWA_SEC.NO_CHECK;
     dummy := owa_custom.dbms_server_gmtdiff;

     return (majVersion*256+minVersion);
   end;
end;
/
show errors package body OWA