示例#1
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(Program);
     writer.Write(Version);
     writer.Write(Procedure);
     writer.WriteVariableLengthOpaque(Arguments);
 }
示例#2
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(Program);
     writer.Write(Version);
     writer.Write((int)Protocol);
     writer.Write(Port);
 }
示例#3
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(BoolValue);
     writer.Write(Int8Value);
     writer.Write(Int16Value);
     writer.Write(Int32Value);
     writer.Write(Int64Value);
     writer.Write(UInt16Value);
     writer.Write(UInt32Value);
     writer.Write(UInt64Value);
     writer.Write(Float64Value);
     writer.Write(Float32Value);
     writer.WriteVariableLengthArray(BoolValue2);
     writer.WriteVariableLengthArray(Int8Value2);
     writer.WriteVariableLengthArray(Int16Value2);
     writer.WriteVariableLengthArray(Int32Value2);
     writer.WriteVariableLengthArray(Int64Value2);
     writer.WriteVariableLengthArray(UInt16Value2);
     writer.WriteVariableLengthArray(UInt32Value2);
     writer.WriteVariableLengthArray(UInt64Value2);
     writer.WriteVariableLengthArray(Float64Value2);
     writer.WriteVariableLengthArray(Float32Value2);
     writer.WriteFixedLengthArray(BoolValue3);
     writer.WriteFixedLengthArray(Int8Value3);
     writer.WriteFixedLengthArray(Int16Value3);
     writer.WriteFixedLengthArray(Int32Value3);
     writer.WriteFixedLengthArray(Int64Value3);
     writer.WriteFixedLengthArray(UInt16Value3);
     writer.WriteFixedLengthArray(UInt32Value3);
     writer.WriteFixedLengthArray(UInt64Value3);
     writer.WriteFixedLengthArray(Float64Value3);
     writer.WriteFixedLengthArray(Float32Value3);
 }
示例#4
0
 public void SendContAuthToBuffer(IXdrWriter xdr)
 {
     xdr.Write(IscCodes.op_cont_auth);
     xdr.WriteBuffer(HasClientData ? ClientData : PublicClientData); // p_data
     xdr.Write(AcceptPluginName);                                    // p_name
     xdr.Write(AcceptPluginName);                                    // p_list
     xdr.WriteBuffer(ServerKeys);                                    // p_keys
 }
示例#5
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(RpcVersion);
     writer.Write(Program);
     writer.Write(Version);
     writer.Write(Procedure);
     Credential?.WriteTo(writer);
     Verifier?.WriteTo(writer);
 }
示例#6
0
 public void WriteTo(IXdrWriter writer)
 {
     if (MappingNode != null)
     {
         writer.Write(true); MappingNode.WriteTo(writer);
     }
     else
     {
         writer.Write(false);
     }
 }
示例#7
0
        public void WriteTo(IXdrWriter writer)
        {
            var current = this;

            do
            {
                current.Mapping?.WriteTo(writer);
                current = current.Next;
                writer.Write(current != null);
            } while (current != null);
        }
示例#8
0
        public void SendWireCryptToBuffer(IXdrWriter xdr)
        {
            if (WireCrypt == WireCryptOption.Disabled)
            {
                return;
            }

            xdr.Write(IscCodes.op_crypt);
            xdr.Write(FirebirdNetworkHandlingWrapper.EncryptionName);
            xdr.Write(SessionKeyName);
        }
示例#9
0
        public async ValueTask SendContAuthToBufferAsync(IXdrWriter xdr, CancellationToken cancellationToken = default)
        {
            await xdr.WriteAsync(IscCodes.op_cont_auth, cancellationToken).ConfigureAwait(false);

            await xdr.WriteBufferAsync(HasClientData?ClientData : PublicClientData, cancellationToken).ConfigureAwait(false); // p_data

            await xdr.WriteAsync(AcceptPluginName, cancellationToken).ConfigureAwait(false);                                  // p_name

            await xdr.WriteAsync(AcceptPluginName, cancellationToken).ConfigureAwait(false);                                  // p_list

            await xdr.WriteBufferAsync(ServerKeys, cancellationToken).ConfigureAwait(false);                                  // p_keys
        }
