Class CfdpService

java.lang.Object
com.google.common.util.concurrent.AbstractService
org.yamcs.AbstractYamcsService
org.yamcs.cfdp.CfdpService
All Implemented Interfaces:
com.google.common.util.concurrent.Service, FileTransferService, TransferMonitor, YamcsService, StreamSubscriber

public class CfdpService extends AbstractYamcsService implements FileTransferService, StreamSubscriber, TransferMonitor
Implements CCSDS File Delivery Protocol (CFDP) in Yamcs.

The standard is specified in CCSDS 727.0-B-4

  • Constructor Details

    • CfdpService

      public CfdpService()
  • Method Details

    • getSpec

      public Spec getSpec()
      Description copied from interface: YamcsService
      Returns the valid configuration options for this service.
      Specified by:
      getSpec in interface YamcsService
      Returns:
      the argument specification, or null if the args should not be validated.
    • init

      public void init(String yamcsInstance, String serviceName, YConfiguration config) throws InitException
      Description copied from interface: YamcsService
      Initialize this service. This is called before the service is started. All operations should finish fast.
      Specified by:
      init in interface YamcsService
      Overrides:
      init in class AbstractYamcsService
      Parameters:
      yamcsInstance - The yamcs instance, or null if this is a global service.
      serviceName - The service name.
      config - The configured arguments for this service. If YamcsService.getSpec() is implemented then this contains the arguments after being validated (including any defaults).
      Throws:
      InitException - When something goes wrong during the execution of this method.
    • getCfdpTransfer

      public OngoingCfdpTransfer getCfdpTransfer(CfdpTransactionId transferId)
    • getFileTransfer

      public FileTransfer getFileTransfer(long id)
      Description copied from interface: FileTransferService
      Get the file transfer with the given identifier.
      Specified by:
      getFileTransfer in interface FileTransferService
      Returns:
    • getTransfers

      public List<FileTransfer> getTransfers()
      Description copied from interface: FileTransferService
      Get the list of ongoing or past transfers.
      Specified by:
      getTransfers in interface FileTransferService
      Returns:
      the list of transfers
    • onTuple

      public void onTuple(Stream stream, Tuple tuple)
      Specified by:
      onTuple in interface StreamSubscriber
    • getRemoteEntity

      public EntityConf getRemoteEntity(long entityId)
    • getLocalEntity

      public EntityConf getLocalEntity(long entityId)
    • registerTransferMonitor

      public void registerTransferMonitor(TransferMonitor listener)
      Description copied from interface: FileTransferService
      Register a monitor to be called each time a file transfer is started or changes state.
      Specified by:
      registerTransferMonitor in interface FileTransferService
    • unregisterTransferMonitor

      public void unregisterTransferMonitor(TransferMonitor listener)
      Description copied from interface: FileTransferService
      Unregister the monitor. If the monitor was not registered, this call has no effect.
      Specified by:
      unregisterTransferMonitor in interface FileTransferService
    • doStart

      protected void doStart()
      Specified by:
      doStart in class com.google.common.util.concurrent.AbstractService
    • doStop

      protected void doStop()
      Specified by:
      doStop in class com.google.common.util.concurrent.AbstractService
    • streamClosed

      public void streamClosed(Stream stream)
      Specified by:
      streamClosed in interface StreamSubscriber
    • stateChanged

      public void stateChanged(FileTransfer ft)
      Specified by:
      stateChanged in interface TransferMonitor
    • getLocalEntities

      public List<org.yamcs.protobuf.EntityInfo> getLocalEntities()
      Description copied from interface: FileTransferService
      Get the list of configured local entities. These contain the {@code source) used in the {@link #startUpload(String, Bucket, String, String, String, TransferOptions)} call. <p> Can return an empty list if there is only one unnamed entity. @return
      Specified by:
      getLocalEntities in interface FileTransferService
    • getRemoteEntities

      public List<org.yamcs.protobuf.EntityInfo> getRemoteEntities()
      Description copied from interface: FileTransferService
      Get the list of configured remote entity. These contain the destination used in the FileTransferService.startUpload(String, Bucket, String, String, String, TransferOptions) call.

      Can return an empty list if there is only one unnamed remote entity.

      Specified by:
      getRemoteEntities in interface FileTransferService
      Returns:
    • getOngoingCfdpTransfer

      public OngoingCfdpTransfer getOngoingCfdpTransfer(long id)
    • startUpload

      public CfdpFileTransfer startUpload(String source, Bucket bucket, String objectName, String destination, String destinationPath, TransferOptions options) throws IOException
      Description copied from interface: FileTransferService
      Start a file upload.
      Specified by:
      startUpload in interface FileTransferService
      Parameters:
      source - the source (local) entity. Can be null if the service supports only one unnamed source entity.
      bucket - the bucket containing the object to be transferred.
      objectName - the object name to be transferred.
      destination - the destination (remote) entity. Can be null if the service supports only one unnamed destination entity.
      destinationPath - the path on the destination where the file will be uploaded. Depending on the implementation this can be the path of a directory in which case the objectName will be used as a destination file name or can be the name of a (non-existent) file which will then be used as the destination file. if the destinationPath is null, then the objectName will be used as the name at the destination.
      options - transfer options.
      Returns:
      Throws:
      IOException - if there was a problem retrieving the object from the bucket.
    • pause

      public void pause(FileTransfer transfer)
      Description copied from interface: FileTransferService
      Pause the file transfer.

      If the transfer is already paused, this operation has no effect.

      Specified by:
      pause in interface FileTransferService
      Parameters:
      transfer - the transfer to be paused.
    • resume

      public void resume(FileTransfer transfer)
      Description copied from interface: FileTransferService
      Resume the file transfer.

      If the transfer is not paused, this call has no effect.

      Specified by:
      resume in interface FileTransferService
      Parameters:
      transfer - the transfer to be resumed.
    • cancel

      public void cancel(FileTransfer transfer)
      Description copied from interface: FileTransferService
      Cancel the file transfer.
      Specified by:
      cancel in interface FileTransferService
    • startDownload

      public FileTransfer startDownload(String sourceEntity, String sourcePath, String destinationEntity, Bucket bucket, String objectName, TransferOptions options) throws IOException, InvalidRequestException
      Description copied from interface: FileTransferService
      Start a file download.
      Specified by:
      startDownload in interface FileTransferService
      Parameters:
      sourceEntity - the source (remote) entity. Can be null if the service supports only one unnamed source entity.
      sourcePath - the path on the source representing the file to be transferred.
      destinationEntity - the destination (local) entity. Can be null if the service supports only one unnamed destination entity.
      bucket - the bucket where the file will be stored.
      objectName - the object name where the file will be stored.
      options - transfer options.
      Returns:
      Throws:
      IOException - if there was a problem retrieving the object from the bucket.
      InvalidRequestException - thrown if the request is invalid; possible reasons:
      • the source or destination entities are not valid
      • the transfer options are invalid
      • download operation not supported or cannot be triggered by this call (most systems will have a telecommand to trigger a download)
      • other service specific error.
    • getCapabilities

      public org.yamcs.protobuf.FileTransferCapabilities getCapabilities()
      Description copied from interface: FileTransferService
      Get the capabilities supported by this service.

      The capabilities are used by the yamcs-web to enable/disable some options.

      Specified by:
      getCapabilities in interface FileTransferService
      Returns:
    • getSenderFaultHandler

      public org.yamcs.cfdp.OngoingCfdpTransfer.FaultHandlingAction getSenderFaultHandler(ConditionCode code)
    • getReceiverFaultHandler

      public org.yamcs.cfdp.OngoingCfdpTransfer.FaultHandlingAction getReceiverFaultHandler(ConditionCode code)