rlp encode hack

This commit is contained in:
zsfelfoldi 2015-02-12 17:52:11 +01:00
parent 9c5b1dbf0c
commit 76c6b7546f
3 changed files with 21 additions and 11 deletions

View file

@ -143,6 +143,7 @@ func (self *NetStore) addRetrieveRequest(req *retrieveRequestMsgData) {
defer self.lock.Unlock() defer self.lock.Unlock()
chunk := self.get(req.Key) chunk := self.get(req.Key)
req.timeout = time.Now().Add(10 * time.Second)
send, timeout := self.strategyUpdateRequest(chunk.req, req) // may change req status send, timeout := self.strategyUpdateRequest(chunk.req, req) // may change req status
@ -165,7 +166,7 @@ func (self *NetStore) startSearch(chunk *Chunk, id int64, timeout time.Time) {
req := &retrieveRequestMsgData{ req := &retrieveRequestMsgData{
Key: chunk.Key, Key: chunk.Key,
Id: uint64(id), Id: uint64(id),
Timeout: timeout, timeout: timeout,
} }
for _, peer := range peers { for _, peer := range peers {
peer.retrieve(req) peer.retrieve(req)
@ -224,7 +225,7 @@ func (self *NetStore) propagateResponse(chunk *Chunk) {
Id: uint64(id), Id: uint64(id),
} }
for _, req := range requesters { for _, req := range requesters {
if req.Timeout.After(time.Now()) { if req.timeout.After(time.Now()) {
go req.peer.store(msg) go req.peer.store(msg)
counter-- counter--
if counter <= 0 { if counter <= 0 {
@ -241,7 +242,7 @@ func (self *NetStore) deliver(req *retrieveRequestMsgData, chunk *Chunk) {
Id: req.Id, Id: req.Id,
Data: chunk.Data, Data: chunk.Data,
Size: uint64(chunk.Size), Size: uint64(chunk.Size),
RequestTimeout: req.Timeout, // RequestTimeout: req.timeout, //
// StorageTimeout time.Time // expiry of content // StorageTimeout time.Time // expiry of content
// Metadata metaData // Metadata metaData
} }
@ -273,8 +274,8 @@ func (self *NetStore) peers(req *retrieveRequestMsgData, chunk *Chunk, timeout t
func (self *NetStore) searchTimeout(rs *requestStatus, req *retrieveRequestMsgData) (timeout *time.Time) { func (self *NetStore) searchTimeout(rs *requestStatus, req *retrieveRequestMsgData) (timeout *time.Time) {
t := time.Now().Add(searchTimeout) t := time.Now().Add(searchTimeout)
if req.Timeout.Before(t) { if req.timeout.Before(t) {
return &req.Timeout return &req.timeout
} else { } else {
return &t return &t
} }

View file

@ -95,10 +95,10 @@ It is unclear if a retrieval request with an empty target is the same as a self
type retrieveRequestMsgData struct { type retrieveRequestMsgData struct {
Key Key Key Key
// optional // optional
Id uint64 // Id uint64 //
MaxSize uint64 // maximum size of delivery accepted MaxSize uint64 // maximum size of delivery accepted
Timeout time.Time // timeout time.Time //
Metadata metaData // //Metadata metaData //
// //
peer peer peer peer
} }
@ -279,7 +279,10 @@ func (self *bzzProtocol) handleStatus() (err error) {
// outgoing messages // outgoing messages
func (self *bzzProtocol) retrieve(req *retrieveRequestMsgData) { func (self *bzzProtocol) retrieve(req *retrieveRequestMsgData) {
dpaLogger.Warnf("Request message: %#v", req) dpaLogger.Warnf("Request message: %#v", req)
p2p.EncodeMsg(self.rw, retrieveRequestMsg, req) err := p2p.EncodeMsg(self.rw, retrieveRequestMsg, req.Key, req.Id, req.MaxSize)
if err != nil {
dpaLogger.Errorf("EncodeMsg error: %v", err)
}
} }
func (self *bzzProtocol) store(req *storeRequestMsgData) { func (self *bzzProtocol) store(req *storeRequestMsgData) {

View file

@ -102,12 +102,18 @@ func writeMsg(w io.Writer, msg Msg) error {
copy(start, magicToken) copy(start, magicToken)
binary.BigEndian.PutUint32(start[4:], payloadLen) binary.BigEndian.PutUint32(start[4:], payloadLen)
srvlog.Warnf("Sending message:")
for _, b := range [][]byte{start, listhdr, code} { for _, b := range [][]byte{start, listhdr, code} {
srvlog.Warnf(" %x", b)
if _, err := w.Write(b); err != nil { if _, err := w.Write(b); err != nil {
return err return err
} }
} }
_, err := io.CopyN(w, msg.Payload, int64(msg.Size)) b := make([]byte, msg.Size)
msg.Payload.Read(b)
srvlog.Warnf(" %x", b)
_, err := w.Write(b)
return err return err
} }