Module cCallInterfaceHelper_mixin.pkg

     1Use Windows.pkg
     2Use Flexml.pkg
     3Use cCallInterface.pkg
     4
     5
     6Class cCallInterfaceHelper_mixin is a mixin
     7
     8    
     9    Procedure DefineCallInterfaceHelper_mixin
    10
    11       
    12       property boolean pbConvertXML False
    13       
    14       property handle  phoCallInterface 0
    15
    16       Object oCallInterface Is A cCallInterface
    17       End_Object
    18
    19       // The WSO or WBO will use this as its call interface object
    20       Set phoCallInterface to oCallInterface
    21
    22       // Web services by default are performed in the web service object.
    23       // By setting the property phoWebServiceImplementor services are handled in the WBPO
    24       Set phoWebServiceImplementor of oCallInterface To self
    25
    26    End_Procedure
    27
    28    // extract and return pData pointer from passed pointer to VDFISData
    29    // This is not a copy operation - just find pData.
    30    
    31    Function VDFISData_pData Address pVDFISData Returns Address
    32        Function_Return (DeRefDW(pVDFISData, VDFISData.pData))
    33    End_Function
    34
    35    // extract Length pData pointer from passed pointer to VDFISData
    36    
    37    Function VDFISData_iDataLen Address pVDFISData Returns Address
    38        Function_Return (DeRefDW(pVDFISData, VDFISData.iDataLen))
    39    End_Function
    40
    41
    42    // Alloc or reAlloc space for VDFISData.pData.
    43    // Pass: pVDFISData and length.
    44    //       Alloc mem and set .pData and .iDataLen values in structure
    45    // Ret:  .pData
    46    //
    47    
    48    Function AllocVDFISData_pData Address pVDFISData Integer iLen Returns Address
    49        Address pData
    50        Integer bOK  bKeepAlive
    51
    52        If (pVDFISData=0) Begin
    53            Send LogErrorEvent DFERR_WEBAPP_BAD_PARAMETER C_$pVDFISDataIsNull
    54            Function_Return 0
    55        End
    56
    57        Get VDFISData_pData pVDFISData To pData
    58        Move (DeRefDW(pVDFISData, VDFISData.bKeepAlive)) To bKeepAlive
    59        If ( (pData=0) Or (bKeepAlive)) ;
    60            Move (Alloc(iLen)) To pData
    61        Else ;
    62            Move (ReAlloc(pData,iLen)) To pData
    63
    64        If (pData=0) Begin
    65            Send LogErrorEvent DFERR_PROGRAM C_$CouldNotAllocatepData // this should never happen
    66            Function_Return 0
    67        End
    68
    69        Move (StoreDW(pVDFISData, VDFISData.pData,    pData)) To bOK // store new data pointer
    70        Move (StoreDW(pVDFISData, VDFISData.iDataLen, iLen))  To bOK // store new data length
    71        Function_Return pData
    72    End_Function
    73
    74
    75    // must create a new string and copy contents from pValue into it
    76    // Pass: pValue points to VDFISData
    77    //
    78    
    79    Function Copy_VDFISDATAtoString Address pVDFISData Returns String
    80        String  sValue
    81        Address pData
    82
    83        If (pVDFISData=0) Begin
    84            Send LogErrorEvent DFERR_WEBAPP_BAD_PARAMETER C_$pVDFISDataIsNull
    85            Function_Return 0
    86        End
    87
    88        Get VDFISData_pData pVDFISData To pData
    89        If (pData<>0) ;
    90            Move pData To sValue
    91        Function_Return sValue
    92    End_Function
    93
    94    // must alloc new pData space and copy string to this space.
    95    // Pass: Pointer to VDFISData, String.
    96    // Pass by ref to avoid extra copy of string
    97    
    98    Function Copy_StringtoVDFISData String sValue Address pVDFISData Returns Address
    99        Integer iLen
   100        Address pData
   101        // make sure this is a C string. 0 byte needed for copy
   102        Move ((Length(sValue))+1) To iLen
   103        Get AllocVDFISData_pData pVDFISData iLen To pData
   104        Move sValue To pData
   105        Function_Return pData
   106    End_Function
   107
   108    // add message to interface. Old vdf 2 message (was called RegisterInterface). use extended version below
   109    
   110    Procedure RegisterSimpleInterface Integer iMsg String sMsgName String sParams String sComment
   111        Send RegisterSimpleInterface To oCallInterface iMsg sMsgName sParams sComment
   112    End_Procedure
   113
   114    // add extended interface.
   115    Procedure RegisterInterface Integer iMsg String sMsgName String sParams String sComment
   116        Send RegisterInterface of (phoCallInterface(self)) iMsg sMsgName sParams sComment
   117    End_Procedure
   118
   119
   120    Procedure RemoveInterface Integer iMsg
   121        Send RemoveInterface To (phoCallInterface(self)) iMsg
   122    End_Procedure
   123
   124    Procedure RegisterStandardInterface
   125    End_Procedure
   126
   127
   128
   129    // Find message Id for passed message name ret: 0 if not found, else object Id of message
   130    
   131    Function FindMessageId String sMsg Returns Integer
   132        Function_Return (FindMessageId(phoCallInterface(self),sMsg))
   133    End_Function
   134
   135    // Find message item for passed message name ret: -1 if not found, else item of message.
   136    // The following messages use this item to retrieve data.
   137    
   138    Function FindMessageItem String sMsg Returns Integer
   139        Function_Return (FindMessageItem(phoCallInterface(self),sMsg))
   140    End_Function
   141
   142    
   143    Function InterfaceMessageCount Returns Integer
   144        Function_Return (InterfaceMessageCount(phoCallInterface(self)))
   145    End_Function
   146
   147    // retrieve interface Name (w/ proper casing), Id, Params, and Comments based on passed ID.
   148    
   149    Function InterfaceMessageName Integer iItem Returns String
   150        Function_Return (InterfaceMessageName(phoCallInterface(self),iItem))
   151    End_Function
   152
   153    
   154    Function InterfaceMessageId Integer iItem Returns String
   155        Function_Return (InterfaceMessageId(phoCallInterface(self),iItem))
   156    End_Function
   157
   158    
   159    Function InterfaceMessageParams Integer iItem Returns String
   160        Function_Return (InterfaceMessageParams(phoCallInterface(self),iItem))
   161    End_Function
   162
   163    
   164    Function InterfaceMessageComment Integer iItem Returns String
   165        Function_Return (InterfaceMessageComment(phoCallInterface(self),iItem))
   166    End_Function
   167
   168    
   169    Function InterfaceMessageParamCount Integer iItem Returns Integer
   170        Function_Return (InterfaceMessageParamCount(phoCallInterface(self),iItem))
   171    End_Function
   172
   173    
   174    Function InterfaceMessageParamType Integer iItem Integer iParam Returns Integer
   175        Integer iParamType
   176        Get InterfaceMessageParamType of (phoCallInterface(self)) iItem iParam to iParamType
   177        Function_Return iParamType
   178    End_Function
   179
   180    
   181    Function InterfaceMessageParamTypeName Integer iItem Integer iParam Returns String
   182        String sParamTypeName
   183        Get InterfaceMessageParamTypeName of (phoCallInterface(self)) iItem iParam to sParamTypeName
   184        Function_Return sParamTypeName
   185    End_Function
   186
   187    
   188    Function InterfaceMessageParamDimCount Integer iItem Integer iParam Returns Integer
   189        Integer iParamDimCount
   190        Get InterfaceMessageParamDimCount of (phoCallInterface(self)) iItem iParam to iParamDimCount
   191        Function_Return iParamDimCount
   192    End_Function
   193
   194    
   195    Function InterfaceMessageParamName Integer iItem Integer iParam Returns String
   196        String sParamName
   197        Get InterfaceMessageParamName of (phoCallInterface(self)) iItem iParam to sParamName
   198        Function_Return sParamName
   199    End_Function
   200
   201    
   202    Function InterfaceMessageParamByRef Integer iItem Integer iParam Returns Integer
   203        Integer iParamByRef
   204        Get InterfaceMessageParamByRef of (phoCallInterface(self)) iItem iParam to iParamByRef
   205        Function_Return iParamByRef
   206    End_Function
   207
   208    
   209    Function InterfaceTypeDefinitions string sNSPre string sNsURI Returns String
   210        String sTypes
   211        Get InterfaceTypeDefinitions of (phoCallInterface(self)) sNsPre sNsURI to sTypes
   212        Function_Return sTypes
   213    End_Function
   214
   215    
   216    Function WebRequestServiceName Address pVdfISData Returns String
   217        String sName
   218        Get WebRequestServiceName of (phoCallInterface(Self)) pVdfISData to sName
   219        Function_Return sName
   220    End_Function
   221
   222    // Is message extended. Determines how sParams is parsed
   223    
   224    Function InterfaceMessageIsExtended Integer iItem Returns Integer
   225        Function_Return (InterfaceMessageIsExtended(phoCallInterface(self),iItem))
   226    End_Function
   227
   228
   229    // Uses new runtime class for call parsing
   230    //
   231    //  Note: There are no more parsing errors, since there is no parsing.
   232    //        There are four possible errors:
   233    //          1. We receive a completely bad parameter block
   234    //              (dwError is set in structure or offset to service name is outside of range)
   235    //
   236    //             #REPLACE  DFERR_WEBAPP_WEBSERVICE_BAD_PARAMETER_BLOCK,    |CI4376
   237    //
   238    //          2. We receive a call for a webservice that we don't have registered.
   239    //
   240    //             #REPLACE  DFERR_WEBAPP_WEBSERVICE_NOT_FOUND,              |CI4375
   241    //
   242    //          3. We receive a call for a webservice, but it doesn't have a valid message number
   243    //             attached. Message number is zero.
   244    //
   245    //             #REPLACE  DFERR_WEBAPP_WEBSERVICE_BAD_REGISTRATION       |CI4374
   246    //
   247    //          4. More than 16 arguments were passed. 16 arguments is the maximum for a webservice.
   248    //
   249    //             #REPLACE  DFERR_WEBAPP_WEBSERVICE_TOO_MANY_ARGUMENTS,    |CI4387
   250    //
   251
   252    
   253    Function DoCall Address pVDFISData Returns Integer
   254        Integer iErr
   255        String  sErrMsg sMsgName
   256        string sName
   257        Boolean bConvert
   258        Get pbConvertXML to bConvert // should we apply an XML conversion - only done with Web Services
   259        //  must get name before DoCall. DoCall changes pData in pVDFISData
   260        Get WebRequestServiceName pVdfISData to sMsgName
   261        // note that this passes 2 params (and not 1 as above). Note to self: We need to remember to not
   262        // use this in an expression.
   263        Get DoCall Of oCallInterface pVdfISData bConvert To iErr
   264        // Handle possible errors
   265        If (iErr<>0 and iErr<>DFERR_WEBSERVICE_EXCEPTION) Begin
   266            Case Begin
   267                // for now we are mapping the error numbers so they match what we had in WebApp/2 and
   268                // what we have in the Linux WebApp. If we change this, we must change the Linux err
   269                // numbers as well.
   270                Case (iErr = DFERR_WEBAPP_WEBSERVICE_NOT_FOUND)
   271                    Move (SFormat(C_$CallErrorMessageNotRegistered, sMsgName)) To sErrMsg
   272                    Case Break
   273                Case (iErr = DFERR_WEBAPP_WEBSERVICE_BAD_REGISTRATION)
   274                    Move (SFormat(C_$CallErrorMessageNotDefined, sMsgName)) To sErrMsg
   275                    Case Break
   276                Case (iErr = DFERR_WEBAPP_WEBSERVICE_TOO_MANY_ARGUMENTS)
   277                    Move (SFormat(C_$CallErrorTooManyParams, sMsgName)) To sErrMsg
   278                    Case Break
   279                Case (iErr = DFERR_WEBAPP_WEBSERVICE_BAD_PARAMETER_BLOCK)
   280                    // this should never happen in a webApp
   281                    Move C_$CallErrorBadParameterBlock To sErrMsg
   282                    Case Break
   283                Case Else
   284                    // this should never happen in a webApp
   285                    Move C_$CallErrorUnknown To sErrMsg
   286            Case End
   287            // generate the error.
   288            Error iErr sErrMsg
   289        End
   290        Function_Return iErr
   291    End_Function
   292
   293End_Class