Ejemplo n.º 1
0
        private void Login()
        {
            byte[]      loginPacket = new byte[ProtoHeader.kHeadLen + kUserNameLen + kPwdLen];
            ProtoHeader proHdr      = new ProtoHeader(loginPacket);

            Array.Clear(loginPacket, 0, (loginPacket.Length));

            byte[] nameArray = System.Text.Encoding.Default.GetBytes(UserName);
            byte[] pwdArray  = System.Text.Encoding.Default.GetBytes(Password);

            if (nameArray.Length >= kUserNameLen)
            {
                throw new PDBException(PDBErrorCode.PdbE_INVALID_USER_NAME, "非法的用户名:用户名不合法");
            }
            for (int i = 0; i < nameArray.Length; i++)
            {
                loginPacket[ProtoHeader.kHeadLen + i] = nameArray[i];
            }
            UInt64 pwd64 = CRC.Crc64(pwdArray);
            UInt32 pwd32 = (UInt32)(pwd64 & 0xFFFFFFFF);

            IntTool.PutUint32(loginPacket, (ProtoHeader.kHeadLen + kUserNameLen), pwd32);

            UInt32 bodyCrc = CRC.Crc32(loginPacket, ProtoHeader.kHeadLen, (kUserNameLen + kPwdLen));

            proHdr.SetVersion(ProtoHeader.kProtoVersion);
            proHdr.SetMethod(ProtoHeader.MethodCmdLoginReq);
            proHdr.SetBodyLen((uint)(kUserNameLen + kPwdLen));
            proHdr.SetReturnVal(0);
            proHdr.SetRecordCnt((uint)0);
            proHdr.SetBodyCrc(bodyCrc);
            proHdr.SetHeadCrc();

            Request(loginPacket);

            byte[]      resBuf = Recv();
            ProtoHeader resHdr = new ProtoHeader(resBuf);

            if (resHdr.GetMethod() != ProtoHeader.MethodCmdLoginRep)
            {
                throw new PDBException(PDBErrorCode.PdbE_PACKET_ERROR);
            }
            if (resHdr.GetReturnVal() != 0)
            {
                throw new PDBException(PDBErrorCode.PdbE_NET_ERROR, "网络错误:登录失败," + resHdr.GetReturnVal().ToString());
            }
        }
Ejemplo n.º 2
0
 public void SetHeadCrc()
 {
     IntTool.PutUint32(headProto, kHeadHeadCrcOffset, CRC.Crc32(headProto, 0, 60));
 }
Ejemplo n.º 3
0
 public void SetBodyCrc(UInt32 bodyCrc)
 {
     IntTool.PutUint32(headProto, kHeadBodyCrcOffset, bodyCrc);
 }
Ejemplo n.º 4
0
 public void SetErrPos(UInt32 errPos)
 {
     IntTool.PutUint32(headProto, kHeadErrPosOffset, errPos);
 }
Ejemplo n.º 5
0
 public void SetRecordCnt(UInt32 recordCnt)
 {
     IntTool.PutUint32(headProto, kHeadRecordCntOffset, recordCnt);
 }
Ejemplo n.º 6
0
 public void SetFieldCnt(UInt32 fieldCnt)
 {
     IntTool.PutUint32(headProto, kHeadFieldCntOffset, fieldCnt);
 }
Ejemplo n.º 7
0
 public void SetReturnVal(UInt32 retVal)
 {
     IntTool.PutUint32(headProto, kHeadRetValOffset, retVal);
 }
Ejemplo n.º 8
0
 public void SetBodyLen(UInt32 bodyLen)
 {
     IntTool.PutUint32(headProto, kHeadBodyLenOffset, bodyLen);
 }
Ejemplo n.º 9
0
 public void SetMethod(UInt32 methodId)
 {
     IntTool.PutUint32(headProto, kHeadMethodOffset, methodId);
 }
Ejemplo n.º 10
0
 public void SetVersion(UInt32 version)
 {
     IntTool.PutUint32(headProto, kHeadVerOffset, version);
 }