示例#10
0
        public async ValueTask SendWireCryptToBufferAsync(IXdrWriter xdr, CancellationToken cancellationToken = default)
        {
            if (WireCrypt == WireCryptOption.Disabled)
            {
                return;
            }

            await xdr.WriteAsync(IscCodes.op_crypt, cancellationToken).ConfigureAwait(false);

            await xdr.WriteAsync(FirebirdNetworkHandlingWrapper.EncryptionName, cancellationToken).ConfigureAwait(false);

            await xdr.WriteAsync(SessionKeyName, cancellationToken).ConfigureAwait(false);
        }
示例#11
0
        public void WriteTo(IXdrWriter writer)
        {
            writer.Write((int)MessageType);
            switch (MessageType)
            {
            case MessageType.Call:
                CallBody?.WriteTo(writer);
                break;

            case MessageType.Reply:
                ReplyBody?.WriteTo(writer);
                break;
            }
        }
示例#12
0
 internal ReceivedRpcCall(
     int program,
     int[] versions,
     INetworkReader networkReader,
     INetworkWriter networkWriter,
     Action <ReceivedRpcCall> receivedCallDispatcher)
 {
     this.program = program;
     this.receivedCallDispatcher = receivedCallDispatcher;
     this.lowVersion             = (uint)versions.Min();
     this.highVersion            = (uint)versions.Max();
     this.xdrReader = new XdrReader(networkReader);
     this.xdrWriter = new XdrWriter(networkWriter);
 }
示例#13
0
        public void WriteTo(IXdrWriter writer)
        {
            writer.Write((int)ReplyStatus);
            switch (ReplyStatus)
            {
            case ReplyStatus.Accepted:
                AcceptedReply?.WriteTo(writer);
                break;

            case ReplyStatus.Denied:
                RejectedReply?.WriteTo(writer);
                break;
            }
        }
示例#14
0
        public void WriteTo(IXdrWriter writer)
        {
            writer.Write((int)RejectStatus);
            switch (RejectStatus)
            {
            case RejectStatus.RpcVersionMismatch:
                MismatchInfo?.WriteTo(writer);
                break;

            case RejectStatus.AuthenticationError:
                writer.Write((int)AuthenticationStatus);
                break;
            }
        }
示例#15
0
        public void WriteTo(IXdrWriter writer)
        {
            writer.Write((int)AcceptStatus);
            switch (AcceptStatus)
            {
            case AcceptStatus.Success:
                break;

            case AcceptStatus.ProgramMismatch:
                MismatchInfo?.WriteTo(writer);
                break;

            default:
                break;
            }
        }
示例#16
0
 public RpcCall(
     int program,
     IPEndPoint remoteIpEndPoint,
     INetworkReader networkReader,
     INetworkWriter networkWriter,
     Action reestablishConnection,
     ILogger logger = default)
 {
     this.remoteIpEndPoint = remoteIpEndPoint;
     this.networkReader    = networkReader;
     this.networkWriter    = networkWriter;
     this.xdrReader        = new XdrReader(networkReader);
     this.xdrWriter        = new XdrWriter(networkWriter);
     this.rpcMessage       = new RpcMessage
     {
         Body = new Body
         {
             MessageType = MessageType.Call,
             CallBody    = new CallBody
             {
                 RpcVersion = 2,
                 Program    = (uint)program,
                 Credential = new OpaqueAuthentication
                 {
                     AuthenticationFlavor = AuthenticationFlavor.None, Body = new byte[0]
                 },
                 Verifier = new OpaqueAuthentication
                 {
                     AuthenticationFlavor = AuthenticationFlavor.None, Body = new byte[0]
                 }
             }
         }
     };
     this.logger = logger;
     this.reestablishConnection = reestablishConnection;
 }
