|
@@ -136,7 +136,7 @@ static bool DoConnect(struct addrinfo *Addr,std::string Host,
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
|
|
|
|
|
// Connect to a given Hostname
|
|
// Connect to a given Hostname
|
|
|
-bool ConnectAfterSrvRecords(std::string Host,int Port,const char *Service,
|
|
|
|
|
|
|
+bool ConnectToHostname(std::string Host,int Port,const char *Service,
|
|
|
int DefPort,int &Fd,
|
|
int DefPort,int &Fd,
|
|
|
unsigned long TimeOut,pkgAcqMethod *Owner)
|
|
unsigned long TimeOut,pkgAcqMethod *Owner)
|
|
|
{
|
|
{
|
|
@@ -261,36 +261,34 @@ bool ConnectAfterSrvRecords(std::string Host,int Port,const char *Service,
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// Connect - Connect to a server /*{{{*/
|
|
// Connect - Connect to a server /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
-/* Performs a connection to the server */
|
|
|
|
|
|
|
+/* Performs a connection to the server (including SRV record lookup) */
|
|
|
bool Connect(std::string Host,int Port,const char *Service,
|
|
bool Connect(std::string Host,int Port,const char *Service,
|
|
|
int DefPort,int &Fd,
|
|
int DefPort,int &Fd,
|
|
|
unsigned long TimeOut,pkgAcqMethod *Owner)
|
|
unsigned long TimeOut,pkgAcqMethod *Owner)
|
|
|
{
|
|
{
|
|
|
-#if 0
|
|
|
|
|
if (_error->PendingError() == true)
|
|
if (_error->PendingError() == true)
|
|
|
return false;
|
|
return false;
|
|
|
-#endif
|
|
|
|
|
|
|
|
|
|
if(LastHost != Host || LastPort != Port)
|
|
if(LastHost != Host || LastPort != Port)
|
|
|
{
|
|
{
|
|
|
SrvRecords.clear();
|
|
SrvRecords.clear();
|
|
|
bool res = GetSrvRecords(Host, DefPort, SrvRecords);
|
|
bool res = GetSrvRecords(Host, DefPort, SrvRecords);
|
|
|
}
|
|
}
|
|
|
|
|
+ // we have no SrvRecords for this host, connect right away
|
|
|
if(SrvRecords.size() == 0)
|
|
if(SrvRecords.size() == 0)
|
|
|
- return ConnectAfterSrvRecords(Host, Port, Service, DefPort, Fd,
|
|
|
|
|
|
|
+ return ConnectToHostname(Host, Port, Service, DefPort, Fd,
|
|
|
TimeOut, Owner);
|
|
TimeOut, Owner);
|
|
|
|
|
|
|
|
- bool connected = false;
|
|
|
|
|
|
|
+ // try to connect in the priority order of the srv records
|
|
|
while(SrvRecords.size() > 0)
|
|
while(SrvRecords.size() > 0)
|
|
|
{
|
|
{
|
|
|
Host = SrvRecords[0].target;
|
|
Host = SrvRecords[0].target;
|
|
|
- connected = ConnectAfterSrvRecords(Host, Port, Service, DefPort, Fd,
|
|
|
|
|
- TimeOut, Owner);
|
|
|
|
|
- if(connected == true)
|
|
|
|
|
|
|
+ if(ConnectToHostname(Host, Port, Service, DefPort, Fd, TimeOut, Owner))
|
|
|
return true;
|
|
return true;
|
|
|
|
|
|
|
|
// we couldn't connect to this one, use the next
|
|
// we couldn't connect to this one, use the next
|
|
|
SrvRecords.erase(SrvRecords.begin());
|
|
SrvRecords.erase(SrvRecords.begin());
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|