public ResponseMessage( DrdaStreamReader reader) { Size = reader.ReadUInt16(); reader.ReadUInt8(); // DDMID Format = (MessageFormat)reader.ReadUInt8(); RequestCorrelationId = reader.ReadUInt16(); Command = (ICommand)CodePointMapper.Deserialize(reader); }
internal void Process( QueryContext context) { using var stream = new MemoryStream(_messageBytes, false); var reader = new DrdaStreamReader(stream); while (stream.Position < stream.Length) { var length = reader.ReadUInt8(); var type = reader.ReadUInt8(); var id = reader.ReadUInt8(); // TODO: olegra - store full parsing tree here later if (id != 0xD0) { reader.ReadBytes((UInt32)length - 3); continue; } var triples = new Triple[length / 3 - 1]; for (var index = 0; index < triples.Length; ++index) { switch (type) { case 117: // GDA case 118: // NGDA triples[index] = new Triple( reader.ReadUInt8(), reader.ReadUInt16()); break; case 113: // RLO // TODO: olegra - skip for now reader.ReadUInt8(); reader.ReadUInt16(); break; } } for (var index = 0; index < triples.Length; ++index) { context.Columns[index].TripletType = triples[index].Type; context.Columns[index].TripletDataSize = triples[index].Size; } } }
public CommAreaGroupDescriptor( DrdaStreamReader reader) { if (reader.ReadUInt8() == 0xFF) { return; } SqlCode = reader.ReadUInt32(); SqlState = reader.ReadString(5); var sqlErrProc = reader.ReadString(8); if (reader.ReadUInt8() != 0xFF) { RowsFetched = reader.ReadUInt64(); RowsUpdated = reader.ReadUInt32(); var sqlErrs = reader.ReadBytes(12); // 3 * sizeof(UInt32) var sqlWarn = reader.ReadBytes(11); // 11 * sizeof(Byte) var rdbName = reader.ReadUInt16(); SqlMessage = reader.ReadVcmVcs(); } if (reader.ReadUInt8() != 0xFF) { // WORKWORK } }
public UInt16Parameter( DrdaStreamReader reader, CodePoint codePoint) : this( codePoint, reader.ReadUInt16()) { }
public static String ReadVarString( this DrdaStreamReader reader) { var size = reader.ReadUInt16(); var bytes = reader.ReadBytes(size); return(Encoding.UTF8.GetString(bytes)); }
public static String ReadVcmVcs( this DrdaStreamReader reader) { var value = reader.ReadVarString(); if (String.IsNullOrEmpty(value)) { value = reader.ReadVarString(); } else { reader.ReadUInt16(); } return(value); }
public DrdaColumn( DrdaStreamReader reader) { Precision = reader.ReadUInt16(); Scale = reader.ReadUInt16(); Length = reader.ReadUInt64(); Db2Type = (Db2Type)reader.ReadUInt16(); CcsId = reader.ReadUInt16(); ArrayExt = reader.ReadUInt8(); Unnamed = reader.ReadUInt16(); Name = reader.ReadVcmVcs(); Label = reader.ReadVcmVcs(); Comment = reader.ReadVcmVcs(); var hiByte = reader.ReadUInt8(); if (hiByte != 0xFF) { TypeName = reader.ReadVcmVcs(hiByte); ClassName = reader.ReadVcmVcs(); } // ReSharper disable once RedundantAssignment reader.ReadUInt8(); KeyMem = reader.ReadUInt16(); Updateable = reader.ReadUInt16(); Generated = reader.ReadUInt16(); ParameterMode = reader.ReadUInt16(); RdbName = reader.ReadVarString(); CoreName = reader.ReadVcmVcs(); BaseName = reader.ReadVcmVcs(); Scheme = reader.ReadVcmVcs(); DxName = reader.ReadVcmVcs(); }
public static IDrdaMessage Deserialize( DrdaStreamReader reader) { var size = (UInt32)reader.ReadUInt16(); var codePoint = (CodePoint)reader.ReadUInt16(); if (size == 0x8004) { // TODO: olegra - check how we can obtain real message length here } else if ((size & 0x8000) == 0x8000) { size = reader.ReadUInt32() + sizeof(UInt16) + sizeof(UInt16); } // TODO: olegra - find the better way for handling code points here switch (codePoint) { case PBSD: case EXSATRM: case ACCSECRM: case SECCHKRM: case ACCRDBRM: case CMDCHKRM: case SQLERRRM: case RDBUPDRM: case SYNTAXRM: case RSLSETRM: case OPNQRYRM: case ENDUOWRM: return(new CompositeCommand(reader, size, codePoint)); // In fact they are composite but we don't need them right now case MGRLVLLS: case TYPDEFOVR: case PKGSNLST: return(new BytesParameter(reader, size, codePoint)); //-V3139 case QRYDSC: case QRYDTA: case EXTDTA: case SQLCARD: case SQLDARD: case SQLCINRD: case SQLRSLRD: return(new ReaderCommand(reader, size, codePoint)); case UOWDSP: case PBSD_ISO: case SYNERRCD: case SECCHKCD: case SQLCSRHLD: case QRYATTUPD: return(new UInt8Parameter(reader, codePoint)); case SECMEC: case SRVCOD: case QRYPRCTYP: return(new UInt16Parameter(reader, codePoint)); case QRYINSID: return(new UInt64Parameter(reader, codePoint)); case PRDID: case RDBNAM: case EXTNAM: case SRVNAM: case SRVCLSNM: case SRVRLSLV: case TYPDEFNAM: case PBSD_SCHEMA: // TODO: olegra - create string parameter type? return(new BytesParameter(reader, size, codePoint)); default: TraceWarning("Unknown code point value: 0x{0:X}", codePoint); return(new BytesParameter(reader, size, codePoint)); } }