]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/BASE/AliHLTHOMERProxyHandler.cxx
updated my Jet Hadron Correlations task, updated event mixing, included multiple...
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTHOMERProxyHandler.cxx
index 5696f8c1e115d2d801a57e271892344a2af6dd0b..73d837b59645a8bd1f0905098ac7689a4d28b08c 100644 (file)
 // or
 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
 
-#if __GNUC__>= 3
-   using namespace std;
-#endif
-
 #include "TDOMParser.h"
 #include "TSocket.h"
 #include "TSystem.h"
@@ -68,12 +64,8 @@ AliHLTHOMERProxyHandler::~AliHLTHOMERProxyHandler() {
 //##################################################################################
 Int_t AliHLTHOMERProxyHandler::Initialize() {
   // see header file for class documentation
-
-  Int_t iResult = 0 ;
-
   IdentifyRealm();
-
-  return iResult;
+  return 0;
 }
 
 /*
@@ -96,7 +88,7 @@ Int_t AliHLTHOMERProxyHandler::FillSourceList(TList *srcList) {
     iResult = ProcessXmlRpcResponse();
 
   if (iResult < 0) {
-    HLTError(Form("Filling SourceList failed."));
+    HLTError("Filling SourceList failed.");
   }
 
   return iResult;
@@ -114,7 +106,7 @@ const Char_t *AliHLTHOMERProxyHandler::fgkHOMERProxyNode[] = {
   "alihlt-dcs0.cern.ch",
   "alihlt-vobox0.cern.ch",
   "alihlt-gw0.kip.uni-heidelberg.de",
-  "localhost"
+  "localhost",
   "portal-dcs1.internal", 
   "alihlt-dcs1.cern.ch",
   "alihlt-vobox1.cern.ch",
@@ -127,6 +119,8 @@ void AliHLTHOMERProxyHandler::IdentifyRealm() {
   // see header file for class documentation
 
   TString hostIP(gSystem->GetHostByName(gSystem->HostName()).GetHostAddress());
+  
+  HLTInfo(hostIP.Data());
 
   if ( hostIP.Contains("10.162.") )
     fRealm = kHLT;
@@ -134,15 +128,18 @@ void AliHLTHOMERProxyHandler::IdentifyRealm() {
     fRealm = kACR;
   else if ( hostIP.Contains("129.206.") )
     fRealm = kKIP;
-  else  if ( hostIP.Contains("137.138") || 
-            hostIP.Contains("128.141") ||
-            hostIP.Contains("127.0.") 
+  else  if ( hostIP.Contains("137.138") 
+            || hostIP.Contains("128.141") 
+            || hostIP.Contains("127.0.") 
+            || hostIP.Contains("192.168")
             )
     fRealm = kGPN;
   else {
     fRealm = kLoc;
   }
 
+  //fRealm = kLoc;
+
   return;
 }
 
@@ -174,8 +171,20 @@ Int_t AliHLTHOMERProxyHandler::RequestXmlRpcResponse() {
                    fgkHOMERProxyNode[fRealm], proxyPort,
                    fgkHOMERProxyNode[fRealm+kHOMERRealmsMax],proxyPort));
 
-      fRealm = -1;
-      return -1;
+      HLTWarning(Form("trying %s:%d now.",
+                     fgkHOMERProxyNode[kLoc],proxyPort));
+      socket = new TSocket(fgkHOMERProxyNode[kLoc], proxyPort);
+      if ( ! socket->IsValid() ) {
+        HLTError(Form("Failed to create socket to %s:%d , %s:%d and %s:%d.",
+                     fgkHOMERProxyNode[fRealm], proxyPort,
+                     fgkHOMERProxyNode[fRealm+kHOMERRealmsMax],proxyPort,
+                     fgkHOMERProxyNode[kLoc], proxyPort));
+        fRealm = -1;
+        return -1;
+      }
+      else {
+        fRealm = kLoc;
+      }
     }
     else
       fRealm = fRealm+kHOMERRealmsMax;
@@ -184,7 +193,7 @@ Int_t AliHLTHOMERProxyHandler::RequestXmlRpcResponse() {
   // -- send request
   // -----------------
 
-  Char_t reqMsg[] = "PUT / HTTP/1.1\r\n\
+  Char_t reqMsg[] = "POST / HTTP/1.1\r\n\
 User-Agent: curl/7.18.0 (x86_64-pc-linux-gnu) libcurl/7.18.0 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.1\r\n\
 Host: localhost:10000\r\n\
 Accept: */*\r\n\
@@ -220,7 +229,7 @@ Content-Length: 68\r\n\
 
       iResult = socket->RecvRaw(&buffer[bufferLength], 1);
       if ( iResult < 0) {
-       HLTError(Form("Error reading form socket."));
+       HLTError("Error reading form socket.");
        socket->Close();
        return iResult;
       }
@@ -268,7 +277,10 @@ Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
   TDOMParser xmlParser;
   xmlParser.SetValidate(kFALSE);
 
-  HLTDebug(Form("XMLResponse: %s",fXmlRpcResponse.Data()));
+  //NOTE Have to use a temporary variable for printing the XML responce,
+  // because Form might overrun its internal buffer and crash for large strings.
+  TString infoMsg = Form("XMLResponse: %s",fXmlRpcResponse.Data());
+  HLTInfo(infoMsg.Data());
   
   iResult = xmlParser.ParseBuffer(fXmlRpcResponse.Data(), fXmlRpcResponse.Length());
   if ( iResult < 0 ) {
@@ -283,7 +295,7 @@ Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
     GetChildren()->GetChildren()->GetChildren()->GetChildren();
   
   if ( strcmp( node->GetNodeName(), "string" ) ) {
-    HLTError(Form("No node 'string' in XmlRpcResponse."));
+    HLTError("No node 'string' in XmlRpcResponse.");
     return -1;
   }
 
@@ -304,7 +316,7 @@ Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
   }
   
   if ( !xmlParser.GetXMLDocument()->GetRootNode()->HasChildren() ) {
-    HLTWarning(Form("No Services active."));
+    HLTWarning("No Services active.");
     return 1;
   }
 
@@ -318,7 +330,7 @@ Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
     // -- Add service to list
     iResult = AddService( serviceNode->GetChildren() );
     if ( iResult > 0 ) {
-      HLTWarning(Form("Incomplete Service not added."));
+      HLTWarning("Incomplete Service not added.");
       iResult = 0;
     }
   } while ( ( serviceNode = prevServiceNode->GetNextNode() ) && !iResult );
