@@ -465,33 +465,60 @@ func (p *Provider) HandleDealStatusStream(s network.DealStatusStream) {
465465 return
466466 }
467467
468+ dealState , err := p .processDealStatusRequest (ctx , & request )
469+ if err != nil {
470+ log .Errorf ("failed to process deal status request: %s" , err )
471+ dealState = & storagemarket.ProviderDealState {
472+ State : storagemarket .StorageDealError ,
473+ Message : err .Error (),
474+ }
475+ }
476+
477+ signature , err := p .sign (ctx , dealState )
478+ if err != nil {
479+ log .Errorf ("failed to sign deal status response: %s" , err )
480+ return
481+ }
482+
483+ response := network.DealStatusResponse {
484+ DealState : * dealState ,
485+ Signature : * signature ,
486+ }
487+
488+ if err := s .WriteDealStatusResponse (response , p .sign ); err != nil {
489+ log .Warnf ("failed to write deal status response: %s" , err )
490+ return
491+ }
492+ }
493+
494+ func (p * Provider ) processDealStatusRequest (ctx context.Context , request * network.DealStatusRequest ) (* storagemarket.ProviderDealState , error ) {
468495 // fetch deal state
469496 var md = storagemarket.MinerDeal {}
470497 if err := p .deals .Get (request .Proposal ).Get (& md ); err != nil {
471498 log .Errorf ("proposal doesn't exist in state store: %s" , err )
472- return
499+ return nil , xerrors . Errorf ( "no such proposal" )
473500 }
474501
475502 // verify query signature
476503 buf , err := cborutil .Dump (& request .Proposal )
477504 if err != nil {
478505 log .Errorf ("failed to serialize status request: %s" , err )
479- return
506+ return nil , xerrors . Errorf ( "internal error" )
480507 }
481508
482509 tok , _ , err := p .spn .GetChainHead (ctx )
483510 if err != nil {
484511 log .Errorf ("failed to get chain head: %s" , err )
485- return
512+ return nil , xerrors . Errorf ( "internal error" )
486513 }
487514
488515 err = providerutils .VerifySignature (ctx , request .Signature , md .ClientDealProposal .Proposal .Client , buf , tok , p .spn .VerifySignature )
489516 if err != nil {
490517 log .Errorf ("invalid deal status request signature: %s" , err )
491- return
518+ return nil , xerrors . Errorf ( "internal error" )
492519 }
493520
494- dealState := storagemarket.ProviderDealState {
521+ return & storagemarket.ProviderDealState {
495522 State : md .State ,
496523 Message : md .Message ,
497524 Proposal : & md .Proposal ,
@@ -500,23 +527,7 @@ func (p *Provider) HandleDealStatusStream(s network.DealStatusStream) {
500527 PublishCid : md .PublishCid ,
501528 DealID : md .DealID ,
502529 FastRetrieval : md .FastRetrieval ,
503- }
504-
505- signature , err := p .sign (ctx , & dealState )
506- if err != nil {
507- log .Errorf ("failed to sign deal status response: %s" , err )
508- return
509- }
510-
511- response := network.DealStatusResponse {
512- DealState : dealState ,
513- Signature : * signature ,
514- }
515-
516- if err := s .WriteDealStatusResponse (response , p .sign ); err != nil {
517- log .Warnf ("failed to write deal status response: %s" , err )
518- return
519- }
530+ }, nil
520531}
521532
522533// Configure applies the given list of StorageProviderOptions after a StorageProvider
0 commit comments