if (Res.ResumePoint != 0)
End += snprintf(End,sizeof(S)-4 - (End - S),"Resume-Point: %lu\n",
Res.ResumePoint);
+ if (UsedMirror.empty() == false)
+ End += snprintf(End,sizeof(S)-4 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
strcat(End,"\n");
if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
Tmp->Uri = LookupTag(Message,"URI");
Tmp->DestFile = LookupTag(Message,"FileName");
- if (StrToTime(LookupTag(Message,"Last-Modified"),Tmp->LastModified) == false)
+ if (RFC1123StrToTime(LookupTag(Message,"Last-Modified").c_str(),Tmp->LastModified) == false)
Tmp->LastModified = 0;
Tmp->IndexFile = StringToBool(LookupTag(Message,"Index-File"),false);
+ Tmp->FailIgnore = StringToBool(LookupTag(Message,"Fail-Ignore"),false);
Tmp->Next = 0;
// Append it to the list
// sprintf the description
char S[1024];
- unsigned int Len = snprintf(S,sizeof(S)-4,"101 Log\nURI: %s\n"
- "Message: ",CurrentURI.c_str());
-
+ unsigned int Len = snprintf(S,sizeof(S)-4,"101 Log\n"
+ "URI: %s\n"
+ "UsedMirror: %s\n"
+ "Message: ", UsedMirror.c_str(),
+ CurrentURI.c_str());
vsnprintf(S+Len,sizeof(S)-4-Len,Format,args);
strcat(S,"\n\n");
// sprintf the description
char S[1024];
- unsigned int Len = snprintf(S,sizeof(S)-4,"102 Status\nURI: %s\n"
- "Message: ",CurrentURI.c_str());
+ unsigned int Len = snprintf(S,sizeof(S)-4,"102 Status\n"
+ "URI: %s\n"
+ "UsedMirror: %s\n"
+ "Message: ",UsedMirror.c_str(),
+ CurrentURI.c_str());
vsnprintf(S+Len,sizeof(S)-4-Len,Format,args);
strcat(S,"\n\n");
exit(100);
}
/*}}}*/
+// 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 /*{{{*/
// ---------------------------------------------------------------------
/* */