Reorganize the transfer pipeline
Currently, client transfers are handled by the executor
package. However, this is a problem. Not only does the existence of the executor
package add quite a bit of complexity (when combined with the pipeline
package), it also creates inconsistency between client & server transfers (since executor
is exclusive to client transfers). The executor
should be removed, and its code should be moved inside the transfer pipeline.
TransferStream
should also be reworked so that it only handles data operation, while the rest should be handled by TransferPipeline
.