示例#17
0
        protected void WriteRawParameter(IXdrWriter xdr, DbField field)
        {
            if (field.DbDataType != DbDataType.Null)
            {
                field.FixNull();

                switch (field.DbDataType)
                {
                case DbDataType.Char:
                    if (field.Charset.IsOctetsCharset)
                    {
                        xdr.WriteOpaque(field.DbValue.GetBinary(), field.Length);
                    }
                    else
                    {
                        var svalue = field.DbValue.GetString();

                        if ((field.Length % field.Charset.BytesPerCharacter) == 0 &&
                            svalue.Length > field.CharCount)
                        {
                            throw IscException.ForErrorCodes(new[] { IscCodes.isc_arith_except, IscCodes.isc_string_truncation });
                        }

                        xdr.WriteOpaque(field.Charset.GetBytes(svalue), field.Length);
                    }
                    break;

                case DbDataType.VarChar:
                    if (field.Charset.IsOctetsCharset)
                    {
                        xdr.WriteBuffer(field.DbValue.GetBinary());
                    }
                    else
                    {
                        var svalue = field.DbValue.GetString();

                        if ((field.Length % field.Charset.BytesPerCharacter) == 0 &&
                            svalue.Length > field.CharCount)
                        {
                            throw IscException.ForErrorCodes(new[] { IscCodes.isc_arith_except, IscCodes.isc_string_truncation });
                        }

                        xdr.WriteBuffer(field.Charset.GetBytes(svalue));
                    }
                    break;

                case DbDataType.SmallInt:
                    xdr.Write(field.DbValue.GetInt16());
                    break;

                case DbDataType.Integer:
                    xdr.Write(field.DbValue.GetInt32());
                    break;

                case DbDataType.BigInt:
                case DbDataType.Array:
                case DbDataType.Binary:
                case DbDataType.Text:
                    xdr.Write(field.DbValue.GetInt64());
                    break;

                case DbDataType.Decimal:
                case DbDataType.Numeric:
                    xdr.Write(field.DbValue.GetDecimal(), field.DataType, field.NumericScale);
                    break;

                case DbDataType.Float:
                    xdr.Write(field.DbValue.GetFloat());
                    break;

                case DbDataType.Guid:
                    xdr.Write(field.DbValue.GetGuid());
                    break;

                case DbDataType.Double:
                    xdr.Write(field.DbValue.GetDouble());
                    break;

                case DbDataType.Date:
                    xdr.Write(field.DbValue.GetDate());
                    break;

                case DbDataType.Time:
                    xdr.Write(field.DbValue.GetTime());
                    break;

                case DbDataType.TimeStamp:
                    xdr.Write(field.DbValue.GetDate());
                    xdr.Write(field.DbValue.GetTime());
                    break;

                case DbDataType.Boolean:
                    xdr.Write(field.DbValue.GetBoolean());
                    break;

                default:
                    throw IscException.ForStrParam($"Unknown SQL data type: {field.DataType}.");
                }
            }
        }
