// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire-worker.h,v 1.12 2001/02/20 07:03:17 jgg Exp $
/* ######################################################################
Acquire Worker - Worker process manager
#define PKGLIB_ACQUIRE_WORKER_H
#include <apt-pkg/acquire.h>
+#include <apt-pkg/weakptr.h>
+#include <sys/types.h>
+#include <string>
+#include <vector>
/** \brief A fetch subprocess.
*
*
* \sa pkgAcqMethod, pkgAcquire::Item, pkgAcquire
*/
-class pkgAcquire::Worker
+class pkgAcquire::Worker : public WeakPointable
{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void *d;
+
friend class pkgAcquire;
protected:
*
* \todo Doesn't this duplicate Config->Access?
*/
- string Access;
+ std::string Access;
/** \brief The PID of the subprocess. */
pid_t Process;
*/
int OutFd;
+ /** \brief The socket to send SCM_RIGHTS message through
+ */
+ int PrivSepSocketFd;
+ int PrivSepSocketFdChild;
+
/** \brief Set to \b true if the worker is in a state in which it
* might generate data or command responses.
*
/** \brief The raw text values of messages received from the
* worker, in sequence.
*/
- vector<string> MessageQueue;
+ std::vector<std::string> MessageQueue;
/** \brief Buffers pending writes to the subprocess.
*
* \todo Wouldn't a std::dequeue be more appropriate?
*/
- string OutQueue;
+ std::string OutQueue;
/** \brief Common code for the constructor.
*
/** \brief Retrieve any available messages from the subprocess.
*
- * The messages are retrieved as in ::ReadMessages(), and
- * MessageFailure() is invoked if an error occurs; in particular,
+ * The messages are retrieved as in \link strutl.h ReadMessages()\endlink, and
+ * #MethodFailure() is invoked if an error occurs; in particular,
* if the pipe to the subprocess dies unexpectedly while a message
* is being read.
*
*
* \return \b true.
*/
- bool Capabilities(string Message);
+ bool Capabilities(std::string Message);
/** \brief Send a 601 Configuration message (containing the APT
* configuration) to the subprocess.
* 603 Media Changed, with the Failed field set to \b true if the
* user cancelled the media change).
*/
- bool MediaChange(string Message);
+ bool MediaChange(std::string Message);
/** \brief Invoked when the worked process dies unexpectedly.
*
/** \brief The most recent status string received from the
* subprocess.
*/
- string Status;
+ std::string Status;
/** \brief How many bytes of the file have been downloaded. Zero
* if the current progress of the file cannot be determined.
*/
- unsigned long CurrentSize;
+ unsigned long long CurrentSize;
/** \brief The total number of bytes to be downloaded. Zero if the
* total size of the final is unknown.
*/
- unsigned long TotalSize;
+ unsigned long long TotalSize;
/** \brief How much of the file was already downloaded prior to
* starting this worker.
*/
- unsigned long ResumePoint;
+ unsigned long long ResumePoint;
/** \brief Tell the subprocess to download the given item.
*
* Closes the file descriptors; if MethodConfig::NeedsCleanup is
* \b false, also rudely interrupts the worker with a SIGINT.
*/
- ~Worker();
+ virtual ~Worker();
+
+private:
+ APT_HIDDEN void PrepareFiles(char const * const caller, pkgAcquire::Queue::QItem const * const Itm);
};
/** @} */