Class CfdpService

java.lang.Object
com.google.common.util.concurrent.AbstractService
All Implemented Interfaces:
com.google.common.util.concurrent.Service, FileActionProvider, FileListingService, FileTransferService, TransferMonitor, YamcsService, StreamSubscriber

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

The standard is specified in CCSDS 727.0-B-5

  • 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 FileListingService
      Specified by:
      init in interface FileTransferService
      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(FileTransferFilter filter)
      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
    • registerRemoteFileListMonitor

      public void registerRemoteFileListMonitor(RemoteFileListMonitor monitor)
      Specified by:
      registerRemoteFileListMonitor in interface FileListingService
    • unregisterRemoteFileListMonitor

      public void unregisterRemoteFileListMonitor(RemoteFileListMonitor monitor)
      Specified by:
      unregisterRemoteFileListMonitor in interface FileListingService
    • notifyRemoteFileListMonitors

      public void notifyRemoteFileListMonitors(org.yamcs.protobuf.ListFilesResponse listFilesResponse)
      Specified by:
      notifyRemoteFileListMonitors in interface FileListingService
    • getRemoteFileListMonitors

      public Set<RemoteFileListMonitor> getRemoteFileListMonitors()
      Specified by:
      getRemoteFileListMonitors in interface FileListingService
    • 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.
    • startDownload

      public FileTransfer startDownload(String sourceEntity, String sourcePath, String destinationEntity, Bucket bucket, String objectName, TransferOptions options) throws 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:
      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.
    • fetchFileList

      public void fetchFileList(String source, String destination, String remotePath, Map<String,Object> options)
      Description copied from interface: FileListingService
      Start fetching a new file list from remote.
      Specified by:
      fetchFileList in interface FileListingService
      Parameters:
      source - source requesting the file list (e.g. local entity for CFDP)
      destination - destination from which the file list is needed (e.g. remote entity for CFDP)
      remotePath - path on the destination from which to get the file list
      options - reliability of the file listing request (e.g. transmission mode for CFDP, may not be needed)
    • getFileList

      public org.yamcs.protobuf.ListFilesResponse getFileList(String source, String destination, String remotePath, Map<String,Object> options)
      Description copied from interface: FileListingService
      Return latest file list of the given destination.
      Specified by:
      getFileList in interface FileListingService
      Parameters:
      source - source requesting the file list (e.g. local entity for CFDP)
      destination - destination from which the file list is needed (e.g. remote entity for CFDP)
      remotePath - path on the destination from which to get the file list
      options - reliability of the file listing request (e.g. transmission mode for CFDP, may not be needed)
      Returns:
      file list
    • saveFileList

      public void saveFileList(org.yamcs.protobuf.ListFilesResponse listFilesResponse)
      Specified by:
      saveFileList in interface FileListingService
    • 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
    • getFileTransferOptions

      public List<org.yamcs.protobuf.FileTransferOption> getFileTransferOptions()
      Description copied from interface: FileTransferService
      Get configured options for the file transfers
      Specified by:
      getFileTransferOptions in interface FileTransferService
      Returns:
    • addCapabilities

      protected void addCapabilities(org.yamcs.protobuf.FileTransferCapabilities.Builder builder)
      Specified by:
      addCapabilities in class AbstractFileTransferService
    • getSenderFaultHandler

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

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