DBUFFMGR.CPP
/*++ 
 
     Copyright (c) 1996 Intel Corporation 
     Copyright 1996 - 1998 Microsoft Corporation 
     All Rights Reserved 
 
     Permission is granted to use, copy and distribute this software and 
     its documentation for any purpose and without fee, provided, that 
     the above copyright notice and this statement appear in all copies. 
     Intel makes no representations about the suitability of this 
     software for any purpose.  This software is provided "AS IS." 
 
     Intel specifically disclaims all warranties, express or implied, 
     and all liability, including consequential and other indirect 
     damages, for the use of this software, including liability for 
     infringement of any proprietary rights, and including the 
     warranties of merchantability and fitness for a particular purpose. 
     Intel does not assume any responsibility for any errors which may 
     appear in this software nor any responsibility to update it. 
 
Module Name: 
 
dbuffmgr.cpp 
 
Abstract: 
 
     This module defines and interface for a buffer manager for managing 
     WSABUF's.  If a layered provider needs to modify application data The 
     CopyBuffer() routine should be modifed to do so. 
 
--*/ 
 
#include "precomp.h" 
 
 
  
DBUFFERMANAGER::DBUFFERMANAGER( 
    ) 
/*++ 
 
Routine Description: 
 
    DBUFFERMANAGER  object  constructor.   Creates and returns a DBUFFERMANAGER 
    object.  Note that  the  DBUFFERMANAGER object has not been fully 
    initialized.  The "Initialize" member function must be the first member 
    function called on the new DBUFFERMANAGER object. 
 
Arguments: 
 
    None 
 
Return Value: 
 
    None 
--*/ 
{ 
    // Null function body.  A full implemantation would initialize member 
    // varialbles to know values for use in Initailize(). 
} 
 
 
 
  
INT 
DBUFFERMANAGER::Initialize( 
        ) 
/*++ 
 
Routine Description: 
 
    The initialization routine for a buffer manager object.  This procedure 
    completes the initialzation of the object.  This procedure preforms 
    initialization operations that may fail and must be reported since there is 
    no way to fail the constructor. 
 
Arguments: 
 
    None 
Return Value: 
 
    The  function returns NO_ERROR if successful.  Otherwise it 
    returns an appropriate WinSock error code if the initialization 
    cannot be completed. 
--*/ 
{ 
    return(NO_ERROR); 
} 
 
 
  
DBUFFERMANAGER::~DBUFFERMANAGER() 
/*++ 
 
Routine Description: 
 
    DBUFFERMANAGER object destructor.  This procedure has the responsibility to 
    perform any required shutdown operations for the DBUFFERMANAGER object 
    before the object memory is deallocated. 
 
Arguments: 
 
    None 
 
Return Value: 
 
    None 
--*/ 
{ 
    // Null function body 
} 
 
INT 
DBUFFERMANAGER::AllocBuffer( 
    IN  LPWSABUF   UserBuffer, 
    IN  DWORD      UserBufferCount, 
    OUT LPWSABUF*  InternalBuffer, 
    OUT DWORD*     InternalBufferCount 
    ) 
/*++ 
 
Routine Description: 
 
    This routine allocates a set of WSABUF's to pass to the underlying service 
    provider. 
 
Arguments: 
 
    UserBuffer - A pointer to the array user WSABUFs 
    UserBufferCount - The number of user WSABUF structs. 
    InternalBuffer - A pointer to a pointer to a WSABUF 
    InternalBufferCount - The pointer to a DWORD to revceive the number of 
                          WSABUFs pointed to by InternalBuffer. 
 
 
Return Value: 
 
    The  function returns NO_ERROR if successful.  Otherwise it 
    returns an appropriate WinSock error code if the initialization 
    cannot be completed. 
 
--*/ 
{ 
    // ****** 
    // Note this procedure returns the user buffer(s) undistrubed.  This is the 
    // wrong thing for providers that wish to modify the data stream.  The 
    // proper buffer management policy is left to the provider developer. 
    *InternalBuffer = UserBuffer; 
    *InternalBufferCount = UserBufferCount; 
    return(NO_ERROR); 
} 
 
 
VOID 
DBUFFERMANAGER::FreeBuffer( 
    IN LPWSABUF  InternalBuffer, 
    IN DWORD     InternalBufferCount 
    ) 
/*++ 
 
Routine Description: 
 
    This routine frees a set of WSABUF's allocated by AllocBuffer(); 
 
Arguments: 
 
    InternalBuffer - A pointer to WSABUF array 
    InternalBufferCount - The number of WSABUFs pointed to by InternalBuffer. 
 
 
Return Value: 
 
    The  function returns NO_ERROR if successful.  Otherwise it 
    returns an appropriate WinSock error code if the initialization 
    cannot be completed. 
 
--*/ 
{ 
} 
 
 
INT 
DBUFFERMANAGER::CopyBuffer( 
    IN  LPWSABUF   SourceBuffer, 
    IN  DWORD      SourceBufferCount, 
IN  DWORD   SourceOffset, 
    INDWORD   BytesToCopy, 
    IN  LPWSABUF   DestinationBuffer, 
    IN  DWORD      DestinationBufferCount, 
IN  DWORD   DestionationOffset 
    ) 
/*++ 
 
Routine Description: 
 
    This routine copies one set of WSABUFs to another. 
 
Arguments: 
 
    SourceBuffer - A pointer to an array of WSABUFs. 
 
    SourceBuferCount - The number of WSABUFs pointed to by SourceBuffer. 
 
SourceOffset  - offset to start copying from in source 
BytesToCopy  - maximum number of bytest to copy 
    DestinationBuffer - A pointer to an array of WSABUFs. 
 
    DestinationBufferCount - The number of WSABUFs pointed to by 
                             DestinationBuffer . 
DestinationOffset - offset to start writing to in destionation buffer 
 
Return Value: 
 
    The  function returns NO_ERROR if successful.  Otherwise it 
    returns an appropriate WinSock error code if the initialization 
    cannot be completed. 
 
--*/ 
{ 
    return(NO_ERROR); 
}