JML

net.sf.jqql.packets
Class DiskInPacket

java.lang.Object
  extended by net.sf.jqql.packets.Packet
      extended by net.sf.jqql.packets.InPacket
          extended by net.sf.jqql.packets.DiskInPacket
Direct Known Subclasses:
ApplyReplyPacket, AuthenticateReplyPacket, BeginSessionPacket, CreateReplyPacket, DeleteReplyPacket, DiskInPacketFragment, DownloadReplyPacket, FinalizeReplyPacket, GetServerListReplyPacket, GetSharedDiskReplyPacket, GetShareListReplyPacket, GetSizeReplyPacket, ListMyDiskDirReplyPacket, ListSharedDiskDirReplyPacket, MoveReplyPacket, PasswordOpReplyPacket, PrepareReplyPacket, RenameReplyPacket, SetShareListReplyPacket, UnknownDiskInPacket, UploadFileReplyPacket

public abstract class DiskInPacket
extends InPacket

]
 network disk protocol family input packet
 1. packet length, 4 byte, exclusive
 2. version sign, 2 byte
 Note: although part2 now is named as version sign, it isn't very sure, in faith is this meaning.
 for input packet, its version sign may be different from sever sign, or be same. and two instance since have different
 meaning. for now, suppose this field is version sign, then while it is server sign, sign notify client to session.
 while it is as same as output packet sign, it means reply packet.
 3. unknown 2 byte
 4. command 2 byte
 5. reply code 4 byte
 6. reply message length, 4 byte
 7. reply message
 8. unknown content
 Note: part5-8 in all is 72 byte, (8)length = 72 - (5,6,7)length
 9. packet body

 网络硬盘协议族输入包
 1. 包长,4字节,exclusive
 2. 版本标识,2字节
 Note: 虽然2部分目前起名叫做版本标识,但是不能很肯定,确实就是这个意思,对于输入包来说,其版本标识
 既可能和输出包不一样,也可能一样,而且两种情况似乎有不同的含义。对于目前来说,假设这个字段是版本标识,
 则当其为服务器端标识时,标识通知客户端开始会话。当其和输出包标志一致时,表示回复包
 3. 未知的2字节
 4. 命令,2字节
 5. 回复码,4字节
 6. 回复消息长度,4字节
 7. 回复消息
 8. 未知内容
 Note: 5-8部分共72字节,8部分长度为72 - (5,6,7)长度
 9. 包体
 
 Note: 此协议族包体不加密,并且只用于TCP连接
 

Author:
luma

Field Summary
 int replyCode
           
 String replyMessage
           
 
Fields inherited from class net.sf.jqql.packets.Packet
bodyBuf, bodyDecrypted, command, crypter, ds, duplicated, header, log, sequence, source, user
 
Constructor Summary
DiskInPacket(ByteBuffer buf, int length, QQUser user)
           
DiskInPacket(char command, QQUser user)
           
 
Method Summary
protected  byte[] decryptBody(byte[] body, int offset, int length)
          decrypt packet body 解密包体
protected  byte[] encryptBody(byte[] b, int offset, int length)
          encrypt packet body 加密包体
 boolean equals(Object obj)
           
protected  byte[] getBodyBytes(ByteBuffer buf, int length)
          get byte array of packet body 得到包体的字节数组
protected  int getCryptographStart()
           
 int getFamily()
           
protected  int getHeadLength()
           
protected  int getLength(int bodyLength)
          get total length of UDP form packet, rule out TCP form 得到UDP形式包的总长度,不考虑TCP形式
protected  int getTailLength()
           
 int hashCode()
          make up sequence number and command as hash code.
protected  void parseHeader(ByteBuffer buf)
          parse packet header from current position of buf 从buf的当前位置解析包头
protected  void parseTail(ByteBuffer buf)
          parse packet tail from current position of buf 从buf的当前未知解析包尾
protected  void putBody(ByteBuffer buf)
          initialize packet body 初始化包体
protected  void putHead(ByteBuffer buf)
          change packet header to byte stream, and write into appointed ByteBuffer object.
protected  void putTail(ByteBuffer buf)
          change packet tail to byte stream, and write into appointed ByteBuffer object.
 
Methods inherited from class net.sf.jqql.packets.InPacket
validateHeader
 
Methods inherited from class net.sf.jqql.packets.Packet
dump, getCommand, getHeader, getPacketName, getSequence, getSource, hash, isDuplicated, parseBody, setDuplicated, setHeader, setSequence
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

replyCode

public int replyCode

replyMessage

public String replyMessage
Constructor Detail

DiskInPacket

public DiskInPacket(ByteBuffer buf,
                    int length,
                    QQUser user)
             throws PacketParseException
Throws:
PacketParseException

DiskInPacket

public DiskInPacket(char command,
                    QQUser user)
Method Detail

getLength

protected int getLength(int bodyLength)
Description copied from class: Packet
get total length of UDP form packet, rule out TCP form 得到UDP形式包的总长度,不考虑TCP形式

Specified by:
getLength in class Packet
Parameters:
bodyLength - packet body length 包体长度
Returns:
packet length 包长度

getHeadLength

protected int getHeadLength()
Specified by:
getHeadLength in class Packet
Returns:
packet header length 包头长度

getTailLength

protected int getTailLength()
Specified by:
getTailLength in class Packet
Returns:
packet tail length 包尾长度

putHead

protected void putHead(ByteBuffer buf)
Description copied from class: Packet
change packet header to byte stream, and write into appointed ByteBuffer object. 将包头部转化为字节流, 写入指定的ByteBuffer对象.

Specified by:
putHead in class Packet
Parameters:
buf - ByteBuffer object whicn packet need to write into 写入的ByteBuffer对象.

putBody

protected void putBody(ByteBuffer buf)
Description copied from class: Packet
initialize packet body 初始化包体

Specified by:
putBody in class Packet
Parameters:
buf - ByteBuffer

getBodyBytes

protected byte[] getBodyBytes(ByteBuffer buf,
                              int length)
Description copied from class: Packet
get byte array of packet body 得到包体的字节数组

Specified by:
getBodyBytes in class Packet
Parameters:
buf - ByteBuffer
length - packet total length 包总长度
Returns:
byte array of packet body 包体字节数组

getFamily

public int getFamily()
Specified by:
getFamily in class Packet
Returns:
sign this packet belong which protocol family 标识这个包属于哪个协议族

putTail

protected void putTail(ByteBuffer buf)
Description copied from class: Packet
change packet tail to byte stream, and write into appointed ByteBuffer object. 将包尾部转化为字节流, 写入指定的ByteBuffer对象.

Specified by:
putTail in class Packet
Parameters:
buf - ByteBuffer object whicn packet need to write into 写入的ByteBuffer对象.

encryptBody

protected byte[] encryptBody(byte[] b,
                             int offset,
                             int length)
Description copied from class: Packet
encrypt packet body 加密包体

Specified by:
encryptBody in class Packet
Parameters:
b - unencrypt byte array 未加密的字节数组
offset - offset of packet body begin 包体开始的偏移
length - packet body length 包体长度
Returns:
encrypted packet body 加密的包体

decryptBody

protected byte[] decryptBody(byte[] body,
                             int offset,
                             int length)
Description copied from class: Packet
decrypt packet body 解密包体

Specified by:
decryptBody in class Packet
Parameters:
body - byte array of packet body 包体字节数组
offset - offset of packet body begin 包体开始偏移
length - packet length 包体长度
Returns:
解密的包体字节数组 // byte array of decrypted packet body

getCryptographStart

protected int getCryptographStart()
Specified by:
getCryptographStart in class Packet
Returns:
start position of cryptograph, relative to the first byte of packet body. if this packet is unknown packet, return -1, this method only available to some protocol family. 密文的起始位置,这个位置是相对于包体的第一个字节来说的,如果这个包是未知包, 返回-1,这个方法只对某些协议族有意义

parseHeader

protected void parseHeader(ByteBuffer buf)
                    throws PacketParseException
Description copied from class: Packet
parse packet header from current position of buf 从buf的当前位置解析包头

Specified by:
parseHeader in class Packet
Parameters:
buf - ByteBuffer
Throws:
PacketParseException - if parse error 如果解析出错

parseTail

protected void parseTail(ByteBuffer buf)
                  throws PacketParseException
Description copied from class: Packet
parse packet tail from current position of buf 从buf的当前未知解析包尾

Specified by:
parseTail in class Packet
Parameters:
buf - ByteBuffer
Throws:
PacketParseException - if parse error 如果解析出错

hashCode

public int hashCode()
Description copied from class: Packet
make up sequence number and command as hash code. for avoid different packet have the same command, header join in 把序列号和命令拼起来作为哈希码. 为了避免不同header的包有相同的命令,Header也参与进来

Overrides:
hashCode in class Packet

equals

public boolean equals(Object obj)
Overrides:
equals in class Packet

JML