/*
 * Copyright(C) 2009 Проект ИОК
 *
 * Этот файл содержит информацию, являющуюся
 * собственностью компании Крипто-Про.
 *
 * Любая часть этого файла не может быть скопирована,
 * исправлена, переведена на другие языки,
 * локализована или модифицирована любым способом,
 * откомпилирована, передана по сети с или на
 * любую компьютерную систему без предварительного
 * заключения соглашения с компанией Крипто-Про.
 */

/*!
 * \file $RCSfile$
 * \version $Revision: 127051 $
 * \date $Date:: 2015-09-09 15:08:20 +0300#$
 * \author $Author: pav $
 *
 * \brief Ограничение на RPC (MS RPC и Wire RPC)
 */

#ifndef CSP_RPC_limits_h_
#define CSP_RPC_limits_h_

#ifndef CSP_UIO_MAXIOV
    #define CSP_UIO_MAXIOV  (1024-16)    // TODO: убрать дубль
#elif CSP_UIO_MAXIOV < (16-2)
    // TODO:XX C++ файлы могут содержать определение CSP_UIO_MAXIOV == IOV_MAX
    //#error CSP_UIO_MAXIOV < (16-2)
#endif

	    // Минимум ОЗУ для CSP с MS RPC по протоколу ncalrpc 
	    // (разделяемая память)
#if defined(CP_MSRPC_DEBUG)
#   define CPTransportRpcMem		(8*1024*1024)
#else
#   define CPTransportRpcMem		(512*1024*1024)
#endif

//////////////////////////////////////////////////////////////////////////
	    // Максимальное уменьшение/увеличение длины
	    // В операциях Encrypt()/Decrypt()
            // TODO: для RSA может быть очень большой паддинг
#define CPEncDecMinBlkLen		(2048)

//////////////////////////////////////////////////////////////////////////
	    // Максимальный размер блока для MS ncalrpc
#define CPSrvMSlrTransportMaxBlkLen	(CPTransportRpcMem/4)
	    // Максимальный размер блока для Wire
//#define CPSrvWireTransportMaxBlkLen	(4*1024*1024) 
#define CPSrvWireTransportMaxBlkLen	(2*32*1024) 
#define CPSrvKchnTransportMaxBlkLen	(2*32*1024) 

	    // Максимальный сегмент IOvec
#define CPSrvMSlrTransportMaxIOVbuf	(CPSrvMSlrTransportMaxBlkLen/4)
#define CPSrvWireTransportMaxIOVbuf	(CPSrvWireTransportMaxBlkLen)
#define CPSrvKchnTransportMaxIOVbuf	(CPSrvKchnTransportMaxBlkLen)
#define CPSrvTransportMaxIOVcnt		(CSP_UIO_MAXIOV*3/2)

	    // Максимальная строка
#define CPSrvTransportMaxStrLen		(15*1024)

	    // Максимальное кол-во частей контейнера
#define CPSrvTransportMaxParts		(20) 

//////////////////////////////////////////////////////////////////////////
	    // Оптимальный размер блока для MS ncalrpc
#define CPClnMSlrTransportOptBlkLen	(sizeof(void *)*32*1024) 
	    // Оптимальный размер блока Wire (XTODO)
#define CPClnWireTransportOptBlkLen	(32*1024 - 2*CPEncDecMinBlkLen)
#define CPClnKchnTransportOptBlkLen	(16*1024 - 2*CPEncDecMinBlkLen)

	    // Для целей тестирования клиент может передавать больше
	    // чем сервер принимать
#define CPClnMSlrTransportMaxBlkLen	(2*CPSrvMSlrTransportMaxBlkLen) 
#define CPClnWireTransportMaxBlkLen	(2*CPSrvWireTransportMaxBlkLen) 
#define CPClnKchnTransportMaxBlkLen	(2*CPSrvKchnTransportMaxBlkLen) 
#define CPClnMSlrTransportMaxIOVbuf	(2*CPSrvMSlrTransportMaxIOVbuf)
#define CPClnWireTransportMaxIOVbuf	(2*CPSrvWireTransportMaxIOVbuf)
#define CPClnKchnTransportMaxBlkLen	(2*CPSrvKchnTransportMaxBlkLen) 
#define CPClnKchnTransportMaxIOVbuf	(2*CPSrvKchnTransportMaxIOVbuf)
#define CPClnTransportMaxIOVcnt		(2*CPSrvTransportMaxIOVcnt)
#define CPClnTransportMaxStrLen		(2*CPSrvTransportMaxStrLen)
#define CPClnTransportMaxParts		(2*CPSrvTransportMaxParts) 

#endif /* CSP_RPC_limits_h_ */
/* $Id: CSP_RPC_limits.h 127051 2015-09-09 12:08:20Z pav $ */

