FPC UnicodeString support (+ test cases)
WideString support (+ test cases)

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@555 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2008-09-13 15:18:03 +00:00
parent 5918607ca5
commit 812edb945c
10 changed files with 829 additions and 71 deletions

View File

@ -44,11 +44,18 @@ type
dtInt64U, dtInt64S,
dtBool, dtEnum,
dtSingle, dtDouble, dtExtended, dtCurrency,
dtString,
dtAnsiString, dtWideString,
{$IFDEF WST_UNICODESTRING}
dtUnicodeString,
{$ENDIF WST_UNICODESTRING}
dtObject, dtArray
);
PStringBuffer = ^TStringBuffer;
PAnsiStringBuffer = ^TAnsiStringBuffer;
PWideStringBuffer = ^TWideStringBuffer;
{$IFDEF WST_UNICODESTRING}
PUnicodeStringBuffer = ^TUnicodeStringBuffer;
{$ENDIF WST_UNICODESTRING}
PObjectBuffer = ^TObjectBuffer;
PArrayBuffer = ^TArrayBuffer;
PDataBuffer = ^TDataBuffer;
@ -71,14 +78,30 @@ type
dtExtended : ( ExtendedData : TFloat_Extended_10 );
dtCurrency : ( CurrencyData : TFloat_Currency_8 );
dtString : ( StrData : PStringBuffer );
dtAnsiString : ( AnsiStrData : PAnsiStringBuffer );
dtWideString : ( WideStrData : PWideStringBuffer );
{$IFDEF WST_UNICODESTRING}
dtUnicodeString : ( UnicodeStrData : PUnicodeStringBuffer );
{$ENDIF WST_UNICODESTRING}
dtObject : ( ObjectData : PObjectBuffer );
dtArray : ( ArrayData : PArrayBuffer );
End;
TStringBuffer = Record
Data : String;
End;
TAnsiStringBuffer = record
Data : TAnsiStringData;
end;
TWideStringBuffer = record
Data : TWideStringData;
end;
{$IFDEF WST_UNICODESTRING}
TUnicodeStringBuffer = record
Data : TUnicodeStringData;
end;
{$ENDIF WST_UNICODESTRING}
PObjectBufferItem = ^TObjectBufferItem;
TObjectBufferItem = Record
@ -203,11 +226,23 @@ type
Const ATypeInfo : PTypeInfo;
Const AData : TInt64S
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutStr(
procedure PutAnsiStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : String
Const AData : AnsiString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutWideStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : WideString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
procedure PutUnicodeStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : UnicodeString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
procedure PutEnum(
Const AName : String;
Const ATypeInfo : PTypeInfo;
@ -260,11 +295,23 @@ type
Var AName : String;
Var AData : Int64
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetStr(
procedure GetAnsiStr(
Const ATypeInfo : PTypeInfo;
Var AName : String;
Var AData : String
Var AData : AnsiString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetWideStr(
const ATypeInfo : PTypeInfo;
var AName : String;
var AData : WideString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
procedure GetUnicodeStr(
const ATypeInfo : PTypeInfo;
var AName : String;
var AData : UnicodeString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
procedure GetObj(
Const ATypeInfo : PTypeInfo;
Var AName : String;
@ -402,7 +449,11 @@ Begin
dtExtended : APrinterProc( s + ARoot^.Name + ' = ' + FloatToStr(ARoot^.ExtendedData) );
dtCurrency : APrinterProc( s + ARoot^.Name + ' = ' + FloatToStr(ARoot^.CurrencyData) );
dtString : APrinterProc( s + ARoot^.Name + ' = ' + ARoot^.StrData^.Data );
dtAnsiString : APrinterProc( s + ARoot^.Name + ' = ' + ARoot^.AnsiStrData^.Data );
dtWideString : APrinterProc( s + ARoot^.Name + ' = ' + ARoot^.WideStrData^.Data );
{$IFDEF WST_UNICODESTRING}
dtUnicodeString : APrinterProc( s + ARoot^.Name + ' = ' + ARoot^.UnicodeStrData^.Data );
{$ENDIF WST_UNICODESTRING}
dtObject :
Begin
APrinterProc( s + ARoot^.Name + ' = ');
@ -494,13 +545,29 @@ begin
Result^.Name := AName;
Result^.DataType := ADataType;
Case Result^.DataType Of
dtString :
dtAnsiString :
Begin
i := SizeOf(TStringBuffer);
Result^.StrData := wst_GetMem(i);
FillChar(Result^.StrData^,i,#0);
Result^.StrData^.Data := '';
i := SizeOf(TAnsiStringBuffer);
Result^.AnsiStrData := wst_GetMem(i);
FillChar(Result^.AnsiStrData^,i,#0);
Result^.AnsiStrData^.Data := '';
End;
dtWideString :
begin
i := SizeOf(TWideStringBuffer);
Result^.WideStrData := wst_GetMem(i);
FillChar(Result^.WideStrData^,i,#0);
Result^.WideStrData^.Data := '';
end;
{$IFDEF WST_UNICODESTRING}
dtUnicodeString :
begin
i := SizeOf(TUnicodeStringBuffer);
Result^.UnicodeStrData := wst_GetMem(i);
FillChar(Result^.UnicodeStrData^,i,#0);
Result^.UnicodeStrData^.Data := '';
end;
{$ENDIF WST_UNICODESTRING}
dtObject :
Begin
Result^.ObjectData := wst_GetMem(SizeOf(TObjectBuffer));
@ -559,7 +626,7 @@ Begin
Exit;
i := Ord(ARoot^.DataType);
ADest.WriteInt32S(i);
ADest.WriteStr(ARoot^.Name);
ADest.WriteAnsiStr(ARoot^.Name);
Case ARoot^.DataType Of
dtInt8S : ADest.WriteInt8S(ARoot^.Int8S);
dtInt8U : ADest.WriteInt8U(ARoot^.Int8U);
@ -575,7 +642,11 @@ Begin
dtExtended : ADest.WriteExtended(ARoot^.ExtendedData);
dtCurrency : ADest.WriteCurrency(ARoot^.CurrencyData);
dtString : ADest.WriteStr(ARoot^.StrData^.Data);
dtAnsiString : ADest.WriteAnsiStr(ARoot^.AnsiStrData^.Data);
dtWideString : ADest.WriteWideStr(ARoot^.WideStrData^.Data);
{$IFDEF WST_UNICODESTRING}
dtUnicodeString : ADest.WriteUnicodeStr(ARoot^.UnicodeStrData^.Data);
{$ENDIF WST_UNICODESTRING}
dtBool : ADest.WriteBool(ARoot^.BoolData);
dtEnum : ADest.WriteEnum(ARoot^.EnumData);
dtObject :
@ -620,7 +691,7 @@ Begin
If AStoreRdr.IsAtEof() Then
Exit;
i := AStoreRdr.ReadInt32S();
s := AStoreRdr.ReadStr();
s := AStoreRdr.ReadAnsiStr();
If ( TDataType(i) < dtArray ) Then
Result := CreateObjBuffer(TDataType(i),s);
Case TDataType(i) Of
@ -638,7 +709,11 @@ Begin
dtExtended : Result^.ExtendedData := AStoreRdr.ReadExtended();
dtCurrency : Result^.CurrencyData := AStoreRdr.ReadCurrency();
dtString : Result^.StrData^.Data := AStoreRdr.ReadStr();
dtAnsiString : Result^.AnsiStrData^.Data := AStoreRdr.ReadAnsiStr();
dtWideString : Result^.WideStrData^.Data := AStoreRdr.ReadWideStr();
{$IFDEF WST_UNICODESTRING}
dtUnicodeString : Result^.UnicodeStrData^.Data := AStoreRdr.ReadUnicodeStr();
{$ENDIF WST_UNICODESTRING}
dtBool : Result^.BoolData := AStoreRdr.ReadBool();
dtEnum : Result^.EnumData := AStoreRdr.ReadEnum();
dtObject :
@ -698,12 +773,26 @@ Var
Begin
AOwner^.Name := '';
Case AOwner^.DataType Of
dtString :
dtAnsiString :
Begin
AOwner^.StrData^.Data := '';
Freemem(AOwner^.StrData);
AOwner^.StrData := Nil;
AOwner^.AnsiStrData^.Data := '';
Freemem(AOwner^.AnsiStrData);
AOwner^.AnsiStrData := Nil;
End;
dtWideString :
begin
AOwner^.WideStrData^.Data := '';
Freemem(AOwner^.WideStrData);
AOwner^.WideStrData := Nil;
end;
{$IFDEF WST_UNICODESTRING}
dtUnicodeString :
begin
AOwner^.UnicodeStrData^.Data := '';
Freemem(AOwner^.UnicodeStrData);
AOwner^.UnicodeStrData := Nil;
end;
{$ENDIF WST_UNICODESTRING}
dtObject :
Begin
ClearObjectBuffer(AOwner^.ObjectData);
@ -915,15 +1004,35 @@ begin
End;
end;
procedure TBaseBinaryFormatter.PutStr(
procedure TBaseBinaryFormatter.PutAnsiStr(
const AName : String;
const ATypeInfo : PTypeInfo;
const AData : String
const AData : AnsiString
);
begin
StackTop().CreateBuffer(AName,dtString)^.StrData^.Data := AData;
StackTop().CreateBuffer(AName,dtAnsiString)^.AnsiStrData^.Data := AData;
end;
procedure TBaseBinaryFormatter.PutWideStr(
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: WideString
);
begin
StackTop().CreateBuffer(AName,dtWideString)^.WideStrData^.Data := AData;
end;
{$IFDEF WST_UNICODESTRING}
procedure TBaseBinaryFormatter.PutUnicodeStr(
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: UnicodeString
);
begin
StackTop().CreateBuffer(AName,dtUnicodeString)^.UnicodeStrData^.Data := AData;
end;
{$ENDIF WST_UNICODESTRING}
procedure TBaseBinaryFormatter.PutEnum(
const AName: String;
const ATypeInfo: PTypeInfo;
@ -1043,15 +1152,35 @@ begin
AData := GetDataBuffer(AName)^.Int64S;
end;
procedure TBaseBinaryFormatter.GetStr(
procedure TBaseBinaryFormatter.GetAnsiStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: String
var AData: AnsiString
);
begin
AData := GetDataBuffer(AName)^.StrData^.Data;
AData := GetDataBuffer(AName)^.AnsiStrData^.Data;
end;
procedure TBaseBinaryFormatter.GetWideStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: WideString
);
begin
AData := GetDataBuffer(AName)^.WideStrData^.Data;
end;
{$IFDEF WST_UNICODESTRING}
procedure TBaseBinaryFormatter.GetUnicodeStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: UnicodeString
);
begin
AData := GetDataBuffer(AName)^.UnicodeStrData^.Data;
end;
{$ENDIF WST_UNICODESTRING}
procedure TBaseBinaryFormatter.GetObj(
const ATypeInfo: PTypeInfo;
var AName: String;
@ -1194,18 +1323,34 @@ end;
procedure TBaseBinaryFormatter.Put(const AName: String; const ATypeInfo: PTypeInfo;const AData);
Var
int64Data : Int64;
strData : string;
ansiStrData : AnsiString;
objData : TObject;
boolData : Boolean;
enumData : TEnumData;
floatDt : TFloat_Extended_10;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
begin
Case ATypeInfo^.Kind Of
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin
strData := String(AData);
PutStr(AName,ATypeInfo,strData);
ansiStrData := String(AData);
PutAnsiStr(AName,ATypeInfo,ansiStrData);
End;
tkWString :
begin
wideStrData := WideString(AData);
PutWideStr(AName,ATypeInfo,wideStrData);
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := UnicodeString(AData);
PutUnicodeStr(AName,ATypeInfo,unicodeStrData);
end;
{$ENDIF WST_UNICODESTRING}
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
int64Data := Int64(AData);
@ -1290,14 +1435,30 @@ var
boolData : Boolean;
enumData : TEnumData;
floatDt : TFloat_Extended_10;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
begin
CheckScope();
case ATypeInfo^.Kind of
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin
strData := string(AData);
StackTop().CreateInnerBuffer(dtString)^.StrData^.Data := strData;
StackTop().CreateInnerBuffer(dtAnsiString)^.AnsiStrData^.Data := strData;
end;
tkWString :
begin
wideStrData := WideString(AData);
StackTop().CreateInnerBuffer(dtWideString)^.WideStrData^.Data := wideStrData;
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := UnicodeString(AData);
StackTop().CreateInnerBuffer(dtUnicodeString)^.UnicodeStrData^.Data := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkInt64 :
begin
int64SData := Int64(AData);
@ -1403,7 +1564,7 @@ begin
ftCurr :
begin
floatDt := Currency(AData);
StackTop().CreateInnerBuffer(dtExtended)^.ExtendedData := floatDt;
StackTop().CreateInnerBuffer(dtExtended)^.CurrencyData := floatDt;
end;
ftComp :
begin
@ -1430,6 +1591,10 @@ Var
enumData : TEnumData;
floatDt : TFloat_Extended_10;
recObject : Pointer;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
begin
Case ATypeInfo^.Kind Of
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
@ -1441,9 +1606,23 @@ begin
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin
strData := '';
GetStr(ATypeInfo,AName,strData);
GetAnsiStr(ATypeInfo,AName,strData);
String(AData) := strData;
End;
tkWString :
begin
wideStrData := '';
GetWideStr(ATypeInfo,AName,wideStrData);
WideString(AData) := wideStrData;
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := '';
GetUnicodeStr(ATypeInfo,AName,unicodeStrData);
UnicodeString(AData) := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkClass :
Begin
objData := TObject(AData);
@ -1536,7 +1715,11 @@ begin
tkLString
{$IFDEF FPC},
tkAString
{$ENDIF} : string(AData) := dataBuffer^.StrData^.Data;
{$ENDIF} : string(AData) := dataBuffer^.AnsiStrData^.Data;
tkWString : WideString(AData) := dataBuffer^.WideStrData^.Data;
{$IFDEF WST_UNICODESTRING}
tkUString : UnicodeString(AData) := dataBuffer^.UnicodeStrData^.Data;
{$ENDIF WST_UNICODESTRING}
tkClass, tkRecord : raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
{$IFDEF FPC}

View File

@ -214,6 +214,18 @@ type
Const ATypeInfo : PTypeInfo;
Const AData : String
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
procedure PutUnicodeStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : UnicodeString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
procedure PutWideStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : WideString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutFloat(
Const AName : String;
Const ATypeInfo : PTypeInfo;
@ -263,6 +275,18 @@ type
Var AName : String;
Var AData : String
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
procedure GetUnicodeStr(
Const ATypeInfo : PTypeInfo;
Var AName : String;
Var AData : UnicodeString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
procedure GetWideStr(
Const ATypeInfo : PTypeInfo;
Var AName : String;
Var AData : WideString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetObj(
Const ATypeInfo : PTypeInfo;
Var AName : String;
@ -449,6 +473,26 @@ begin
StackTop().CreateStringBuffer(AName,AData);
end;
{$IFDEF WST_UNICODESTRING}
procedure TJsonRpcBaseFormatter.PutUnicodeStr(
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: UnicodeString
);
begin
StackTop().CreateStringBuffer(AName,AData);
end;
{$ENDIF WST_UNICODESTRING}
procedure TJsonRpcBaseFormatter.PutWideStr(
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: WideString
);
begin
StackTop().CreateStringBuffer(AName,AData);
end;
procedure TJsonRpcBaseFormatter.PutFloat(
const AName : String;
const ATypeInfo : PTypeInfo;
@ -537,6 +581,26 @@ begin
AData := GetDataBuffer(AName).AsString;
end;
{$IFDEF WST_UNICODESTRING}
procedure TJsonRpcBaseFormatter.GetUnicodeStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: UnicodeString
);
begin
AData := GetDataBuffer(AName).AsString;
end;
{$ENDIF WST_UNICODESTRING}
procedure TJsonRpcBaseFormatter.GetWideStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: WideString
);
begin
AData := GetDataBuffer(AName).AsString;
end;
procedure TJsonRpcBaseFormatter.GetObj(
const ATypeInfo : PTypeInfo;
var AName : String;
@ -736,6 +800,10 @@ Var
boolData : Boolean;
enumData : TEnumIntType;
floatDt : Extended;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
wideStrData : WideString;
begin
Case ATypeInfo^.Kind Of
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
@ -743,6 +811,18 @@ begin
strData := String(AData);
PutStr(AName,ATypeInfo,strData);
End;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := UnicodeString(AData);
PutUnicodeStr(AName,ATypeInfo,unicodeStrData);
end;
{$ENDIF WST_UNICODESTRING}
tkWString :
begin
wideStrData := WideString(AData);
PutWideStr(AName,ATypeInfo,wideStrData);
end;
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
int64Data := Int64(AData);
@ -825,6 +905,10 @@ var
boolData : Boolean;
enumData : TEnumIntType;
floatDt : Extended;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
begin
locName := s_inner_value;
Case ATypeInfo^.Kind Of
@ -833,6 +917,18 @@ begin
strData := String(AData);
PutStr(locName,ATypeInfo,strData);
End;
tkWString :
begin
wideStrData := WideString(AData);
PutWideStr(locName,ATypeInfo,wideStrData);
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := UnicodeString(AData);
PutUnicodeStr(locName,ATypeInfo,unicodeStrData);
end;
{$ENDIF WST_UNICODESTRING}
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
int64Data := Int64(AData);
@ -904,6 +1000,10 @@ Var
enumData : TEnumIntType;
floatDt : Extended;
recObject : Pointer;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
WideStrData : WideString;
begin
Case ATypeInfo^.Kind Of
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
@ -918,6 +1018,20 @@ begin
GetStr(ATypeInfo,AName,strData);
String(AData) := strData;
End;
{$IFDEF WST_UNICODESTRING}
tkUString :
Begin
unicodeStrData := '';
GetUnicodeStr(ATypeInfo,AName,unicodeStrData);
UnicodeString(AData) := unicodeStrData;
End;
{$ENDIF WST_UNICODESTRING}
tkWString :
Begin
WideStrData := '';
GetWideStr(ATypeInfo,AName,WideStrData);
WideString(AData) := WideStrData;
End;
tkClass :
Begin
objData := TObject(AData);
@ -1002,6 +1116,10 @@ var
enumData : TEnumIntType;
floatDt : Extended;
recObject : Pointer;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
begin
locName := s_inner_value;
Case ATypeInfo^.Kind Of
@ -1017,6 +1135,20 @@ begin
GetStr(ATypeInfo,locName,strData);
String(AData) := strData;
End;
tkWString :
begin
wideStrData := '';
GetWideStr(ATypeInfo,locName,wideStrData);
WideString(AData) := wideStrData;
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := '';
GetUnicodeStr(ATypeInfo,locName,unicodeStrData);
UnicodeString(AData) := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkClass, tkRecord :
Begin
raise EJsonRpcException.Create('Inner Scope value must be a "simple type" value.');

View File

@ -633,6 +633,32 @@ type
property Value : string read FValue write FValue;
end;
{ TComplexWideStringContentRemotable }
TComplexWideStringContentRemotable = class(TBaseComplexSimpleContentRemotable)
private
FValue: Widestring;
protected
class procedure SaveValue(AObject : TBaseRemotable; AStore : IFormatterBase);override;
class procedure LoadValue(var AObject : TObject; AStore : IFormatterBase);override;
public
property Value : Widestring read FValue write FValue;
end;
{$IFDEF WST_UNICODESTRING}
{ TComplexUnicodeStringContentRemotable }
TComplexUnicodeStringContentRemotable = class(TBaseComplexSimpleContentRemotable)
private
FValue: UnicodeString;
protected
class procedure SaveValue(AObject : TBaseRemotable; AStore : IFormatterBase);override;
class procedure LoadValue(var AObject : TObject; AStore : IFormatterBase);override;
public
property Value : UnicodeString read FValue write FValue;
end;
{$ENDIF WST_UNICODESTRING}
{ TBase64StringExtRemotable }
TBase64StringExtRemotable = class(TBaseComplexSimpleContentRemotable)
@ -1509,6 +1535,10 @@ begin
r.Register(sXSD_NS,TypeInfo(string),'string').AddPascalSynonym('string');
r.Register(sXSD_NS,TypeInfo(AnsiString),'ansistring').AddPascalSynonym('ansistring');
r.Register(sXSD_NS,TypeInfo(WideString),'widestring').AddPascalSynonym('widestring');
{$IFDEF WST_UNICODESTRING}
r.Register(sXSD_NS,TypeInfo(UnicodeString),'UnicodeString').AddPascalSynonym('unicodestring');
{$ENDIF WST_UNICODESTRING}
r.Register(sXSD_NS,TypeInfo(anyURI),'anyURI').AddPascalSynonym('anyURI');
r.Register(sXSD_NS,TypeInfo(boolean),'boolean').AddPascalSynonym('boolean');
@ -1577,6 +1607,10 @@ begin
r.Register(sXSD_NS,TypeInfo(TComplexFloatSingleContentRemotable),'Single').AddPascalSynonym('TComplexFloatSingleContentRemotable');
r.Register(sXSD_NS,TypeInfo(TComplexStringContentRemotable),'string').AddPascalSynonym('TComplexStringContentRemotable');
r.Register(sXSD_NS,TypeInfo(TComplexWideStringContentRemotable),'widestring').AddPascalSynonym('TComplexWideStringContentRemotable');
{$IFDEF WST_UNICODESTRING}
r.Register(sXSD_NS,TypeInfo(TComplexUnicodeStringContentRemotable),'unicodestring').AddPascalSynonym('TComplexUnicodeStringContentRemotable');
{$ENDIF WST_UNICODESTRING}
r.Register(sXSD_NS,TypeInfo(TComplexBooleanContentRemotable),'boolean').AddPascalSynonym('TComplexBooleanContentRemotable');
end;
@ -5119,6 +5153,52 @@ begin
(AObject as TComplexStringContentRemotable).Value := i;
end;
{ TComplexWideStringContentRemotable }
class procedure TComplexWideStringContentRemotable.SaveValue(
AObject: TBaseRemotable;
AStore: IFormatterBase
);
begin
AStore.PutScopeInnerValue(TypeInfo(WideString),(AObject as TComplexWideStringContentRemotable).Value);
end;
class procedure TComplexWideStringContentRemotable.LoadValue(
var AObject: TObject;
AStore: IFormatterBase
);
var
i : WideString;
begin
i := '';
AStore.GetScopeInnerValue(TypeInfo(WideString),i);
(AObject as TComplexWideStringContentRemotable).Value := i;
end;
{$IFDEF WST_UNICODESTRING}
{ TComplexUnicodeStringContentRemotable }
class procedure TComplexUnicodeStringContentRemotable.SaveValue(
AObject: TBaseRemotable;
AStore: IFormatterBase
);
begin
AStore.PutScopeInnerValue(TypeInfo(UnicodeString),(AObject as TComplexUnicodeStringContentRemotable).Value);
end;
class procedure TComplexUnicodeStringContentRemotable.LoadValue(
var AObject: TObject;
AStore: IFormatterBase
);
var
i : UnicodeString;
begin
i := '';
AStore.GetScopeInnerValue(TypeInfo(UnicodeString),i);
(AObject as TComplexUnicodeStringContentRemotable).Value := i;
end;
{$ENDIF WST_UNICODESTRING}
{ TDateRemotable }
procedure TDateRemotable.SetDate(const AValue: TDateTime);
@ -6271,6 +6351,7 @@ begin
end;
initialization
initialize_base_service_intf();

View File

@ -152,7 +152,7 @@ type
const ANameSpace : string;
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : string
Const AData : DOMString
):TDOMNode;
function PutEnum(
const ANameSpace : string;
@ -178,6 +178,20 @@ type
Const ATypeInfo : PTypeInfo;
Const AData : String
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
function PutUnicodeStr(
const ANameSpace : string;
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : UnicodeString
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
function PutWideStr(
const ANameSpace : string;
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : WideString
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutFloat(
const ANameSpace : string;
Const AName : String;
@ -234,6 +248,20 @@ type
Var AName : String;
Var AData : String
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
procedure GetUnicodeStr(
Const ATypeInfo : PTypeInfo;
const ANameSpace : string;
Var AName : String;
Var AData : UnicodeString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
procedure GetWideStr(
Const ATypeInfo : PTypeInfo;
const ANameSpace : string;
Var AName : String;
Var AData : WideString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetObj(
Const ATypeInfo : PTypeInfo;
Var AName : String;
@ -715,7 +743,7 @@ function TSOAPBaseFormatter.InternalPutData(
const ANameSpace : string;
const AName : String;
const ATypeInfo : PTypeInfo;
const AData : string
const AData : DOMString
): TDOMNode;
Var
namespaceLongName, namespaceShortName, strName, strNodeName, s : string;
@ -813,6 +841,28 @@ begin
Result := InternalPutData(ANameSpace,AName,ATypeInfo,AData);
end;
{$IFDEF WST_UNICODESTRING}
function TSOAPBaseFormatter.PutUnicodeStr(
const ANameSpace: string;
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: UnicodeString
): TDOMNode;
begin
Result := InternalPutData(ANameSpace,AName,ATypeInfo,AData);
end;
{$ENDIF WST_UNICODESTRING}
function TSOAPBaseFormatter.PutWideStr(
const ANameSpace: string;
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: WideString
) : TDOMNode;
begin
Result := InternalPutData(ANameSpace,AName,ATypeInfo,AData);
end;
procedure TSOAPBaseFormatter.PutObj(
const AName : String;
const ATypeInfo : PTypeInfo;
@ -976,6 +1026,28 @@ begin
AData := GetNodeValue(ANameSpace,AName);
end;
{$IFDEF WST_UNICODESTRING}
procedure TSOAPBaseFormatter.GetUnicodeStr(
const ATypeInfo: PTypeInfo;
const ANameSpace: string;
var AName: String;
var AData: UnicodeString
);
begin
AData := GetNodeValue(ANameSpace,AName);
end;
{$ENDIF WST_UNICODESTRING}
procedure TSOAPBaseFormatter.GetWideStr(
const ATypeInfo: PTypeInfo;
const ANameSpace: string;
var AName: String;
var AData: WideString
);
begin
AData := GetNodeValue(ANameSpace,AName);
end;
procedure TSOAPBaseFormatter.GetObj(
const ATypeInfo : PTypeInfo;
var AName : String;
@ -1466,6 +1538,10 @@ Var
boolData : Boolean;
enumData : TEnumIntType;
floatDt : Extended;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
wideStrData : WideString;
begin
Case ATypeInfo^.Kind Of
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
@ -1478,6 +1554,18 @@ begin
strData := String(AData);
PutStr(ANameSpace,AName,ATypeInfo,strData);
End;
{$IFDEF WST_UNICODESTRING}
tkUString :
Begin
unicodeStrData := UnicodeString(AData);
PutUnicodeStr(ANameSpace,AName,ATypeInfo,unicodeStrData);
End;
{$ENDIF WST_UNICODESTRING}
tkWString :
Begin
wideStrData := WideString(AData);
PutWideStr(ANameSpace,AName,ATypeInfo,wideStrData);
End;
tkClass :
Begin
objData := TObject(AData);
@ -1561,6 +1649,10 @@ Var
dataBuffer : string;
frmt : string;
prcsn,i : Integer;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
{strm : TStringStream;
locDoc : TwstXMLDocument;
locNode : TDOMNode;}
@ -1584,6 +1676,18 @@ begin
strData := string(AData);
dataBuffer := strData;
end;
tkWString :
begin
wideStrData := WideString(AData);
dataBuffer := wideStrData;
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := UnicodeString(AData);
dataBuffer := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkClass :
begin
raise ESOAPException.Create('Inner Scope value must be a "simple type" value.');
@ -1684,6 +1788,10 @@ Var
enumData : TEnumIntType;
floatDt : Extended;
recObject : Pointer;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
wideStrData : WideString;
begin
Case ATypeInfo^.Kind Of
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
@ -1698,6 +1806,20 @@ begin
GetStr(ATypeInfo,ANameSpace,AName,strData);
String(AData) := strData;
End;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := '';
GetUnicodeStr(ATypeInfo,ANameSpace,AName,unicodeStrData);
UnicodeString(AData) := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkWString :
begin
wideStrData := '';
GetWideStr(ATypeInfo,ANameSpace,AName,wideStrData);
WideString(AData) := wideStrData;
end;
tkClass :
Begin
objData := TObject(AData);
@ -1793,6 +1915,10 @@ begin
tkQWord : QWord(AData) := StrToInt64Def(Trim(dataBuffer),0);
{$ENDIF}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : string(AData) := dataBuffer;
tkWString : WideString(AData) := dataBuffer;
{$IFDEF WST_UNICODESTRING}
tkUString : UnicodeString(AData) := dataBuffer;
{$ENDIF WST_UNICODESTRING}
tkClass :
begin
raise ESOAPException.Create('Inner Scope value must be a "simple type" value.');

View File

@ -172,7 +172,7 @@ type
function InternalPutData(
const AName : string;
const AType : TXmlRpcDataType;
const AData : string
const AData : DOMString
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutEnum(
Const AName : String;
@ -196,6 +196,18 @@ type
Const ATypeInfo : PTypeInfo;
Const AData : String
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
function PutUnicodeStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : UnicodeString
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
function PutWideStr(
Const AName : String;
Const ATypeInfo : PTypeInfo;
Const AData : WideString
):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutFloat(
Const AName : String;
Const ATypeInfo : PTypeInfo;
@ -245,6 +257,18 @@ type
Var AName : String;
Var AData : String
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF WST_UNICODESTRING}
procedure GetUnicodeStr(
Const ATypeInfo : PTypeInfo;
Var AName : String;
Var AData : UnicodeString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF WST_UNICODESTRING}
procedure GetWideStr(
Const ATypeInfo : PTypeInfo;
Var AName : String;
Var AData : WideString
);{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetObj(
Const ATypeInfo : PTypeInfo;
Var AName : String;
@ -751,7 +775,7 @@ end;
function TXmlRpcBaseFormatter.InternalPutData(
const AName : string;
const AType : TXmlRpcDataType;
const AData : string
const AData : DOMString
): TDOMNode;
begin
Result := StackTop().CreateBuffer(AName,AType).AppendChild(FDoc.CreateTextNode(AData));
@ -809,6 +833,34 @@ begin
);
end;
{$IFDEF WST_UNICODESTRING}
function TXmlRpcBaseFormatter.PutUnicodeStr(
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: UnicodeString
) : TDOMNode;
begin
Result := InternalPutData(
AName,
xdtString,
AData//StringReplace(StringReplace(AData,'<','&lt;',[rfReplaceAll]),'&','&amp;',[rfReplaceAll])
);
end;
{$ENDIF WST_UNICODESTRING}
function TXmlRpcBaseFormatter.PutWideStr(
const AName: String;
const ATypeInfo: PTypeInfo;
const AData: WideString
) : TDOMNode;
begin
Result := InternalPutData(
AName,
xdtString,
AData//StringReplace(StringReplace(AData,'<','&lt;',[rfReplaceAll]),'&','&amp;',[rfReplaceAll])
);
end;
procedure TXmlRpcBaseFormatter.PutObj(
const AName : String;
const ATypeInfo : PTypeInfo;
@ -945,6 +997,26 @@ begin
AData := GetNodeValue(AName);
end;
{$IFDEF WST_UNICODESTRING}
procedure TXmlRpcBaseFormatter.GetUnicodeStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: UnicodeString
);
begin
AData := GetNodeValue(AName);
end;
{$ENDIF WST_UNICODESTRING}
procedure TXmlRpcBaseFormatter.GetWideStr(
const ATypeInfo: PTypeInfo;
var AName: String;
var AData: WideString
);
begin
AData := GetNodeValue(AName);
end;
procedure TXmlRpcBaseFormatter.GetObj(
const ATypeInfo : PTypeInfo;
var AName : String;
@ -1138,6 +1210,10 @@ Var
{$IFDEF FPC}boolData : Boolean;{$ENDIF}
enumData : TEnumIntType;
floatDt : Extended;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
wideStrData : WideString;
begin
Case ATypeInfo^.Kind Of
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
@ -1150,6 +1226,18 @@ begin
strData := String(AData);
PutStr(AName,ATypeInfo,strData);
End;
tkWString :
Begin
wideStrData := WideString(AData);
PutWideStr(AName,ATypeInfo,wideStrData);
End;
{$IFDEF WST_UNICODESTRING}
tkUString :
Begin
unicodeStrData := UnicodeString(AData);
PutUnicodeStr(AName,ATypeInfo,unicodeStrData);
End;
{$ENDIF WST_UNICODESTRING}
tkClass :
Begin
objData := TObject(AData);
@ -1222,6 +1310,10 @@ Var
dataBuffer : string;
frmt : string;
prcsn,i : Integer;
wideStrData : WideString;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
begin
CheckScope();
Case ATypeInfo^.Kind Of
@ -1242,6 +1334,18 @@ begin
strData := string(AData);
dataBuffer := strData;
end;
tkWString :
begin
wideStrData := WideString(AData);
dataBuffer := wideStrData;
end;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := UnicodeString(AData);
dataBuffer := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkClass :
begin
raise EXmlRpcException.Create('Inner Scope value must be a "simple type" value.');
@ -1331,6 +1435,10 @@ Var
enumData : TEnumIntType;
floatDt : Extended;
recObject : Pointer;
{$IFDEF WST_UNICODESTRING}
unicodeStrData : UnicodeString;
{$ENDIF WST_UNICODESTRING}
wideStrData : WideString;
begin
Case ATypeInfo^.Kind Of
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
@ -1345,6 +1453,20 @@ begin
GetStr(ATypeInfo,AName,strData);
String(AData) := strData;
End;
{$IFDEF WST_UNICODESTRING}
tkUString :
begin
unicodeStrData := '';
GetUnicodeStr(ATypeInfo,AName,unicodeStrData);
UnicodeString(AData) := unicodeStrData;
end;
{$ENDIF WST_UNICODESTRING}
tkWString :
begin
wideStrData := '';
GetWideStr(ATypeInfo,AName,wideStrData);
WideString(AData) := wideStrData;
end;
tkClass :
Begin
objData := TObject(AData);
@ -1429,6 +1551,10 @@ begin
tkQWord : QWord(AData) := StrToInt64Def(Trim(dataBuffer),0);
{$ENDIF}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : string(AData) := dataBuffer;
tkWString : WideString(AData) := dataBuffer;
{$IFDEF WST_UNICODESTRING}
tkUString : UnicodeString(AData) := dataBuffer;
{$ENDIF WST_UNICODESTRING}
tkClass :
begin
raise EXmlRpcException.Create('Inner Scope value must be a "simple type" value.');

View File

@ -30,7 +30,11 @@ Type
TInt64S = Int64; TInt64U = QWord;
TBoolData = Boolean;
TEnumData = Int64;
TStringData = AnsiString;
TAnsiStringData = AnsiString;
TWideStringData = WideString;
{$IFDEF WST_UNICODESTRING}
TUnicodeStringData = UnicodeString;
{$ENDIF WST_UNICODESTRING}
TFloat_Single_4 = Single;
TFloat_Double_8 = Double;
@ -53,7 +57,11 @@ Type
procedure WriteBool(Const AData : TBoolData);
procedure WriteEnum(Const AData : TEnumData);
procedure WriteStr(Const AData : TStringData);
procedure WriteAnsiStr(Const AData : TAnsiStringData);
procedure WriteWideStr(Const AData : TWideStringData);
{$IFDEF WST_UNICODESTRING}
procedure WriteUnicodeStr(Const AData : TUnicodeStringData);
{$ENDIF WST_UNICODESTRING}
procedure WriteSingle(Const AData : TFloat_Single_4);
procedure WriteDouble(Const AData : TFloat_Double_8);
@ -78,7 +86,11 @@ Type
function ReadBool():TBoolData;
function ReadEnum():TEnumData;
function ReadStr():TStringData;
function ReadAnsiStr():TAnsiStringData;
function ReadWideStr():TWideStringData;
{$IFDEF WST_UNICODESTRING}
function ReadUnicodeStr():TUnicodeStringData;
{$ENDIF WST_UNICODESTRING}
function ReadSingle():TFloat_Single_4;
function ReadDouble():TFloat_Double_8;
@ -89,6 +101,7 @@ Type
function CreateBinaryReader(AStream : TStream):IDataStoreReader;{$IFDEF USE_INLINE}inline;{$ENDIF}
function CreateBinaryWriter(AStream : TStream):IDataStore;{$IFDEF USE_INLINE}inline;{$ENDIF}
{These routines transform their argument to "Big Endian" alignment}
procedure ReverseBytes(var AData; const ALength : Integer);{$IFDEF USE_INLINE}{$IFDEF ENDIAN_BIG}inline;{$ENDIF}{$ENDIF}
function Reverse_16(const AValue:Word):Word;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_32(const AValue:DWord):DWord;{$IFDEF USE_INLINE}inline;{$ENDIF}
@ -164,6 +177,26 @@ begin
ReverseBytes(Result,8);
end;
{$IFDEF ENDIAN_BIG}
procedure Reverse_Array(var AValue; const AArrayLength, AItemSize : PtrInt);{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
end;
{$ELSE ENDIAN_BIG}
procedure Reverse_Array(var AValue; const AArrayLength, AItemSize : PtrInt);
var
p : PByte;
i : PtrInt;
begin
if ( AArrayLength > 0 ) and ( AItemSize > 1 ) then begin
p := @AValue;
for i := 0 to Pred(AArrayLength) do begin
ReverseBytes(p^,AItemSize);
Inc(p,AItemSize);
end;
end;
end;
{$ENDIF ENDIAN_BIG}
Type
{ TDataStore }
@ -185,7 +218,11 @@ Type
procedure WriteBool(Const AData : TBoolData);
procedure WriteEnum(Const AData : TEnumData);
procedure WriteStr(Const AData : TStringData);
procedure WriteAnsiStr(Const AData : TAnsiStringData);
procedure WriteWideStr(Const AData : TWideStringData);
{$IFDEF WST_UNICODESTRING}
procedure WriteUnicodeStr(Const AData : TUnicodeStringData);
{$ENDIF WST_UNICODESTRING}
procedure WriteSingle(Const AData : TFloat_Single_4);
procedure WriteDouble(Const AData : TFloat_Double_8);
@ -216,8 +253,12 @@ Type
function ReadBool():TBoolData;
function ReadEnum():TEnumData;
function ReadStr():TStringData;
function ReadAnsiStr():TAnsiStringData;
function ReadWideStr():TWideStringData;
{$IFDEF WST_UNICODESTRING}
function ReadUnicodeStr():TUnicodeStringData;
{$ENDIF WST_UNICODESTRING}
function ReadSingle():TFloat_Single_4;
function ReadDouble():TFloat_Double_8;
function ReadExtended():TFloat_Extended_10;
@ -344,7 +385,7 @@ begin
WriteInt64S(AData);
end;
procedure TDataStore.WriteStr(const AData: TStringData);
procedure TDataStore.WriteAnsiStr(const AData: TAnsiStringData);
Var
i : TInt32S;
begin
@ -354,6 +395,52 @@ begin
FStream.Write(AData[1],i);
end;
procedure TDataStore.WriteWideStr(const AData: TWideStringData);
procedure LocalWrite();
var
locData : TWideStringData;
begin
locData := AData;
UniqueString(locData);
Reverse_Array(Pointer(locData)^,Length(locData),SizeOf(WideChar));
FStream.Write(Pointer(locData)^, ( Length(locData) * SizeOf(WideChar) ) );
end;
var
i : TInt32S;
begin
i := Length(AData);
WriteInt32S(i);
if ( i > 0 ) then begin
LocalWrite();
end;
end;
{$IFDEF WST_UNICODESTRING}
procedure TDataStore.WriteUnicodeStr(const AData: TUnicodeStringData);
procedure LocalWrite();
var
locData : TUnicodeStringData;
begin
locData := AData;
UniqueString(locData);
Reverse_Array(Pointer(locData)^,Length(locData),SizeOf(UnicodeChar));
FStream.Write(Pointer(locData)^, ( Length(locData) * SizeOf(UnicodeChar) ) );
end;
var
i : TInt32S;
begin
i := Length(AData);
WriteInt32S(i);
if ( i > 0 ) then begin
LocalWrite();
end;
end;
{$ENDIF WST_UNICODESTRING}
{
procedure TDataStore.WriteSingle(const AData: TFloat_Single_4);
begin
@ -476,7 +563,7 @@ begin
Result := ReadInt64S();
end;
function TDataStoreReader.ReadStr(): TStringData;
function TDataStoreReader.ReadAnsiStr(): TAnsiStringData;
Var
i : TInt32S;
begin
@ -486,6 +573,32 @@ begin
FStream.ReadBuffer(Result[1],i);
end;
function TDataStoreReader.ReadWideStr(): TWideStringData;
var
i : TInt32S;
begin
i := ReadInt32S();
SetLength(Result,i);
if ( i > 0 ) then begin
FStream.ReadBuffer(Pointer(Result)^, ( i * SizeOf(WideChar) ) );
Reverse_Array(Pointer(Result)^,i,SizeOf(WideChar));
end;
end;
{$IFDEF WST_UNICODESTRING}
function TDataStoreReader.ReadUnicodeStr(): TUnicodeStringData;
var
i : TInt32S;
begin
i := ReadInt32S();
SetLength(Result,i);
if ( i > 0 ) then begin
FStream.ReadBuffer(Pointer(Result)^, ( i * SizeOf(UnicodeChar) ) );
Reverse_Array(Pointer(Result)^,i,SizeOf(UnicodeChar));
end;
end;
{$ENDIF WST_UNICODESTRING}
function TDataStoreReader.ReadSingle(): TFloat_Single_4;
begin
FStream.Read(Result,SizeOf(Result));

View File

@ -166,7 +166,7 @@ end;
procedure THTTPTransport.SendAndReceive(ARequest, AResponse: TStream);
{$IFDEF WST_DBG}
Var
s : string;
s : TBinaryString;
i : Int64;
{$ENDIF WST_DBG}
begin

View File

@ -17,7 +17,7 @@ interface
uses
Classes, SysUtils,
service_intf, imp_utils, base_service_intf,
service_intf, imp_utils, base_service_intf, wst_types,
WSocket;
@ -161,9 +161,9 @@ procedure TTCPTransport.SendAndReceive(ARequest, AResponse: TStream);
Var
wrtr : IDataStore;
buffStream : TMemoryStream;
strBuff : string;
strBuff : TBinaryString;
{$IFDEF WST_DBG}
s : string;
s : TBinaryString;
i : Int64;
{$ENDIF WST_DBG}
begin
@ -171,13 +171,13 @@ begin
Try
wrtr := CreateBinaryWriter(buffStream);
wrtr.WriteInt32S(0);
wrtr.WriteStr(Target);
wrtr.WriteStr(ContentType);
wrtr.WriteStr(Self.Format);
wrtr.WriteAnsiStr(Target);
wrtr.WriteAnsiStr(ContentType);
wrtr.WriteAnsiStr(Self.Format);
SetLength(strBuff,ARequest.Size);
ARequest.Position := 0;
ARequest.Read(strBuff[1],Length(strBuff));
wrtr.WriteStr(strBuff);
wrtr.WriteAnsiStr(strBuff);
buffStream.Position := 0;
wrtr.WriteInt32S(buffStream.Size-4);

View File

@ -120,13 +120,13 @@ begin
try
wrtr := CreateBinaryWriter(buffStream);
wrtr.WriteInt32S(0);
wrtr.WriteStr(Target);
wrtr.WriteStr(ContentType);
wrtr.WriteStr(Self.Format);
wrtr.WriteAnsiStr(Target);
wrtr.WriteAnsiStr(ContentType);
wrtr.WriteAnsiStr(Self.Format);
SetLength(strBuff,ARequest.Size);
ARequest.Position := 0;
ARequest.Read(strBuff[1],Length(strBuff));
wrtr.WriteStr(strBuff);
wrtr.WriteAnsiStr(strBuff);
buffStream.Position := 0;
wrtr.WriteInt32S(buffStream.Size-4);
buffStream.Position := 0;

View File

@ -26,10 +26,7 @@ uses
//IdTCPServer,
{$ENDIF}
IdSocketHandle,
server_listener;
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
server_listener, wst_types;
const
sSERVER_PORT = 1234;
@ -139,7 +136,7 @@ var
locInStream, locOutStream : TMemoryStream;
wrtr : IDataStore;
rdr : IDataStoreReader;
buff, trgt,ctntyp, frmt : string;
buff, trgt,ctntyp, frmt : TBinaryString;
rqst : IRequestBuffer;
i : PtrUInt;
begin
@ -157,10 +154,10 @@ begin
{$ENDIF}
if ( ReadInputBuffer(locInStream) >= SizeOf(LongInt) ) then begin
rdr := CreateBinaryReader(locInStream);
trgt := rdr.ReadStr();
ctntyp := rdr.ReadStr();
frmt := rdr.ReadStr();
buff := rdr.ReadStr();
trgt := rdr.ReadAnsiStr();
ctntyp := rdr.ReadAnsiStr();
frmt := rdr.ReadAnsiStr();
buff := rdr.ReadAnsiStr();
{$IFDEF WST_DBG}
WriteLn(buff);
@ -178,7 +175,7 @@ begin
locOutStream.Read(buff[1],i);
locOutStream.Size := 0;
wrtr := CreateBinaryWriter(locOutStream);
wrtr.WriteStr(buff);
wrtr.WriteAnsiStr(buff);
locOutStream.Position := 0;
{$IFDEF INDY_10}
AContext.Connection.IOHandler.Write(locOutStream,locOutStream.Size,False);