@@ -340,7 +352,7 @@ Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
 
   Int_t iResult = 0;
 
-  HLTInfo(Form(">> New service"));    
+  HLTInfo(">> New service");    
 
   TXMLNode* serviceNode = innerNode;
 
@@ -384,7 +396,7 @@ Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
 
 
   // -- Change hostame from service with proxy, if outside HLT
-  if ( fRealm != kHLT || fRealm != kHLT+kHOMERRealmsMax )
+  if ( fRealm != kHLT && fRealm != kHLT+kHOMERRealmsMax )
     hostname = fgkHOMERProxyNode[fRealm];
 
 
@@ -400,7 +412,7 @@ Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
     TXMLNode* blocks = serviceNode->GetChildren();
 
     if ( ! blocks ) {
-      HLTError(Form("No blocks present"));
+      HLTError("No blocks present");
       return 1;
     }
       
@@ -408,7 +420,7 @@ Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
     TXMLNode* prevBlockNode = NULL;
 
     if ( ! blockNode ) {
-      HLTError(Form("No block present in the blocks tag"));
+      HLTError("No block present in the blocks tag");
       return 1;
     }
       
@@ -424,7 +436,7 @@ Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
       TXMLNode *prevDataNode = NULL;
 
       if ( ! dataNode ) {
-       HLTError(Form("No data specification tags present in block tag."));
+       HLTError("No data specification tags present in block tag.");
        return 1;
       }
       // -- data spec loop