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