代码拉取完成,页面将自动刷新
// Copyright 2015 Tony Bai.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package cmpp
import (
"encoding/binary"
"errors"
)
// Packet length const for cmpp deliver request and response packets.
const (
Cmpp2DeliverReqPktMaxLen uint32 = 12 + 233 //245d, 0xf5
Cmpp2DeliverRspPktLen uint32 = 12 + 8 + 1 //21d, 0x15
Cmpp3DeliverReqPktMaxLen uint32 = 12 + 257 //269d, 0x10d
Cmpp3DeliverRspPktLen uint32 = 12 + 8 + 4 //24d, 0x18
)
// Errors for result in deliver resp.
var (
ErrnoDeliverInvalidStruct uint8 = 1
ErrnoDeliverInvalidCommandId uint8 = 2
ErrnoDeliverInvalidSequence uint8 = 3
ErrnoDeliverInvalidMsgLength uint8 = 4
ErrnoDeliverInvalidFeeCode uint8 = 5
ErrnoDeliverExceedMaxMsgLength uint8 = 6
ErrnoDeliverInvalidServiceId uint8 = 7
ErrnoDeliverNotPassFlowControl uint8 = 8
ErrnoDeliverOtherError uint8 = 9
DeliverRspResultErrMap = map[uint8]error{
ErrnoDeliverInvalidStruct: errDeliverInvalidStruct,
ErrnoDeliverInvalidCommandId: errDeliverInvalidCommandId,
ErrnoDeliverInvalidSequence: errDeliverInvalidSequence,
ErrnoDeliverInvalidMsgLength: errDeliverInvalidMsgLength,
ErrnoDeliverInvalidFeeCode: errDeliverInvalidFeeCode,
ErrnoDeliverExceedMaxMsgLength: errDeliverExceedMaxMsgLength,
ErrnoDeliverInvalidServiceId: errDeliverInvalidServiceId,
ErrnoDeliverNotPassFlowControl: errDeliverNotPassFlowControl,
ErrnoDeliverOtherError: errDeliverOtherError,
}
errDeliverInvalidStruct = errors.New("deliver response status: invalid protocol structure")
errDeliverInvalidCommandId = errors.New("deliver response status: invalid command id")
errDeliverInvalidSequence = errors.New("deliver response status: invalid message sequence")
errDeliverInvalidMsgLength = errors.New("deliver response status: invalid message length")
errDeliverInvalidFeeCode = errors.New("deliver response status: invalid fee code")
errDeliverExceedMaxMsgLength = errors.New("deliver response status: exceed max message length")
errDeliverInvalidServiceId = errors.New("deliver response status: invalid service id")
errDeliverNotPassFlowControl = errors.New("deliver response status: not pass the flow control")
errDeliverOtherError = errors.New("deliver response status: other error")
)
type Cmpp2DeliverReqPkt struct {
MsgId uint64
DestId string
ServiceId string
TpPid uint8
TpUdhi uint8
MsgFmt uint8
SrcTerminalId string
RegisterDelivery uint8
MsgLength uint8
MsgContent string
Reserve string
//session info
SeqId uint32
}
type Cmpp2DeliverRspPkt struct {
MsgId uint64
Result uint8
//session info
SeqId uint32
}
type Cmpp3DeliverReqPkt struct {
MsgId uint64
DestId string
ServiceId string
TpPid uint8
TpUdhi uint8
MsgFmt uint8
SrcTerminalId string
SrcTerminalType uint8
RegisterDelivery uint8
MsgLength uint8
MsgContent string
LinkId string
//session info
SeqId uint32
}
type Cmpp3DeliverRspPkt struct {
MsgId uint64
Result uint32
//session info
SeqId uint32
}
// Pack packs the Cmpp2DeliverReqPkt to bytes stream for client side.
func (p *Cmpp2DeliverReqPkt) Pack(seqId uint32) ([]byte, error) {
var pktLen uint32 = CMPP_HEADER_LEN + 65 + uint32(p.MsgLength) + 8
var w = newPacketWriter(pktLen)
// Pack header
w.WriteInt(binary.BigEndian, pktLen)
w.WriteInt(binary.BigEndian, CMPP_DELIVER)
w.WriteInt(binary.BigEndian, seqId)
p.SeqId = seqId
// Pack Body
w.WriteInt(binary.BigEndian, p.MsgId)
w.WriteFixedSizeString(p.DestId, 21)
w.WriteFixedSizeString(p.ServiceId, 10)
w.WriteByte(p.TpPid)
w.WriteByte(p.TpUdhi)
w.WriteByte(p.MsgFmt)
w.WriteFixedSizeString(p.SrcTerminalId, 21)
w.WriteByte(p.RegisterDelivery)
w.WriteByte(p.MsgLength)
w.WriteString(p.MsgContent)
w.WriteFixedSizeString(p.Reserve, 8)
return w.Bytes()
}
// Unpack unpack the binary byte stream to a Cmpp2DeliverReqPkt variable.
// After unpack, you will get all value of fields in
// Cmpp2DeliverReqPkt struct.
func (p *Cmpp2DeliverReqPkt) Unpack(data []byte) error {
var r = newPacketReader(data)
// Sequence Id
r.ReadInt(binary.BigEndian, &p.SeqId)
// Body
r.ReadInt(binary.BigEndian, &p.MsgId)
destId := r.ReadCString(21)
p.DestId = string(destId)
serviceId := r.ReadCString(10)
p.ServiceId = string(serviceId)
p.TpPid = r.ReadByte()
p.TpUdhi = r.ReadByte()
p.MsgFmt = r.ReadByte()
srcTerminalId := r.ReadCString(21)
p.SrcTerminalId = string(srcTerminalId)
p.RegisterDelivery = r.ReadByte()
p.MsgLength = r.ReadByte()
msgContent := make([]byte, p.MsgLength)
r.ReadBytes(msgContent)
p.MsgContent = string(msgContent)
reserve := r.ReadCString(8)
p.Reserve = string(reserve)
return r.Error()
}
// Pack packs the Cmpp2DeliverRspPkt to bytes stream for client side.
func (p *Cmpp2DeliverRspPkt) Pack(seqId uint32) ([]byte, error) {
var pktLen uint32 = Cmpp2DeliverRspPktLen
var w = newPacketWriter(pktLen)
// Pack header
w.WriteInt(binary.BigEndian, pktLen)
w.WriteInt(binary.BigEndian, CMPP_DELIVER_RESP)
w.WriteInt(binary.BigEndian, seqId)
p.SeqId = seqId
// Pack Body
w.WriteInt(binary.BigEndian, p.MsgId)
w.WriteByte(p.Result)
return w.Bytes()
}
// Unpack unpack the binary byte stream to a Cmpp2DeliverRspPkt variable.
// After unpack, you will get all value of fields in
// Cmpp2DeliverRspPkt struct.
func (p *Cmpp2DeliverRspPkt) Unpack(data []byte) error {
var r = newPacketReader(data)
// Sequence Id
r.ReadInt(binary.BigEndian, &p.SeqId)
r.ReadInt(binary.BigEndian, &p.MsgId)
p.Result = r.ReadByte()
return r.Error()
}
// Pack packs the Cmpp3DeliverReqPkt to bytes stream for client side.
func (p *Cmpp3DeliverReqPkt) Pack(seqId uint32) ([]byte, error) {
var pktLen uint32 = CMPP_HEADER_LEN + 77 + uint32(p.MsgLength) + 20
var w = newPacketWriter(pktLen)
// Pack header
w.WriteInt(binary.BigEndian, pktLen)
w.WriteInt(binary.BigEndian, CMPP_DELIVER)
w.WriteInt(binary.BigEndian, seqId)
p.SeqId = seqId
// Pack Body
w.WriteInt(binary.BigEndian, p.MsgId)
w.WriteFixedSizeString(p.DestId, 21)
w.WriteFixedSizeString(p.ServiceId, 10)
w.WriteByte(p.TpPid)
w.WriteByte(p.TpUdhi)
w.WriteByte(p.MsgFmt)
w.WriteFixedSizeString(p.SrcTerminalId, 32)
w.WriteByte(p.SrcTerminalType)
w.WriteByte(p.RegisterDelivery)
w.WriteByte(p.MsgLength)
w.WriteString(p.MsgContent)
w.WriteFixedSizeString(p.LinkId, 20)
return w.Bytes()
}
// Unpack unpack the binary byte stream to a Cmpp3DeliverReqPkt variable.
// After unpack, you will get all value of fields in
// Cmpp3DeliverReqPkt struct.
func (p *Cmpp3DeliverReqPkt) Unpack(data []byte) error {
var r = newPacketReader(data)
// Sequence Id
r.ReadInt(binary.BigEndian, &p.SeqId)
// Body
r.ReadInt(binary.BigEndian, &p.MsgId)
destId := r.ReadCString(21)
p.DestId = string(destId)
serviceId := r.ReadCString(10)
p.ServiceId = string(serviceId)
p.TpPid = r.ReadByte()
p.TpUdhi = r.ReadByte()
p.MsgFmt = r.ReadByte()
srcTerminalId := r.ReadCString(32)
p.SrcTerminalId = string(srcTerminalId)
p.SrcTerminalType = r.ReadByte()
p.RegisterDelivery = r.ReadByte()
p.MsgLength = r.ReadByte()
msgContent := make([]byte, p.MsgLength)
r.ReadBytes(msgContent)
p.MsgContent = string(msgContent)
linkId := r.ReadCString(20)
p.LinkId = string(linkId)
return r.Error()
}
// Pack packs the Cmpp3DeliverRspPkt to bytes stream for client side.
func (p *Cmpp3DeliverRspPkt) Pack(seqId uint32) ([]byte, error) {
var pktLen uint32 = Cmpp3DeliverRspPktLen
var w = newPacketWriter(pktLen)
// Pack header
w.WriteInt(binary.BigEndian, pktLen)
w.WriteInt(binary.BigEndian, CMPP_DELIVER_RESP)
w.WriteInt(binary.BigEndian, seqId)
p.SeqId = seqId
// Pack Body
w.WriteInt(binary.BigEndian, p.MsgId)
w.WriteInt(binary.BigEndian, p.Result)
return w.Bytes()
}
// Unpack unpack the binary byte stream to a Cmpp3DeliverRspPkt variable.
// After unpack, you will get all value of fields in
// Cmpp3DeliverRspPkt struct.
func (p *Cmpp3DeliverRspPkt) Unpack(data []byte) error {
var r = newPacketReader(data)
// Sequence Id
r.ReadInt(binary.BigEndian, &p.SeqId)
r.ReadInt(binary.BigEndian, &p.MsgId)
r.ReadInt(binary.BigEndian, &p.Result)
return r.Error()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。