Receiving a CPMFindIndicesIn Request

When the server receives a CPMFindIndicesIn message request from a client, the server MUST do the following:

  1. Search the ConnectedClientsIdentifiers list for the HANDLE of the named pipe over which the server has received the CPMFindIndicesIn message. If it is not present, the server MUST report an ERROR_INVALID_PARAMETER (0x80070057) error.

  2. Prepare a CPMFindIndicesOut message. If this step fails for any reason, the server MUST report any error code encountered in performing the request in accordance with Win32 Error Codes in [MS-ERREF].

  3. The CPMFindIndicesOut message MUST contain one hierarchical group coordinate to the next occurrence of one of the document identifiers specified in the CPMFindIndicesIn message or, if no such occurrence was found, the server MUST indicate this by setting _cDepthNext to zero. In the case of a non-grouping query, _cDepthNext will be 1, indicating a single offset into the current rowset.

    The next occurrence is found by calling the FindNextOccurrenceIndex abstract interface to the GSS, with the HANDLE of the named pipe over which the server has received the CPMFindIndicesIn message, _prgiRowPrev  as the previous coordinates list (or NULL if _cDepthPrev is zero), and array _pwids[0] as arguments.

    Note Currently, the server only supports a single document identifier lookup and discounts any workids in _pwids other than the first one. The next occurrence coordinate list is returned in the NextOccCoordinatesList output parameter, or if not found, then the NextOccExists parameter is not true.

  4. Report any errors encountered during message preparation or during any abstract interface call to the GSS. Errors that are specific to this request:

    • E_OUTOFMEMORY: generated by any resource allocation failure on the server or service side.

    • STATUS_INVALID_PARAMETER: generated when any of the parameters passed in by the client is invalid. Invalid parameters are those that do not obey the corresponding data structure layout as defined for their types in this document.

    Any other error code can be returned, but it will be treated as informative only.