blob: 562dba16fefb68f9b0e3052ffd8f42465fde9cf3 [file] [log] [blame]
(*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*)
unit Thrift.Configuration;
interface
uses
SysUtils, Generics.Collections, Generics.Defaults;
const
DEFAULT_RECURSION_LIMIT = 64;
DEFAULT_MAX_MESSAGE_SIZE = 100 * 1024 * 1024; // 100 MB
DEFAULT_MAX_FRAME_SIZE = 16384000; // this value is used consistently across all Thrift libraries
DEFAULT_THRIFT_TIMEOUT = 5 * 1000; // ms
type
IThriftConfiguration = interface
['{666F7848-744A-4746-BDD5-43DC9B1D5520}']
function GetRecursionLimit : Integer;
procedure SetRecursionLimit( const value : Integer);
function GetMaxFrameSize : Integer;
procedure SetMaxFrameSize( const value : Integer);
function GetMaxMessageSize : Integer;
procedure SetMaxMessageSize( const value : Integer);
property RecursionLimit : Integer read GetRecursionLimit write SetRecursionLimit;
property MaxFrameSize : Integer read GetMaxFrameSize write SetMaxFrameSize;
property MaxMessageSize : Integer read GetMaxMessageSize write SetMaxMessageSize;
end;
TThriftConfigurationImpl = class( TInterfacedObject, IThriftConfiguration)
strict private
class procedure ValidateLimitArgument( const value : Integer); inline;
strict protected
FRecursionLimit : Cardinal;
FMaxFrameSize : Cardinal;
FMaxMessageSize : Cardinal;
// IThriftConfiguration
function GetRecursionLimit : Integer;
procedure SetRecursionLimit( const value : Integer);
function GetMaxFrameSize : Integer;
procedure SetMaxFrameSize( const value : Integer);
function GetMaxMessageSize : Integer;
procedure SetMaxMessageSize( const value : Integer);
public
constructor Create;
end;
implementation
{ TThriftConfigurationImpl }
constructor TThriftConfigurationImpl.Create;
begin
inherited Create;
FRecursionLimit := DEFAULT_RECURSION_LIMIT;
FMaxFrameSize := DEFAULT_MAX_FRAME_SIZE;
FMaxMessageSize := DEFAULT_MAX_MESSAGE_SIZE;
end;
class procedure TThriftConfigurationImpl.ValidateLimitArgument( const value : Integer);
begin
if value <= 0 // zero makes not much sense either
then raise EArgumentOutOfRangeException.Create('Value must be positive');
end;
function TThriftConfigurationImpl.GetRecursionLimit: Integer;
begin
result := FRecursionLimit and MAXINT;
ASSERT( result > 0);
end;
procedure TThriftConfigurationImpl.SetRecursionLimit(const value: Integer);
begin
ValidateLimitArgument( value);
ASSERT( value > 0);
FRecursionLimit := value and MAXINT;
end;
function TThriftConfigurationImpl.GetMaxFrameSize: Integer;
begin
result := FMaxFrameSize and MAXINT;
ASSERT( result > 0);
end;
procedure TThriftConfigurationImpl.SetMaxFrameSize(const value: Integer);
begin
ValidateLimitArgument( value);
ASSERT( value > 0);
FMaxFrameSize := value and MAXINT;
end;
function TThriftConfigurationImpl.GetMaxMessageSize: Integer;
begin
result := FMaxMessageSize and MAXINT;
ASSERT( result > 0);
end;
procedure TThriftConfigurationImpl.SetMaxMessageSize(const value: Integer);
begin
ValidateLimitArgument( value);
ASSERT( value > 0);
FMaxMessageSize := value and MAXINT;
end;
end.