示例#18
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(Value);
 }
        protected async Task WriteRawParameter(IXdrWriter xdr, DbField field, AsyncWrappingCommonArgs async)
        {
            if (field.DbDataType != DbDataType.Null)
            {
                await field.FixNull(async).ConfigureAwait(false);

                switch (field.DbDataType)
                {
                case DbDataType.Char:
                    if (field.Charset.IsOctetsCharset)
                    {
                        await xdr.WriteOpaque(await field.DbValue.GetBinary(async).ConfigureAwait(false), field.Length, async).ConfigureAwait(false);
                    }
                    else if (field.Charset.IsNoneCharset)
                    {
                        var bvalue = field.Charset.GetBytes(await field.DbValue.GetString(async).ConfigureAwait(false));
                        if (bvalue.Length > field.Length)
                        {
                            throw IscException.ForErrorCodes(new[] { IscCodes.isc_arith_except, IscCodes.isc_string_truncation });
                        }
                        await xdr.WriteOpaque(bvalue, field.Length, async).ConfigureAwait(false);
                    }
                    else
                    {
                        var svalue = await field.DbValue.GetString(async).ConfigureAwait(false);

                        if ((field.Length % field.Charset.BytesPerCharacter) == 0 && svalue.Length > field.CharCount)
                        {
                            throw IscException.ForErrorCodes(new[] { IscCodes.isc_arith_except, IscCodes.isc_string_truncation });
                        }
                        await xdr.WriteOpaque(field.Charset.GetBytes(svalue), field.Length, async).ConfigureAwait(false);
                    }
                    break;

                case DbDataType.VarChar:
                    if (field.Charset.IsOctetsCharset)
                    {
                        await xdr.WriteBuffer(await field.DbValue.GetBinary(async).ConfigureAwait(false), async).ConfigureAwait(false);
                    }
                    else if (field.Charset.IsNoneCharset)
                    {
                        var bvalue = field.Charset.GetBytes(await field.DbValue.GetString(async).ConfigureAwait(false));
                        if (bvalue.Length > field.Length)
                        {
                            throw IscException.ForErrorCodes(new[] { IscCodes.isc_arith_except, IscCodes.isc_string_truncation });
                        }
                        await xdr.WriteBuffer(bvalue, async).ConfigureAwait(false);
                    }
                    else
                    {
                        var svalue = await field.DbValue.GetString(async).ConfigureAwait(false);

                        if ((field.Length % field.Charset.BytesPerCharacter) == 0 && svalue.Length > field.CharCount)
                        {
                            throw IscException.ForErrorCodes(new[] { IscCodes.isc_arith_except, IscCodes.isc_string_truncation });
                        }
                        await xdr.WriteBuffer(field.Charset.GetBytes(svalue), async).ConfigureAwait(false);
                    }
                    break;

                case DbDataType.SmallInt:
                    await xdr.Write(await field.DbValue.GetInt16(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Integer:
                    await xdr.Write(await field.DbValue.GetInt32(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.BigInt:
                case DbDataType.Array:
                case DbDataType.Binary:
                case DbDataType.Text:
                    await xdr.Write(await field.DbValue.GetInt64(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Decimal:
                case DbDataType.Numeric:
                    await xdr.Write(await field.DbValue.GetDecimal(async).ConfigureAwait(false), field.DataType, field.NumericScale, async).ConfigureAwait(false);

                    break;

                case DbDataType.Float:
                    await xdr.Write(await field.DbValue.GetFloat(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Guid:
                    await xdr.Write(await field.DbValue.GetGuid(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Double:
                    await xdr.Write(await field.DbValue.GetDouble(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Date:
                    await xdr.Write(await field.DbValue.GetDate(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Time:
                    await xdr.Write(await field.DbValue.GetTime(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.TimeStamp:
                    await xdr.Write(await field.DbValue.GetDate(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTime(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.Boolean:
                    await xdr.Write(await field.DbValue.GetBoolean(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.TimeStampTZ:
                    await xdr.Write(await field.DbValue.GetDate(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTime(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTimeZoneId(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.TimeStampTZEx:
                    await xdr.Write(await field.DbValue.GetDate(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTime(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTimeZoneId(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write((short)0, async).ConfigureAwait(false);

                    break;

                case DbDataType.TimeTZ:
                    await xdr.Write(await field.DbValue.GetTime(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTimeZoneId(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                case DbDataType.TimeTZEx:
                    await xdr.Write(await field.DbValue.GetTime(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write(await field.DbValue.GetTimeZoneId(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    await xdr.Write((short)0, async).ConfigureAwait(false);

                    break;

                case DbDataType.Dec16:
                    await xdr.Write(await field.DbValue.GetDec16(async).ConfigureAwait(false), 16, async).ConfigureAwait(false);

                    break;

                case DbDataType.Dec34:
                    await xdr.Write(await field.DbValue.GetDec34(async).ConfigureAwait(false), 34, async).ConfigureAwait(false);

                    break;

                case DbDataType.Int128:
                    await xdr.Write(await field.DbValue.GetInt128(async).ConfigureAwait(false), async).ConfigureAwait(false);

                    break;

                default:
                    throw IscException.ForStrParam($"Unknown SQL data type: {field.DataType}.");
                }
            }
        }
示例#20
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(Xid);
     Body?.WriteTo(writer);
 }
示例#21
0
 public void WriteTo(IXdrWriter writer)
 {
     Verifier?.WriteTo(writer);
     ReplyData?.WriteTo(writer);
 }
示例#22
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write((int)AuthenticationFlavor);
     writer.WriteVariableLengthOpaque(Body);
 }
示例#23
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(Low);
     writer.Write(High);
 }
示例#24
0
 public void WriteTo(IXdrWriter writer)
 {
 }
示例#25
0
 public void WriteTo(IXdrWriter writer)
 {
     writer.Write(Port);
     writer.WriteVariableLengthOpaque(Result);
 }
示例#26
0
 public TestXdr()
 {
     this.stubNetwork = new StubNetwork(65536, 65536);
     this.reader      = new XdrReader(this.stubNetwork);
     this.writer      = new XdrWriter(this.stubNetwork);
 }