code: func (r *sentReq) stateRequesting() reqStateFn {
  	select {
  	case ev := <-r.eventsCh:
  		r.update(ev)
  		switch ev.event {
  		case rpSent:
  			if ev.peer == nil {
  				// request send failed, no more suitable peers
  				if r.waiting() {
  					// we are already waiting for sent requests which may succeed so keep waiting
  					return r.stateNoMorePeers
  				}
  				// nothing to wait for, no more peers to ask, return with error
  				r.stop(light.ErrNoPeers)
  				// no need to go to stopped state because waiting() already returned false
  				return nil
  			}
  		case rpSoftTimeout:
  			// last request timed out, try asking a new peer
  			go r.tryRequest()
  			r.lastReqQueued = true
  			return r.stateRequesting
  		case rpDeliveredInvalid:
  			// if it was the last sent request (set to nil by update) then start a new one
  			if !r.lastReqQueued && r.lastReqSentTo == nil {
  				go r.tryRequest()
  				r.lastReqQueued = true
  			}
  			return r.stateRequesting
  		case rpDeliveredValid:
  			r.stop(nil)
  			return r.stateStopped
  		}
  		return r.stateRequesting
  	case <-r.stopCh:
  		return r.stateStopped
  	}
  }
docs: // stateRequesting: a request has been queued or sent recently; when it reaches soft timeout,
  // a new request is sent to a new peer