github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/p2pserver/message/msg_pack.go (about) 1 package message 2 3 import ( 4 "time" 5 6 "github.com/sixexorg/magnetic-ring/common" 7 "github.com/sixexorg/magnetic-ring/config" 8 ct "github.com/sixexorg/magnetic-ring/core/mainchain/types" 9 orgtypes "github.com/sixexorg/magnetic-ring/core/orgchain/types" 10 msgCommon "github.com/sixexorg/magnetic-ring/p2pserver/common" 11 p2pnet "github.com/sixexorg/magnetic-ring/p2pserver/net/protocol" 12 "github.com/sixexorg/magnetic-ring/store/mainchain/extstates" 13 ) 14 15 //Version package 16 func NewVersion(n p2pnet.P2P, isCons bool, height uint32) msgCommon.Message { 17 var version msgCommon.Version 18 version.P = msgCommon.VersionPayload{ 19 Version: n.GetVersion(), 20 Services: n.GetServices(), 21 SyncPort: n.GetSyncPort(), 22 ConsPort: n.GetConsPort(), 23 Nonce: n.GetID(), 24 IsConsensus: isCons, 25 HttpInfoPort: n.GetHttpInfoPort(), 26 StartHeight: uint64(height), 27 TimeStamp: uint64(time.Now().UnixNano()), 28 } 29 30 if n.GetRelay() { 31 version.P.Relay = 1 32 } else { 33 version.P.Relay = 0 34 } 35 if config.GlobalConfig.P2PCfg.HttpInfoPort > 0 { 36 version.P.Cap[msgCommon.HTTP_INFO_FLAG] = 0x01 37 } else { 38 version.P.Cap[msgCommon.HTTP_INFO_FLAG] = 0x00 39 } 40 41 version.N = *(n.GetNode()) 42 return &version 43 } 44 45 //version ack package 46 func NewVerAck(isConsensus bool) msgCommon.Message { 47 var verAck msgCommon.VerACK 48 verAck.IsConsensus = isConsensus 49 50 return &verAck 51 } 52 53 //Peer address request package 54 func NewAddrReq() msgCommon.Message { 55 var msg msgCommon.AddrReq 56 return &msg 57 } 58 59 //Peer address package // p2p 60 func NewAddrs(nodeAddrs []msgCommon.PeerAddr) msgCommon.Message { 61 var addr msgCommon.Addr 62 addr.NodeAddrs = nodeAddrs 63 64 return &addr 65 } 66 67 func NewOrgPIPOMsg(org common.Address, orgheight uint64) *msgCommon.OrgPIPOInfo { 68 return &msgCommon.OrgPIPOInfo{ 69 OrgID: org, 70 Height: orgheight, 71 } 72 } 73 74 //ping msg package 75 func NewPingMsg(height uint64, orginfos []*msgCommon.OrgPIPOInfo, pinginfotype string) *msgCommon.Ping { 76 var ping msgCommon.Ping 77 ping.Height = uint64(height) 78 ping.InfoType = pinginfotype 79 ping.OrgInfo = make([]msgCommon.OrgPIPOInfo, 0) 80 for _, info := range orginfos { 81 ping.OrgInfo = append(ping.OrgInfo, *info) 82 } 83 return &ping 84 } 85 86 //pong msg package 87 func NewPongMsg(height uint64, orginfos []*msgCommon.OrgPIPOInfo, pinginfotype string) *msgCommon.Pong { 88 var pong msgCommon.Pong 89 pong.Height = uint64(height) 90 pong.InfoType = pinginfotype 91 pong.OrgInfo = make([]msgCommon.OrgPIPOInfo, 0) 92 for _, info := range orginfos { 93 pong.OrgInfo = append(pong.OrgInfo, *info) 94 } 95 96 return &pong 97 } 98 99 func NewHeadersReq(curHdrHash common.Hash, orgID common.Address, synctype string, height ...uint64) msgCommon.Message { 100 var h msgCommon.HeadersReq 101 h.Len = 1 102 h.HashEnd = curHdrHash 103 if len(height) > 0 { 104 h.Height = height[0] 105 } 106 // h.Height = height 107 h.OrgID = orgID 108 h.SyncType = synctype 109 110 return &h 111 } 112 113 //blk hdr package 114 func NewHeaders(headers []*ct.Header, orgheaders []*orgtypes.Header, orgID common.Address, synctype string) msgCommon.Message { 115 var blkHdr msgCommon.BlkHeader 116 blkHdr.BlkHdr = headers 117 blkHdr.OrgID = orgID 118 blkHdr.SyncType = synctype 119 blkHdr.BlkOrgHdr = orgheaders 120 return &blkHdr 121 // return &blkHdr 122 //return msgCommon.BlkHeaderToBlkP2PHeader(&blkHdr) 123 } 124 125 //InvPayload // used 126 func NewInvPayload(invType common.InventoryType, msg []common.Hash, heis []uint64) *msgCommon.InvPayload { 127 return &msgCommon.InvPayload{ 128 InvType: invType, 129 Blk: msg, 130 Heis: heis, 131 } 132 } 133 134 //Inv request package // used 135 func NewInv(invPayload *msgCommon.InvPayload) msgCommon.Message { 136 var inv msgCommon.Inv 137 inv.P.Blk = invPayload.Blk 138 inv.P.Heis = invPayload.Heis 139 inv.P.InvType = invPayload.InvType 140 141 return &inv 142 } 143 144 //transaction request package // not used 145 func NewTxnDataReq(hash common.Hash) msgCommon.Message { 146 var dataReq msgCommon.DataReq 147 dataReq.DataType = common.TRANSACTION 148 dataReq.Hash = hash 149 150 return &dataReq 151 } 152 153 //block request package // used 154 func NewBlkDataReq(hash common.Hash, orgID common.Address, synctype string) msgCommon.Message { 155 var dataReq msgCommon.DataReq 156 dataReq.DataType = common.BLOCK 157 dataReq.Hash = hash 158 dataReq.OrgID = orgID 159 dataReq.SyncType = synctype 160 161 return &dataReq 162 } 163 164 //consensus request package // not used 165 func NewConsensusDataReq(hash common.Hash) msgCommon.Message { 166 var dataReq msgCommon.DataReq 167 dataReq.DataType = common.CONSENSUS 168 dataReq.Hash = hash 169 170 return &dataReq 171 } 172 173 ///block package // used 174 func NewBlock(bk *ct.Block, bkorg *orgtypes.Block, orgID common.Address, synctype string) msgCommon.Message { 175 var blk msgCommon.Block 176 blk.Blk = bk 177 blk.BlkOrg = bkorg 178 blk.OrgID = orgID 179 blk.SyncType = synctype 180 181 // return &blk 182 return msgCommon.BlockToTrsBlock(&blk) 183 } 184 185 func NewBlockRdr(bk *ct.Block, bkorg *orgtypes.Block, orgID common.Address, synctype string) msgCommon.Message { 186 var blk msgCommon.Block 187 blk.Blk = bk 188 blk.BlkOrg = bkorg 189 blk.OrgID = orgID 190 blk.SyncType = synctype 191 192 // return &blk 193 return msgCommon.BlockToRdrBlock(&blk) 194 } 195 196 //Consensus info package // used 197 func NewConsensus(cp *msgCommon.ConsensusPayload) msgCommon.Message { 198 var cons msgCommon.Consensus 199 cons.Cons = *cp 200 201 // return &cons 202 return msgCommon.ConsensusToP2PConsPld(&cons) 203 } 204 205 //NotFound package // used 206 func NewNotFound(hash common.Hash) msgCommon.Message { 207 var notFound msgCommon.NotFound 208 notFound.Hash = hash 209 210 return ¬Found 211 } 212 213 //Transaction package // used 214 func NewTxn(txn *ct.Transaction, orgtxn *orgtypes.Transaction, orgID common.Address, synctype string) msgCommon.Message { 215 var trn msgCommon.Trn 216 trn.Txn = txn 217 trn.OrgTxn = orgtxn 218 trn.OrgID = orgID 219 trn.SyncType = synctype 220 221 // return &trn 222 return msgCommon.TrnToP2PTrn(&trn) 223 } 224 225 // new add 226 //ping msg package 227 func NewPingSpcMsg(bNodeASrc bool) *msgCommon.PingSpc { 228 var pingspc msgCommon.PingSpc 229 pingspc.BNodeASrc = bNodeASrc 230 return &pingspc 231 } 232 233 //pong msg package 234 func NewPongSpcMsg(bNodeASrc bool, bOtherSideReq bool) *msgCommon.PongSpc { 235 var pongspc msgCommon.PongSpc 236 pongspc.BNodeASrc = bNodeASrc 237 pongspc.BOtherSideReq = bOtherSideReq 238 239 return &pongspc 240 } 241 242 //Transaction package // used 243 func NewEarthNotifyHash(earthnotify *msgCommon.EarthNotifyBlk) msgCommon.Message { 244 var enh msgCommon.EarthNotifyMsg 245 enh.Height = earthnotify.BlkHeight 246 enh.Hash = earthnotify.BlkHash 247 248 // return &trn 249 return &enh 250 } 251 252 func NewNodeLHMsg(earthnotify *common.NodeLH) msgCommon.Message { 253 var nodeLHMsg msgCommon.NodeLHMsg 254 nodeLHMsg.Height = earthnotify.Height 255 nodeLHMsg.LeagueId = earthnotify.LeagueId 256 nodeLHMsg.NodeId = earthnotify.NodeId 257 258 return &nodeLHMsg 259 } 260 261 func NewExtDataRequestMsg(data *msgCommon.ExtDataRequest) msgCommon.Message { 262 var extMsg msgCommon.ExtDataRequest 263 extMsg.LeagueId = data.LeagueId 264 extMsg.Height = data.Height 265 266 return &extMsg 267 } 268 269 func NewExtDataResponseMsg(data *extstates.ExtData) msgCommon.Message { 270 extData := *data 271 extMsg := msgCommon.ExtDataResponse{ 272 &extData, 273 } 274 return &extMsg 275 }