net.sf.jqql.packets.out
Class SendSMSPacket
java.lang.Object
net.sf.jqql.packets.Packet
net.sf.jqql.packets.OutPacket
net.sf.jqql.packets.BasicOutPacket
net.sf.jqql.packets.out.SendSMSPacket
public class SendSMSPacket
- extends BasicOutPacket
send SMS request packet, format:
1. head
2. message sequence, 2 byte, begin with 0, used in spliting sending
3. unknown 2 bte, all 0
4. unknown 4 byte, all 0
5. sender's nick name, max length 13 byte, not long enough, fill 0 in the back.
6. unknown 1 byte, 0x01
7. if it's handsfree SMS, 0x20, other situation, 0x01
8. SMS content type, 1 byte
9. SMS content type number 4 byte
10. unknown 1 byte, 0x01
11. receiver's mobile count, 1 byte
12. mobile, 18 byte, not long enough, fill 0
13. unknown 2 byte
14. unknown 1 byte
15. If there are more mobiles, repeat part 12-14
Notice: part 12 -15 exist when part 11 is not 0
16. receiver's QQ number count, 1 byte
17. QQ number, 4 byte
18. If there more more QQ number, repeate part 17
Notice, part 17-18 exist when part 16 is not 0
19. unknown 1 byte, often 0x03
20. SMS byte length, 2 byte, If part 8 is not 0, this part is 0x0000
Notice, QQ SMS length plus sender nick name length should not exceed 58 chars, so we can ignore what QQ does. we
can send 86 byte.
å‘é€çŸæ¶ˆæ¯çš„è¯·æ±‚åŒ…ï¼Œæ ¼å¼ä¸ºï¼š
1. 包头
2. 消æ¯åºå·ï¼Œ2å—节,从0开始,用在拆分å‘é€ä¸
3. 未知2å—节,全0
4. 未知4å—节,全0
5. å‘é€è€…昵称,最长13个å—节,如果ä¸è¶³ï¼Œåˆ™åŽé¢ä¸º0
6. 未知的1å—节,0x01
7. å¦‚æžœæ˜¯å…æçŸä¿¡ï¼Œ0x20,其他情况,0x00
8. çŸæ¶ˆæ¯å†…容类型,1å—节
9. çŸæ¶ˆæ¯å†…容类型编å·ï¼Œ4å—节
10. 未知的1å—节,0x01
11. 接å—者ä¸çš„æ‰‹æœºå·ç 个数,1å—节
12. 手机å·ç ,18å—节,ä¸è¶³çš„为0
13. 未知的2å—节
14. 未知的1å—节
15. 如果有更多手机å·ï¼Œé‡å¤12-14部分
注:12-15部分åªåœ¨11部分ä¸ä¸º0æ—¶å˜åœ¨
16. 接å—者ä¸çš„QQå·ç 个数,1å—节
17. QQå·ç ,4å—节
18. 如果有更多QQå·ç ,é‡å¤17部分
注:17-18éƒ¨åˆ†åªæœ‰åœ¨16部分ä¸ä¸º0æ—¶å˜åœ¨
19. 未知1å—节,一般是0x03
20. çŸæ¶ˆæ¯å—节长度,2å—节,如果8部分ä¸ä¸º0,则æ¤éƒ¨åˆ†0x0000
注:QQçš„çŸä¿¡å’Œå‘é€è€…æ˜µç§°åŠ èµ·æ¥ä¸èƒ½è¶…过58个å—符(英文和汉å—都算是一个å—符),
昵称最长是13å—节,所以最çŸä¹Ÿåº”该能å‘43个å—符,所以å¯ä»¥è€ƒè™‘䏿Œ‰ç…§QQçš„åšæ³•,
我们å¯ä»¥å°½é‡å‘满86个å—节。
21. SMS byte array, message format:
if it's normal message, it's normal byte array.
If it has flashing char, use 0x01 to surround the bytes.
If the message is fragment of a long message, add a part of conent in front of message byte array. The content is:
[message sequence in string form, begin with 1] [0x2F] [ total message count in string form][0x0A]
Notice: part 21 exist only when part 20 is not 0.
22. tail
21. çŸæ¶ˆæ¯å—节数组,消æ¯çš„æ ¼å¼å¦‚下:
如果是普通的消æ¯ï¼Œåˆ™å°±æ˜¯å¹³å¸¸çš„å—节数组而已
如果有些å—符有闪çƒï¼Œåˆ™é‚£äº›å—节è¦ç”¨0x01括起æ¥
å¦‚æžœè¿™æ¡æ¶ˆæ¯æ˜¯ä¸€æ¡é•¿æ¶ˆæ¯æ‹†åˆ†è€Œæˆçš„部分,则在消æ¯å—节数组å‰é¢è¦åŠ ä¸€éƒ¨åˆ†å†…å®¹ï¼Œè¿™éƒ¨åˆ†å†…å®¹æ˜¯
[消æ¯åºå·çš„å—符串形å¼ï¼Œä»Ž1开始] [0x2F] [æ€»æ¶ˆæ¯æ¡æ•°çš„å—符串形å¼] [0x0A]
注:21éƒ¨åˆ†åªæœ‰å½“20部分部ä½0æ—¶å˜åœ¨
22. 尾部
before use this packet, mesage content should be assembled
调用这个包时,message的内容必须是已ç»ç»„装好的
- Author:
- luma
Fields inherited from class net.sf.jqql.packets.Packet |
bodyBuf, bodyDecrypted, command, crypter, ds, duplicated, header, log, sequence, source, user |
Methods inherited from class net.sf.jqql.packets.BasicOutPacket |
decryptBody, encryptBody, getBodyBytes, getCryptographStart, getFamily, getHeadLength, getLength, getTailLength, parseHeader, parseTail, postFill, putHead, putTail, toString, validateHeader |
Methods inherited from class net.sf.jqql.packets.OutPacket |
dump, fill, getKey, getNextSeq, getSendCount, getTimeout, needAck, needResend, parseBody, setKey, setSendCount, setTimeout |
Methods inherited from class net.sf.jqql.packets.Packet |
equals, getCommand, getHeader, getSequence, getSource, hash, hashCode, isDuplicated, setDuplicated, setHeader, setSequence |
SendSMSPacket
public SendSMSPacket(QQUser user)
- 创建SendSMSPacket
SendSMSPacket
public SendSMSPacket(ByteBuffer buf,
int length,
QQUser user)
throws PacketParseException
- Parameters:
buf
- length
-
- Throws:
PacketParseException
getPacketName
public String getPacketName()
- Overrides:
getPacketName
in class BasicOutPacket
- Returns:
- descriptive name of packet
包的æè¿°æ€§åç§°
putBody
protected void putBody(ByteBuffer buf)
- Description copied from class:
Packet
- initialize packet body
åˆå§‹åŒ–包体
- Specified by:
putBody
in class Packet
- Parameters:
buf
- ByteBuffer
getContentId
public int getContentId()
- Returns:
- Returns the contentId.
setContentId
public void setContentId(int contentId)
- Parameters:
contentId
- The contentId to set.
getContentType
public byte getContentType()
- Returns:
- Returns the contentType.
setContentType
public void setContentType(byte contentType)
- Parameters:
contentType
- The contentType to set.
getMessage
public byte[] getMessage()
- Returns:
- Returns the message.
setMessage
public void setMessage(byte[] message)
- Parameters:
message
- The message to set.
getMessageSequence
public char getMessageSequence()
- Returns:
- Returns the messageSequence.
setMessageSequence
public void setMessageSequence(char messageSequence)
- Parameters:
messageSequence
- The messageSequence to set.
getSenderName
public String getSenderName()
- Returns:
- Returns the senderName.
setSenderName
public void setSenderName(String senderName)
- Parameters:
senderName
- The senderName to set.
getSendMode
public byte getSendMode()
- Returns:
- Returns the sendMode.
setSendMode
public void setSendMode(byte sendMode)
- Parameters:
sendMode
- The sendMode to set.
getReceiverMobile
public List<String> getReceiverMobile()
- Returns:
- Returns the receiverMobile.
setReceiverMobile
public void setReceiverMobile(List<String> receiverMobile)
- Parameters:
receiverMobile
- The receiverMobile to set.
getReceiverQQ
public List<Integer> getReceiverQQ()
- Returns:
- Returns the receiverQQ.
setReceiverQQ
public void setReceiverQQ(List<Integer> receiverQQ)
- Parameters:
receiverQQ
- The receiverQQ to set.