📄 filedatapacket.java
字号:
// 处理文件传输完毕包
private void parseTransferFinished(ByteBuffer in) {
}
// 解析heart beat回复包
private void parseHeartBeatAck(ByteBuffer in) {
// heart beat序号
heartBeatSequence = in.getChar();
}
// 解析heart beat包
private void parseHeartBeat(ByteBuffer in) {
// heart beat 序号
heartBeatSequence = in.getChar();
}
// 解析文件结束回复包
private void parseFileEOFAck(ByteBuffer in) {
}
// 解析文件数据信息回复包
private void parseDataInfoAck(ByteBuffer in) {
// 之前已经收到的最大分片序号
fragmentIndex = in.getInt();
}
// 解析文件基本信息回复包
private void parseBasicInfoAck(ByteBuffer in) {
}
// 解析文件数据信息包
private void parseDataInfo(ByteBuffer in) {
// 已经发送的分片最大序号
fragmentIndex = in.getInt();
// 分片偏移
fragmentOffset = in.getInt();
// 分片长度
fragmentLength = in.getChar();
// 分片内容
fragmentData = new byte[fragmentLength];
in.get(fragmentData);
}
// 解析文件基本信息包
private void parseBasicInfo(ByteBuffer in) {
// 文件长度
fileSize = in.getInt();
// 分片数
fragments = in.getInt();
// 分片长度
fragmentMaxSize = in.getInt();
// 文件MD5
fileMD5 = new byte[16];
in.get(fileMD5);
// 文件名MD5
fileNameMD5 = new byte[16];
in.get(fileNameMD5);
// 文件名长度
int len = in.getChar();
// 8个未知字节,全0
in.getLong();
// 文件名
byte[] b = new byte[len];
in.get(b);
fileName = Utils.getString(b, QQ.QQ_CHARSET_DEFAULT);
}
/**
* @return Returns the fileSize.
*/
public int getFileSize() {
return fileSize;
}
/**
* @param fileSize The fileSize to set.
*/
public void setFileSize(int fileSize) {
this.fileSize = fileSize;
fragments = fileSize / watcher.getMaxFragmentSize() + 1;
}
/**
* @return Returns the fileName.
*/
public String getFileName() {
return fileName;
}
/**
* @param fileName The fileName to set.
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* @return Returns the fragment.
*/
public int getPacketIndex() {
return packetIndex;
}
/**
* @param packetIndex The fragment to set.
*/
public void setPacketIndex(int packetIndex) {
this.packetIndex = packetIndex;
}
/**
* @return Returns the fragmentOffset.
*/
public int getFragmentOffset() {
return fragmentOffset;
}
/**
* @param fragmentOffset The fragmentOffset to set.
*/
public void setFragmentOffset(int fragmentOffset) {
this.fragmentOffset = fragmentOffset;
}
/**
* @return Returns the fragmentSize.
*/
public int getFragmentLength() {
return fragmentLength;
}
/**
* @param fragmentSize The fragmentSize to set.
*/
public void setFragmentLength(int fragmentSize) {
this.fragmentLength = fragmentSize;
}
/**
* @return Returns the framgentData.
*/
public byte[] getFragmentData() {
return fragmentData;
}
/**
* @param framgentData The framgentData to set.
*/
public void setFragmentData(byte[] framgentData) {
this.fragmentData = framgentData;
}
/**
* @return Returns the infoType.
*/
public byte getInfoType() {
return infoType;
}
/**
* @param infoType The infoType to set.
*/
public void setInfoType(byte infoType) {
this.infoType = infoType;
}
/**
* @return Returns the fragments.
*/
public int getFragments() {
return fragments;
}
/**
* @return Returns the fragmentReceived.
*/
public int getFragmentIndex() {
return fragmentIndex;
}
/**
* @param fragmentIndex The fragmentReceived to set.
*/
public void setFragmentIndex(int fragmentIndex) {
this.fragmentIndex = fragmentIndex;
}
/**
* @return Returns the heartBeatSequence.
*/
public char getHeartBeatSequence() {
return heartBeatSequence;
}
/**
* @param heartBeatSequence The heartBeatSequence to set.
*/
public void setHeartBeatSequence(char heartBeatSequence) {
this.heartBeatSequence = heartBeatSequence;
}
/**
* @return Returns the firstMD5.
*/
public byte[] getFileMD5() {
return fileMD5;
}
/**
* @param firstMD5 The firstMD5 to set.
*/
public void setFileMD5(byte[] firstMD5) {
this.fileMD5 = firstMD5;
}
/**
* @return Returns the fragmentMaxSize.
*/
public int getFragmentMaxSize() {
return fragmentMaxSize;
}
/**
* @param fragmentMaxSize The fragmentMaxSize to set.
*/
public void setFragmentMaxSize(int fragmentMaxSize) {
this.fragmentMaxSize = fragmentMaxSize;
}
/**
* @return Returns the secondMD5.
*/
public byte[] getFileNameMD5() {
return fileNameMD5;
}
/**
* @param secondMD5 The secondMD5 to set.
*/
public void setFileNameMD5(byte[] secondMD5) {
this.fileNameMD5 = secondMD5;
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.filetrans.FilePacket#initFixedContent()
*/
protected void initFixedContent() {
tag = QQ.QQ_FILE_DATA_PACKET_TAG;
source = QQ.QQ_CLIENT;
refreshKey();
sender = watcher.getMyQQ();
receiver = watcher.getHisQQ();
}
/**
* @return Returns the command.
*/
public char getCommand() {
return command;
}
/**
* @param command The command to set.
*/
public void setCommand(char command) {
this.command = command;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
if(command == QQ.QQ_FILE_CMD_FILE_OP || command == QQ.QQ_FILE_CMD_FILE_OP_ACK)
return (command << 24) | (infoType << 16) | packetIndex;
else
return (command << 24) | heartBeatSequence;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj) {
if(obj instanceof FileDataPacket) {
FileDataPacket packet = (FileDataPacket)obj;
if(packet.command == QQ.QQ_FILE_CMD_FILE_OP || packet.command == QQ.QQ_FILE_CMD_FILE_OP_ACK)
return packet.command == command && packet.infoType == infoType && packet.packetIndex == packetIndex;
else
return packet.command == command && packet.heartBeatSequence == heartBeatSequence;
} else
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -