internal void SkipLongBytes(ulong num, TdsParserStateObject stateObj) { int len = 0; while (num > 0L) { len = (num > 0x7fffffffL) ? 0x7fffffff : ((int) num); stateObj.ReadByteArray(null, 0, len); num -= len; } }
private void ReadTwoBinaryFields(SqlEnvChange env, TdsParserStateObject stateObj) { env.newLength = stateObj.ReadByte(); env.newBinValue = new byte[env.newLength]; stateObj.ReadByteArray(env.newBinValue, 0, env.newLength); env.oldLength = stateObj.ReadByte(); env.oldBinValue = new byte[env.oldLength]; stateObj.ReadByteArray(env.oldBinValue, 0, env.oldLength); env.length = (3 + env.newLength) + env.oldLength; }
public void SkipBytes(int num, TdsParserStateObject stateObj) { stateObj.ReadByteArray(null, 0, num); }
internal void ReadSqlValueInternal(SqlBuffer value, byte tdsType, int typeId, int length, TdsParserStateObject stateObj) { int num4; switch (tdsType) { case 0x7f: goto Label_011A; case 0xa5: case 0xad: case 0x22: case 0x25: case 0x2d: { byte[] buff = new byte[length]; stateObj.ReadByteArray(buff, 0, length); value.SqlBinary = new SqlBinary(buff, true); return; } case 0x6d: if (length != 4) { goto Label_013B; } goto Label_012D; case 110: if (length == 4) { goto Label_0173; } goto Label_014E; case 0x6f: if (length != 4) { goto Label_01A2; } goto Label_0187; case 0x7a: goto Label_0173; case 0x62: this.ReadSqlVariant(value, length, stateObj); return; case 0x68: case 50: value.Boolean = stateObj.ReadByte() != 0; return; case 0x23: case 0x2e: case 0x2f: case 0x31: case 0x33: case 0x35: case 0x36: case 0x37: case 0x39: return; case 0x24: { byte[] buffer2 = new byte[length]; stateObj.ReadByteArray(buffer2, 0, length); value.SqlGuid = new SqlGuid(buffer2, true); return; } case 0x26: if (length == 1) { break; } if (length == 2) { goto Label_00FE; } if (length != 4) { goto Label_011A; } goto Label_010C; case 0x30: break; case 0x34: goto Label_00FE; case 0x38: goto Label_010C; case 0x3a: goto Label_0187; case 0x3b: goto Label_012D; case 60: goto Label_014E; case 0x3d: goto Label_01A2; case 0x3e: goto Label_013B; default: return; } value.Byte = stateObj.ReadByte(); return; Label_00FE: value.Int16 = stateObj.ReadInt16(); return; Label_010C: value.Int32 = stateObj.ReadInt32(); return; Label_011A: value.Int64 = stateObj.ReadInt64(); return; Label_012D: value.Single = stateObj.ReadSingle(); return; Label_013B: value.Double = stateObj.ReadDouble(); return; Label_014E: num4 = stateObj.ReadInt32(); uint num3 = stateObj.ReadUInt32(); long num2 = (num4 << 0x20) + num3; value.SetToMoney(num2); return; Label_0173: value.SetToMoney((long) stateObj.ReadInt32()); return; Label_0187: value.SetToDateTime(stateObj.ReadUInt16(), stateObj.ReadUInt16() * SqlDateTime.SQLTicksPerMinute); return; Label_01A2: value.SetToDateTime(stateObj.ReadInt32(), (int) stateObj.ReadUInt32()); }
internal void ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, int length, TdsParserStateObject stateObj) { if (md.metaType.IsPlp) { length = 0x7fffffff; } switch (md.tdsType) { case 0x22: case 0x25: case 0x2d: case 240: case 0xa5: case 0xad: { byte[] buff = null; if (md.metaType.IsPlp) { stateObj.ReadPlpBytes(ref buff, 0, length); } else { buff = new byte[length]; stateObj.ReadByteArray(buff, 0, length); } value.SqlBinary = new SqlBinary(buff, true); return; } case 0x23: case 0x27: case 0x2f: case 0x63: case 0xef: case 0xe7: case 0xa7: case 0xaf: this.ReadSqlStringValue(value, md.tdsType, length, md.encoding, md.metaType.IsPlp, stateObj); return; case 40: case 0x29: case 0x2a: case 0x2b: this.ReadSqlDateTime(value, md.tdsType, length, md.scale, stateObj); return; case 0x6a: case 0x6c: this.ReadSqlDecimal(value, length, md.precision, md.scale, stateObj); return; case 0xf1: { SqlCachedBuffer buffer2 = new SqlCachedBuffer(md, this, stateObj); value.SqlCachedBuffer = buffer2; return; } } this.ReadSqlValueInternal(value, md.tdsType, md.metaType.TypeId, length, stateObj); }
private void ReadSqlDateTime(SqlBuffer value, byte tdsType, int length, byte scale, TdsParserStateObject stateObj) { stateObj.ReadByteArray(this.datetimeBuffer, 0, length); switch (tdsType) { case 40: value.SetToDate(this.datetimeBuffer); return; case 0x29: value.SetToTime(this.datetimeBuffer, length, scale); return; case 0x2a: value.SetToDateTime2(this.datetimeBuffer, length, scale); return; case 0x2b: value.SetToDateTimeOffset(this.datetimeBuffer, length, scale); return; } }
private SqlLoginAck ProcessLoginAck(TdsParserStateObject stateObj) { SqlLoginAck ack = new SqlLoginAck(); this.SkipBytes(1, stateObj); byte[] buff = new byte[4]; stateObj.ReadByteArray(buff, 0, buff.Length); uint num3 = (uint) ((((((buff[0] << 8) | buff[1]) << 8) | buff[2]) << 8) | buff[3]); uint num6 = num3 & 0xff00ffff; uint num2 = (num3 >> 0x10) & 0xff; switch (num6) { case 0x72000002: if (num2 != 9) { throw SQL.InvalidTDSVersion(); } this._isYukon = true; break; case 0x73000003: if (num2 != 10) { throw SQL.InvalidTDSVersion(); } this._isKatmai = true; break; case 0x7000000: switch (num2) { case 1: this._isShiloh = true; goto Label_00DF; } throw SQL.InvalidTDSVersion(); case 0x71000001: if (num2 != 0) { throw SQL.InvalidTDSVersion(); } this._isShilohSP1 = true; break; default: throw SQL.InvalidTDSVersion(); } Label_00DF: this._isYukon |= this._isKatmai; this._isShilohSP1 |= this._isYukon; this._isShiloh |= this._isShilohSP1; ack.isVersion8 = this._isShiloh; stateObj._outBytesUsed = stateObj._outputHeaderLen; byte length = stateObj.ReadByte(); ack.programName = stateObj.ReadString(length); ack.majorVersion = stateObj.ReadByte(); ack.minorVersion = stateObj.ReadByte(); ack.buildNum = (short) ((stateObj.ReadByte() << 8) + stateObj.ReadByte()); this._state = TdsParserState.OpenLoggedIn; if ((this._isYukon && this._fAsync) && this._fMARS) { this._resetConnectionEvent = new AutoResetEvent(true); } if (this._connHandler.ConnectionOptions.UserInstance && ADP.IsEmpty(this._connHandler.InstanceName)) { this.Errors.Add(new SqlError(0, 0, 20, this.Server, SQLMessage.UserInstanceFailure(), "", 0)); this.ThrowExceptionAndWarning(); } return ack; }
private SqlEnvChange[] ProcessEnvChange(int tokenLength, TdsParserStateObject stateObj) { int num4 = 0; int index = 0; SqlEnvChange[] changeArray = new SqlEnvChange[3]; while (tokenLength > num4) { int num3; ushort num5; if (index >= changeArray.Length) { SqlEnvChange[] changeArray2 = new SqlEnvChange[changeArray.Length + 3]; for (int i = 0; i < changeArray.Length; i++) { changeArray2[i] = changeArray[i]; } changeArray = changeArray2; } SqlEnvChange env = new SqlEnvChange { type = stateObj.ReadByte() }; changeArray[index] = env; index++; switch (env.type) { case 1: case 2: this.ReadTwoStringFields(env, stateObj); goto Label_03E0; case 3: this.ReadTwoStringFields(env, stateObj); if (!(env.newValue == "iso_1")) { break; } this._defaultCodePage = 0x4e4; this._defaultEncoding = Encoding.GetEncoding(this._defaultCodePage); goto Label_03E0; case 4: { this.ReadTwoStringFields(env, stateObj); int size = int.Parse(env.newValue, NumberStyles.Integer, CultureInfo.InvariantCulture); if (this._physicalStateObj.SetPacketSize(size)) { this._physicalStateObj._sniPacket.Dispose(); uint qInfo = (uint) size; SNINativeMethodWrapper.SNISetInfo(this._physicalStateObj.Handle, SNINativeMethodWrapper.QTypes.SNI_QUERY_CONN_BUFSIZE, ref qInfo); this._physicalStateObj._sniPacket = new SNIPacket(this._physicalStateObj.Handle); } goto Label_03E0; } case 5: this.ReadTwoStringFields(env, stateObj); this._defaultLCID = int.Parse(env.newValue, NumberStyles.Integer, CultureInfo.InvariantCulture); goto Label_03E0; case 6: this.ReadTwoStringFields(env, stateObj); goto Label_03E0; case 7: env.newLength = stateObj.ReadByte(); if (env.newLength == 5) { env.newCollation = this.ProcessCollation(stateObj); this._defaultCollation = env.newCollation; int codePage = this.GetCodePage(env.newCollation, stateObj); if (codePage != this._defaultCodePage) { this._defaultCodePage = codePage; this._defaultEncoding = Encoding.GetEncoding(this._defaultCodePage); } this._defaultLCID = env.newCollation.LCID; } env.oldLength = stateObj.ReadByte(); if (env.oldLength == 5) { env.oldCollation = this.ProcessCollation(stateObj); } env.length = (3 + env.newLength) + env.oldLength; goto Label_03E0; case 8: case 9: case 10: case 11: case 12: case 0x11: env.newLength = stateObj.ReadByte(); if (env.newLength <= 0) { goto Label_02B0; } env.newLongValue = stateObj.ReadInt64(); goto Label_02B8; case 13: this.ReadTwoStringFields(env, stateObj); goto Label_03E0; case 15: env.newLength = stateObj.ReadInt32(); env.newBinValue = new byte[env.newLength]; stateObj.ReadByteArray(env.newBinValue, 0, env.newLength); env.oldLength = stateObj.ReadByte(); env.length = 5 + env.newLength; goto Label_03E0; case 0x10: case 0x12: this.ReadTwoBinaryFields(env, stateObj); goto Label_03E0; case 0x13: this.ReadTwoStringFields(env, stateObj); goto Label_03E0; case 20: { env.newLength = stateObj.ReadUInt16(); byte protocol = stateObj.ReadByte(); ushort port = stateObj.ReadUInt16(); ushort length = stateObj.ReadUInt16(); string servername = stateObj.ReadString(length); env.newRoutingInfo = new RoutingInfo(protocol, port, servername); num5 = stateObj.ReadUInt16(); num3 = 0; goto Label_03C9; } default: goto Label_03E0; } string s = env.newValue.Substring(2); this._defaultCodePage = int.Parse(s, NumberStyles.Integer, CultureInfo.InvariantCulture); this._defaultEncoding = Encoding.GetEncoding(this._defaultCodePage); goto Label_03E0; Label_02B0: env.newLongValue = 0L; Label_02B8: env.oldLength = stateObj.ReadByte(); if (env.oldLength > 0) { env.oldLongValue = stateObj.ReadInt64(); } else { env.oldLongValue = 0L; } env.length = (3 + env.newLength) + env.oldLength; goto Label_03E0; Label_03BC: stateObj.ReadByte(); num3++; Label_03C9: if (num3 < num5) { goto Label_03BC; } env.length = (env.newLength + num5) + 5; Label_03E0: num4 += env.length; } return changeArray; }