github.com/annchain/OG@v0.0.9/og/message_archive/model.go (about)

     1  package message_archive
     2  
     3  //import (
     4  //	"bytes"
     5  //	"ogcrypto/sha256"
     6  //	"encoding/binary"
     7  //	"errors"
     8  //	"fmt"
     9  //	"github.com/annchain/OG/common"
    10  //	"github.com/annchain/OG/common/ogcrypto"
    11  //	"github.com/sirupsen/logrus"
    12  //)
    13  
    14  //type types struct {
    15  //	MessageType    BinaryMessageType
    16  //	Data           []byte
    17  //	Hash           *common.Hash //inner use to avoid resend a Message to the same peer
    18  //	SourceID       string       // the source that this Message  coming from , outgoing if it is nil
    19  //	SendingType    SendingType  //sending type
    20  //	Version        int          // peer Version.
    21  //	Message        p2p_message.Message
    22  //	SourceHash     *common.Hash
    23  //	MarshalState   bool
    24  //	DisableEncrypt bool
    25  //}
    26  
    27  //func (m *types) CalculateHash() {
    28  //	// for txs,or response msg , even if  source peer id is different ,they were duplicated txs
    29  //	//for request ,if source id is different they were different  msg ,don't drop it
    30  //	//if we dropped header response because of duplicate , header request will time out
    31  //	if len(m.Data) == 0 {
    32  //		logrus.Error("nil Data to calculate Hash")
    33  //	}
    34  //	data := m.Data
    35  //	var hash *common.Hash
    36  //	switch m.MessageType {
    37  //	case MessageTypeNewTx:
    38  //		msg := m.Message.(*p2p_message.MessageNewTx)
    39  //		hash = msg.GetHash()
    40  //		var msgHash common.Hash
    41  //		msgHash = *hash
    42  //		m.Hash = &msgHash
    43  //		return
    44  //	case MessageTypeControl:
    45  //		msg := m.Message.(*p2p_message.MessageControl)
    46  //		var msgHash common.Hash
    47  //		msgHash = *msg.Hash
    48  //		m.Hash = &msgHash
    49  //		return
    50  //
    51  //	case MessageTypeNewSequencer:
    52  //		msg := m.Message.(*p2p_message.MessageNewSequencer)
    53  //		hash = msg.GetHash()
    54  //		var msgHash common.Hash
    55  //		msgHash = *hash
    56  //		m.Hash = &msgHash
    57  //		return
    58  //	case MessageTypeTxsRequest:
    59  //		data = append(data, []byte(m.SourceID+"txs")...)
    60  //	case MessageTypeBodiesRequest:
    61  //		data = append(data, []byte(m.SourceID+"bq")...)
    62  //	case MessageTypeTermChangeRequest:
    63  //		data = append(data, []byte(m.SourceID+"tq")...)
    64  //	case MessageTypeFetchByHashRequest:
    65  //		data = append(data, []byte(m.SourceID+"fe")...)
    66  //	case MessageTypeHeaderRequest:
    67  //		data = append(data, []byte(m.SourceID+"hq")...)
    68  //	case MessageTypeHeaderResponse:
    69  //		data = append(data, []byte(m.SourceID+"hp")...)
    70  //	case MessageTypeBodiesResponse:
    71  //		data = append(data, []byte(m.SourceID+"bp")...)
    72  //	case MessageTypeSequencerHeader:
    73  //		data = append(data, []byte(m.SourceID+"sq")...)
    74  //	case MessageTypeGetMsg:
    75  //		data = append(data, []byte(m.SourceID+"gm")...)
    76  //	default:
    77  //	}
    78  //	h := sha256.New()
    79  //	h.Write(data)
    80  //	sum := h.Sum(nil)
    81  //	m.Hash = &common.Hash{}
    82  //	m.Hash.MustSetBytes(sum, common.PaddingNone)
    83  //}
    84  //
    85  //func (p *types) GetMarkHashes() common.Hashes {
    86  //	if p.Message == nil {
    87  //		panic("unmarshal first")
    88  //	}
    89  //	switch p.MessageType {
    90  //	case MessageTypeFetchByHashResponse:
    91  //		msg := p.Message.(*p2p_message.MessageSyncResponse)
    92  //		return msg.Hashes()
    93  //	case MessageTypeNewTxs:
    94  //		msg := p.Message.(*p2p_message.MessageNewTxs)
    95  //		return msg.Hashes()
    96  //	case MessageTypeTxsResponse:
    97  //		msg := p.Message.(*p2p_message.MessageTxsResponse)
    98  //		return msg.Hashes()
    99  //	default:
   100  //		return nil
   101  //	}
   102  //	return nil
   103  //}
   104  
   105  //func (m *types) Marshal() error {
   106  //	if m.MarshalState {
   107  //		return nil
   108  //	}
   109  //	if m.Message == nil {
   110  //		return errors.New("Message is nil")
   111  //	}
   112  //	var err error
   113  //	m.Data, err = m.Message.MarshalMsg(nil)
   114  //	if err != nil {
   115  //		return err
   116  //	}
   117  //	m.MarshalState = true
   118  //	return err
   119  //}
   120  
   121  //func (m *types) AppendGossipTarget(pub *ogcrypto.PublicKey) error {
   122  //	b := make([]byte, 2)
   123  //	//use one key for tx and sequencer
   124  //	binary.BigEndian.PutUint16(b, uint16(m.MessageType))
   125  //	m.Data = append(m.Data, b[:]...)
   126  //	m.DisableEncrypt = true
   127  //	m.Data = append(m.Data, pub.KeyBytes[:8]...)
   128  //	m.MessageType = MessageTypeSecret
   129  //	return nil
   130  //}
   131  
   132  //func (m *types) Encrypt(pub *ogcrypto.PublicKey) error {
   133  //	//if m.MessageType == MessageTypeConsensusDkgDeal || m.MessageType == MessageTypeConsensusDkgDealResponse {
   134  //	b := make([]byte, 2)
   135  //	//use one key for tx and sequencer
   136  //	binary.BigEndian.PutUint16(b, uint16(m.MessageType))
   137  //	m.Data = append(m.Data, b[:]...)
   138  //	m.MessageType = MessageTypeSecret
   139  //	ct, err := pub.Encrypt(m.Data)
   140  //	if err != nil {
   141  //		return err
   142  //	}
   143  //	m.Data = ct
   144  //	//add target
   145  //	m.Data = append(m.Data, pub.KeyBytes[:3]...)
   146  //	return nil
   147  //}
   148  
   149  //func (m *types) CheckRequiredSize() bool {
   150  //	if m.MessageType == MessageTypeSecret {
   151  //		if m.DisableEncrypt {
   152  //			if len(m.Data) < 8 {
   153  //				return false
   154  //			}
   155  //		}
   156  //		if len(m.Data) < 3 {
   157  //			return false
   158  //		}
   159  //	}
   160  //	return true
   161  //}
   162  
   163  //func (m *types) MaybeIsforMe(myPub *ogcrypto.PublicKey) bool {
   164  //	if m.MessageType != MessageTypeSecret {
   165  //		panic("not a secret Message")
   166  //	}
   167  //	//check target
   168  //	if m.DisableEncrypt {
   169  //		target := m.Data[len(m.Data)-8:]
   170  //		if !bytes.Equal(target, myPub.KeyBytes[:8]) {
   171  //			//not four me
   172  //			return false
   173  //		}
   174  //		return true
   175  //	}
   176  //	target := m.Data[len(m.Data)-3:]
   177  //	if !bytes.Equal(target, myPub.KeyBytes[:3]) {
   178  //		//not four me
   179  //		return false
   180  //	}
   181  //	return true
   182  //}
   183  
   184  //func (m *types) RemoveGossipTarget() error {
   185  //	msg := make([]byte, len(m.Data)-8)
   186  //	copy(msg, m.Data[:len(m.Data)-8])
   187  //	if len(msg) < 3 {
   188  //		return fmt.Errorf("lengh error %d", len(msg))
   189  //	}
   190  //	b := make([]byte, 2)
   191  //	copy(b, msg[len(msg)-2:])
   192  //	mType := binary.BigEndian.Uint16(b)
   193  //	m.MessageType = BinaryMessageType(mType)
   194  //	if !m.MessageType.IsValid() {
   195  //		return fmt.Errorf("Message type error %s", m.MessageType.String())
   196  //	}
   197  //	m.Data = msg[:len(msg)-2]
   198  //	return nil
   199  //}
   200  
   201  //func (m *types) Decrypt(priv *ogcrypto.PrivateKey) error {
   202  //	if m.MessageType != MessageTypeSecret {
   203  //		panic("not a secret Message")
   204  //	}
   205  //	d := make([]byte, len(m.Data)-3)
   206  //	copy(d, m.Data[:len(m.Data)-3])
   207  //	msg, err := priv.Decrypt(d)
   208  //	if err != nil {
   209  //		return err
   210  //	}
   211  //	if len(msg) < 3 {
   212  //		return fmt.Errorf("lengh error %d", len(msg))
   213  //	}
   214  //	b := make([]byte, 2)
   215  //	copy(b, msg[len(msg)-2:])
   216  //	mType := binary.BigEndian.Uint16(b)
   217  //	m.MessageType = BinaryMessageType(mType)
   218  //	if !m.MessageType.IsValid() {
   219  //		return fmt.Errorf("Message type error %s", m.MessageType.String())
   220  //	}
   221  //	m.Data = msg[:len(msg)-2]
   222  //	return nil
   223  //}
   224  
   225  //func (p *types) Unmarshal() error {
   226  //	if p.MarshalState {
   227  //		return nil
   228  //	}
   229  //	p.Message = p.MessageType.GetMsg()
   230  //	if p.Message == nil {
   231  //		return fmt.Errorf("unknown Message type %v ", p.MessageType)
   232  //	}
   233  //	switch p.MessageType {
   234  //
   235  //	case MessageTypeNewTx:
   236  //		msg := &p2p_message.MessageNewTx{}
   237  //		_, err := msg.UnmarshalMsg(p.Data)
   238  //		if err != nil {
   239  //			return err
   240  //		}
   241  //		if msg.RawTx == nil {
   242  //			return errors.New("nil content")
   243  //		}
   244  //		p.Message = msg
   245  //		p.MarshalState = true
   246  //		return nil
   247  //	case MessageTypeNewSequencer:
   248  //		msg := &p2p_message.MessageNewSequencer{}
   249  //		_, err := msg.UnmarshalMsg(p.Data)
   250  //		if err != nil {
   251  //			return err
   252  //		}
   253  //		if msg.RawSequencer == nil {
   254  //			return errors.New("nil content")
   255  //		}
   256  //		p.Message = msg
   257  //		p.MarshalState = true
   258  //		return nil
   259  //	case MessageTypeGetMsg:
   260  //		msg := &p2p_message.MessageGetMsg{}
   261  //		_, err := msg.UnmarshalMsg(p.Data)
   262  //		if err != nil {
   263  //			return err
   264  //		}
   265  //		if msg.Hash == nil {
   266  //			return errors.New("nil content")
   267  //		}
   268  //		p.Message = msg
   269  //		p.MarshalState = true
   270  //		return nil
   271  //	case MessageTypeControl:
   272  //		msg := &p2p_message.MessageControl{}
   273  //		_, err := msg.UnmarshalMsg(p.Data)
   274  //		if err != nil {
   275  //			return err
   276  //		}
   277  //		if msg.Hash == nil {
   278  //			return errors.New("nil content")
   279  //		}
   280  //		p.Message = msg
   281  //		p.MarshalState = true
   282  //		return nil
   283  //	default:
   284  //	}
   285  //	_, err := p.Message.UnmarshalMsg(p.Data)
   286  //	p.MarshalState = true
   287  //	return err
   288  //}
   289  //
   290  ////
   291  //func (m *types) AllowSendDuplicateMsg() bool {
   292  //	return m.MessageType == MessageTypeNewTx || m.MessageType == MessageTypeNewSequencer
   293  //}
   294  //
   295  //func (m *types) MsgKey() MsgKey {
   296  //	return NewMsgKey(m.MessageType, *m.Hash)
   297  //}
   298  
   299