summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2009-02-02 12:14:36 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2009-02-02 12:14:36 +0100
commitebb461fdf02ee3e038d4b3a4ab1a0a60188edf9a (patch)
tree2f18a15e77fbb24ddd8328422a6b5ce6b6359e46 /apt-pkg
parentd043faa8dfcfa4c432558f3f1b4ec149e33f9d8e (diff)
* [ABI break] merge support for http redirects, thanks to
Jeff Licquia and Anthony Towns * [ABI break] use int for the package IDs (thanks to Steve Cotton) - Galician updated. Closes: #509151 - Catalan updated. Closes: #509375 - Vietnamese updated. Closes: #509422 - Traditional Chinese added. Closes: #510664 * COPYING: - Actualized. Removed obsolete Qt section, added GPLv2 clause. (Closes: #440049, #509337) * Clarify the --help for 'purge' (LP: #243948)
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/acquire-method.cc32
-rw-r--r--apt-pkg/acquire-method.h2
-rw-r--r--apt-pkg/acquire-worker.cc14
-rw-r--r--apt-pkg/makefile2
-rw-r--r--apt-pkg/pkgcache.h8
5 files changed, 53 insertions, 5 deletions
diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc
index 26f992bcf..150fbb77b 100644
--- a/apt-pkg/acquire-method.cc
+++ b/apt-pkg/acquire-method.cc
@@ -452,6 +452,38 @@ void pkgAcqMethod::Status(const char *Format,...)
}
/*}}}*/
+// AcqMethod::Redirect - Send a redirect message /*{{{*/
+// ---------------------------------------------------------------------
+/* This method sends the redirect message and also manipulates the queue
+ to keep the pipeline synchronized. */
+void pkgAcqMethod::Redirect(const string &NewURI)
+{
+ string CurrentURI = "<UNKNOWN>";
+ if (Queue != 0)
+ CurrentURI = Queue->Uri;
+
+ char S[1024];
+ snprintf(S, sizeof(S)-50, "103 Redirect\nURI: %s\nNew-URI: %s\n\n",
+ CurrentURI.c_str(), NewURI.c_str());
+
+ if (write(STDOUT_FILENO,S,strlen(S)) != (ssize_t)strlen(S))
+ exit(100);
+
+ // Change the URI for the request.
+ Queue->Uri = NewURI;
+
+ /* To keep the pipeline synchronized, move the current request to
+ the end of the queue, past the end of the current pipeline. */
+ FetchItem *I;
+ for (I = Queue; I->Next != 0; I = I->Next) ;
+ I->Next = Queue;
+ Queue = Queue->Next;
+ I->Next->Next = 0;
+ if (QueueBack == 0)
+ QueueBack = I->Next;
+}
+ /*}}}*/
+
// AcqMethod::FetchResult::FetchResult - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h
index 18c2cf009..99a4605b1 100644
--- a/apt-pkg/acquire-method.h
+++ b/apt-pkg/acquire-method.h
@@ -86,6 +86,8 @@ class pkgAcqMethod
void Log(const char *Format,...);
void Status(const char *Format,...);
+ void Redirect(const string &NewURI);
+
int Run(bool Single = false);
inline void SetFailReason(string Msg) {FailReason = Msg;};
inline void SetIP(string aIP) {IP = aIP;};
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index 1a754dae9..78c68737c 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -220,6 +220,20 @@ bool pkgAcquire::Worker::RunMessages()
Status = LookupTag(Message,"Message");
break;
+ // 103 Redirect
+ case 103:
+ {
+ if (Itm == 0)
+ {
+ _error->Error("Method gave invalid 103 Redirect message");
+ break;
+ }
+
+ string NewURI = LookupTag(Message,"New-URI",URI.c_str());
+ Itm->URI = NewURI;
+ break;
+ }
+
// 200 URI Start
case 200:
{
diff --git a/apt-pkg/makefile b/apt-pkg/makefile
index 1b78c94f6..087f17740 100644
--- a/apt-pkg/makefile
+++ b/apt-pkg/makefile
@@ -13,7 +13,7 @@ include ../buildlib/defaults.mak
# methods/makefile - FIXME
LIBRARY=apt-pkg
LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER)
-MAJOR=4.6
+MAJOR=4.7
MINOR=0
SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil
APT_DOMAIN:=libapt-pkg$(MAJOR)
diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h
index 59d5003bb..759e9a225 100644
--- a/apt-pkg/pkgcache.h
+++ b/apt-pkg/pkgcache.h
@@ -214,7 +214,7 @@ struct pkgCache::Package
unsigned char InstState; // Flags
unsigned char CurrentState; // State
- unsigned short ID;
+ unsigned int ID;
unsigned long Flags;
};
@@ -235,7 +235,7 @@ struct pkgCache::PackageFile
// Linked list
map_ptrloc NextFile; // PackageFile
- unsigned short ID;
+ unsigned int ID;
time_t mtime; // Modification time for the file
};
@@ -272,7 +272,7 @@ struct pkgCache::Version
map_ptrloc Size; // These are the .deb size
map_ptrloc InstalledSize;
unsigned short Hash;
- unsigned short ID;
+ unsigned int ID;
unsigned char Priority;
};
@@ -289,7 +289,7 @@ struct pkgCache::Description
map_ptrloc NextDesc; // Description
map_ptrloc ParentPkg; // Package
- unsigned short ID;
+ unsigned int ID;
};
struct pkgCache::Dependency