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 &notFound
   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  }