ROOT logo
//-*- Mode: C++ -*-
// $Id: AliHLTHOMERProxyHandler.cxx  $
//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Jochen Thaeder <thaeder@kip.uni-heidelberg.de>        *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************

/** @file   AliHLTHOMERProxyHandler.cxx
    @author Jochen Thaeder
    @date
    @brief  HOMER proxy handler for HomerManger
*/

// see header file for class documentation
// or
// refer to README to build package
// or
// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt

#include "TDOMParser.h"
#include "TSocket.h"
#include "TSystem.h"
// -- -- -- -- -- -- -- 
#include "AliHLTHOMERProxyHandler.h"
// -- -- -- -- -- -- -- 

ClassImp(AliHLTHOMERProxyHandler)

/*
 * ---------------------------------------------------------------------------------
 *                            Constructor / Destructor
 * ---------------------------------------------------------------------------------
 */

//##################################################################################
AliHLTHOMERProxyHandler::AliHLTHOMERProxyHandler() :
  fRealm(kHLT),
  fXmlRpcResponse(""),
  fSourceList(NULL) {
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

//##################################################################################
AliHLTHOMERProxyHandler::~AliHLTHOMERProxyHandler() {
  // see header file for class documentation

}

//##################################################################################
Int_t AliHLTHOMERProxyHandler::Initialize() {
  // see header file for class documentation
  IdentifyRealm();
  return 0;
}

/*
 * ---------------------------------------------------------------------------------
 *                             Source List - public
 * ---------------------------------------------------------------------------------
 */

//##################################################################################
Int_t AliHLTHOMERProxyHandler::FillSourceList(TList *srcList) {
  // see header file for class documentation

  Int_t iResult = 0;

  fSourceList = srcList;

  iResult = RequestXmlRpcResponse();

  if (!iResult)
    iResult = ProcessXmlRpcResponse();

  if (iResult < 0) {
    HLTError("Filling SourceList failed.");
  }

  return iResult;
}

/*
 * ---------------------------------------------------------------------------------
 *                        Realms - private
 * ---------------------------------------------------------------------------------
 */

//##################################################################################
const Char_t *AliHLTHOMERProxyHandler::fgkHOMERProxyNode[] = { 
  "portal-dcs0.internal", 
  "alihlt-dcs0.cern.ch",
  "alihlt-vobox0.cern.ch",
  "alihlt-gw0.kip.uni-heidelberg.de",
  "localhost",
  "portal-dcs1.internal", 
  "alihlt-dcs1.cern.ch",
  "alihlt-vobox1.cern.ch",
  "alihlt-gw1.kip.uni-heidelberg.de",
  "localhost"
};

//##################################################################################
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;
  else if ( hostIP.Contains("10.160.") || hostIP.Contains("10.161.") )
    fRealm = kACR;
  else if ( hostIP.Contains("129.206.") )
    fRealm = kKIP;
  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;
}

/*
 * ---------------------------------------------------------------------------------
 *                        Proxy Communication - private
 * ---------------------------------------------------------------------------------
 */

//##################################################################################
Int_t AliHLTHOMERProxyHandler::RequestXmlRpcResponse() {
  // see header file for class documentation

  Int_t iResult = 0;

  // -- open socket
  // ----------------

  Int_t proxyPort = 19999;

  TSocket *socket = new TSocket(fgkHOMERProxyNode[fRealm], proxyPort);
  if ( ! socket->IsValid() ) {
    HLTWarning(Form("Failed to create socket to %s:%d,",fgkHOMERProxyNode[fRealm], proxyPort));
    HLTWarning(Form("trying %s:%d now.", fgkHOMERProxyNode[fRealm+kHOMERRealmsMax],proxyPort));

    socket = new TSocket(fgkHOMERProxyNode[fRealm+kHOMERRealmsMax], proxyPort);
    if ( ! socket->IsValid() ) {
      HLTError(Form("Failed to create socket to %s:%d and %s:%d.",
		    fgkHOMERProxyNode[fRealm], proxyPort,
		    fgkHOMERProxyNode[fRealm+kHOMERRealmsMax],proxyPort));

      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;
  }

  // -- send request
  // -----------------

  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\
Content-type: text/xml\r\n\
Content-Length: 68\r\n\
\r\n<methodCall><methodName>getTcpDumpServices</methodName></methodCall>\r\n";

  iResult = socket->SendRaw( reqMsg, strlen(reqMsg) );
  if ( iResult < 1 || 
       iResult !=  static_cast<Int_t>(strlen(reqMsg))) {
    HLTError(Form("Error sending! -- send length %d  -- msg length %d.", iResult, static_cast<Int_t>(strlen(reqMsg)) ));
    socket->Close();
    return iResult;
  }
  
  // -- receive answer
  // -------------------

  const Int_t bufferSize = 1024;
  Char_t buffer[bufferSize];

  Bool_t isXmlRpc = kFALSE;

  fXmlRpcResponse = "";

  // -- loop for getting full xmlRPC response
  while(1) {

    Int_t bufferLength = 0;
    
    // -- loop for reading until end of line
    while (1) {

      iResult = socket->RecvRaw(&buffer[bufferLength], 1);
      if ( iResult < 0) {
	HLTError("Error reading form socket.");
	socket->Close();
	return iResult;
      }
            
      // -- Checking for  end of line
      if ( buffer[bufferLength] == 10 ) {
	buffer[bufferLength] = 0;
	break;
      }
      
      ++bufferLength;
    }

    TString bufferString(buffer);

    // -- Checking for start of XML response
    if ( bufferString.BeginsWith("<?xml") )
      isXmlRpc = kTRUE;

    // -- Append the xml response
    if (isXmlRpc) {
      fXmlRpcResponse.Append(bufferString);
    }

    // -- Checking for end of XML response
    if( ! bufferString.CompareTo("</methodResponse>") ) 
      break;
  }
  
  // -- close socket
  socket->Close();

  return 0;
}

//##################################################################################
Int_t AliHLTHOMERProxyHandler::ProcessXmlRpcResponse() {
  // see header file for class documentation

  Int_t iResult = 0;

  // -- Parse XML RPC Response
  // ---------------------------

  TDOMParser xmlParser;
  xmlParser.SetValidate(kFALSE);

  //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 ) {
    HLTError(Form("Parsing buffer with error: %s", 
		  xmlParser.GetParseCodeMessage(xmlParser.GetParseCode()) ));
    

    return iResult;
  }

  TXMLNode * node = xmlParser.GetXMLDocument()->GetRootNode()->
    GetChildren()->GetChildren()->GetChildren()->GetChildren();
  
  if ( strcmp( node->GetNodeName(), "string" ) ) {
    HLTError("No node 'string' in XmlRpcResponse.");
    return -1;
  }

  // -- Parse Content
  // ------------------

  // -- Get Content
  TString xmlContent(node->GetText() );

  HLTDebug(Form("XMLContent: %s",xmlContent.Data()));

  iResult = xmlParser.ParseBuffer(xmlContent.Data(), xmlContent.Length());
  if ( iResult < 0 ) {
    HLTError(Form("Parsing buffer with error: %s", 
		  xmlParser.GetParseCodeMessage(xmlParser.GetParseCode()) ));

    return iResult;
  }
  
  if ( !xmlParser.GetXMLDocument()->GetRootNode()->HasChildren() ) {
    HLTWarning("No Services active.");
    return 1;
  }

  // -- Loop over all service nodes
  TXMLNode* serviceNode = xmlParser.GetXMLDocument()->GetRootNode()->GetChildren();
  TXMLNode* prevServiceNode = NULL;
  
  do {
    prevServiceNode = serviceNode;

    // -- Add service to list
    iResult = AddService( serviceNode->GetChildren() );
    if ( iResult > 0 ) {
      HLTWarning("Incomplete Service not added.");
      iResult = 0;
    }
  } while ( ( serviceNode = prevServiceNode->GetNextNode() ) && !iResult );



  return iResult;
}

/*
 * ---------------------------------------------------------------------------------
 *                            Source Resolving - private
 * ---------------------------------------------------------------------------------
 */

//##################################################################################
Int_t AliHLTHOMERProxyHandler::AddService(TXMLNode *innerNode) {
  // see header file for class documentation

  Int_t iResult = 0;

  HLTInfo(">> New service");    

  TXMLNode* serviceNode = innerNode;

  // -- Loop over all service properties and 
  //    read them from the service tag
  // -----------------------------------------

  TString hostname          = "";
  Int_t   port              = 0;
  TString dataType          = "";
  TString dataOrigin        = "";
  TString dataSpecification = "";

  TXMLNode* prevInnerNode = NULL;

  // -- Retrieve hostname and port
  // -------------------------------

  do {
    prevInnerNode = innerNode;
    
    if ( ! strcmp(innerNode->GetNodeName(), "text" ) )
      continue;
        
    // -- hostname
    if ( ! strcmp( innerNode->GetNodeName(), "address") ) {
      HLTInfo(Form("  > %s ++ %s", innerNode->GetNodeName(), innerNode->GetText() ));
      hostname = innerNode->GetText();
    }
    else if ( ! strcmp( innerNode->GetNodeName(), "port") ) {
      HLTInfo(Form("  > %s ++ %s", innerNode->GetNodeName(), innerNode->GetText() ));
      TString portS(innerNode->GetText());
      if ( portS.IsDigit() )
	port = portS.Atoi();
      else {
	HLTError(Form("Port %s is not a digit.", portS.Data()));
	iResult = -1;
      }
    }
  } while ( ( innerNode = prevInnerNode->GetNextNode() ) && !iResult );


  // -- Change hostame from service with proxy, if outside HLT
  if ( fRealm != kHLT && fRealm != kHLT+kHOMERRealmsMax )
    hostname = fgkHOMERProxyNode[fRealm];


  // -- Get Data Specifications from blocks
  // ----------------------------------------

  do {
    prevInnerNode = serviceNode;

    if ( strcmp( serviceNode->GetNodeName(), "blocks") )
      continue;
 
    TXMLNode* blocks = serviceNode->GetChildren();

    if ( ! blocks ) {
      HLTError("No blocks present");
      return 1;
    }
      
    TXMLNode* blockNode = blocks->GetNextNode();
    TXMLNode* prevBlockNode = NULL;

    if ( ! blockNode ) {
      HLTError("No block present in the blocks tag");
      return 1;
    }
      
    // -- blocks loop 
    
    do {
      prevBlockNode = blockNode;
      
      if ( strcmp( blockNode->GetNodeName(), "block") )
	continue;

      TXMLNode *dataNode = blockNode->GetChildren();
      TXMLNode *prevDataNode = NULL;

      if ( ! dataNode ) {
	HLTError("No data specification tags present in block tag.");
	return 1;
      }
      // -- data spec loop
      
      do {
	prevDataNode = dataNode;

	if ( ! strcmp(dataNode->GetNodeName(), "text" ) )
	  continue;

	HLTInfo(Form(" %s ++ %s", dataNode->GetNodeName(), dataNode->GetText() ));	

	if ( ! strcmp( dataNode->GetNodeName(), "dataorigin") ) {
	  dataOrigin = dataNode->GetText();
	}
	else if ( ! strcmp( dataNode->GetNodeName(), "datatype") ) {
	  dataType = dataNode->GetText();
	}
	else if ( ! strcmp( dataNode->GetNodeName(), "dataspecification") ) {
	  dataSpecification = dataNode->GetText();    
	}
      } while ( ( dataNode = prevDataNode->GetNextNode() ) && !iResult );
      
      // -- data spec loop

      // -- Check the service properties
      // ---------------------------------
      
      // -- Check for completeness of the source properties
      if ( hostname.IsNull() || !port || dataOrigin.IsNull() ||
	   dataType.IsNull() || dataSpecification.IsNull() ) {
	HLTWarning(Form("Service provides not all values:\n\thostname\t\t %s\n\tport\t\t\t %d\n\tdataorigin\t\t %s\n\tdatatype\t\t %s\n\tdataspecification\t 0x%08X", 
			hostname.Data(), port, dataOrigin.Data(), dataType.Data(), dataSpecification.Atoi()));
	
	return 1;
      }

      // -- Create new source
      // ----------------------
      
      AliHLTHOMERSourceDesc * source = new AliHLTHOMERSourceDesc();
      source->SetService( hostname, port, dataOrigin, dataType, dataSpecification );
      
      fSourceList->Add( source );
      
      HLTInfo(Form( "New Source added : %s", source->GetSourceName().Data()));

    } while ( ( blockNode = prevBlockNode->GetNextNode() ) && !iResult );


    // -- blocks loop
    
  } while ( ( serviceNode = prevInnerNode->GetNextNode() ) && !iResult );
  
  return iResult;
}


 AliHLTHOMERProxyHandler.cxx:1
 AliHLTHOMERProxyHandler.cxx:2
 AliHLTHOMERProxyHandler.cxx:3
 AliHLTHOMERProxyHandler.cxx:4
 AliHLTHOMERProxyHandler.cxx:5
 AliHLTHOMERProxyHandler.cxx:6
 AliHLTHOMERProxyHandler.cxx:7
 AliHLTHOMERProxyHandler.cxx:8
 AliHLTHOMERProxyHandler.cxx:9
 AliHLTHOMERProxyHandler.cxx:10
 AliHLTHOMERProxyHandler.cxx:11
 AliHLTHOMERProxyHandler.cxx:12
 AliHLTHOMERProxyHandler.cxx:13
 AliHLTHOMERProxyHandler.cxx:14
 AliHLTHOMERProxyHandler.cxx:15
 AliHLTHOMERProxyHandler.cxx:16
 AliHLTHOMERProxyHandler.cxx:17
 AliHLTHOMERProxyHandler.cxx:18
 AliHLTHOMERProxyHandler.cxx:19
 AliHLTHOMERProxyHandler.cxx:20
 AliHLTHOMERProxyHandler.cxx:21
 AliHLTHOMERProxyHandler.cxx:22
 AliHLTHOMERProxyHandler.cxx:23
 AliHLTHOMERProxyHandler.cxx:24
 AliHLTHOMERProxyHandler.cxx:25
 AliHLTHOMERProxyHandler.cxx:26
 AliHLTHOMERProxyHandler.cxx:27
 AliHLTHOMERProxyHandler.cxx:28
 AliHLTHOMERProxyHandler.cxx:29
 AliHLTHOMERProxyHandler.cxx:30
 AliHLTHOMERProxyHandler.cxx:31
 AliHLTHOMERProxyHandler.cxx:32
 AliHLTHOMERProxyHandler.cxx:33
 AliHLTHOMERProxyHandler.cxx:34
 AliHLTHOMERProxyHandler.cxx:35
 AliHLTHOMERProxyHandler.cxx:36
 AliHLTHOMERProxyHandler.cxx:37
 AliHLTHOMERProxyHandler.cxx:38
 AliHLTHOMERProxyHandler.cxx:39
 AliHLTHOMERProxyHandler.cxx:40
 AliHLTHOMERProxyHandler.cxx:41
 AliHLTHOMERProxyHandler.cxx:42
 AliHLTHOMERProxyHandler.cxx:43
 AliHLTHOMERProxyHandler.cxx:44
 AliHLTHOMERProxyHandler.cxx:45
 AliHLTHOMERProxyHandler.cxx:46
 AliHLTHOMERProxyHandler.cxx:47
 AliHLTHOMERProxyHandler.cxx:48
 AliHLTHOMERProxyHandler.cxx:49
 AliHLTHOMERProxyHandler.cxx:50
 AliHLTHOMERProxyHandler.cxx:51
 AliHLTHOMERProxyHandler.cxx:52
 AliHLTHOMERProxyHandler.cxx:53
 AliHLTHOMERProxyHandler.cxx:54
 AliHLTHOMERProxyHandler.cxx:55
 AliHLTHOMERProxyHandler.cxx:56
 AliHLTHOMERProxyHandler.cxx:57
 AliHLTHOMERProxyHandler.cxx:58
 AliHLTHOMERProxyHandler.cxx:59
 AliHLTHOMERProxyHandler.cxx:60
 AliHLTHOMERProxyHandler.cxx:61
 AliHLTHOMERProxyHandler.cxx:62
 AliHLTHOMERProxyHandler.cxx:63
 AliHLTHOMERProxyHandler.cxx:64
 AliHLTHOMERProxyHandler.cxx:65
 AliHLTHOMERProxyHandler.cxx:66
 AliHLTHOMERProxyHandler.cxx:67
 AliHLTHOMERProxyHandler.cxx:68
 AliHLTHOMERProxyHandler.cxx:69
 AliHLTHOMERProxyHandler.cxx:70
 AliHLTHOMERProxyHandler.cxx:71
 AliHLTHOMERProxyHandler.cxx:72
 AliHLTHOMERProxyHandler.cxx:73
 AliHLTHOMERProxyHandler.cxx:74
 AliHLTHOMERProxyHandler.cxx:75
 AliHLTHOMERProxyHandler.cxx:76
 AliHLTHOMERProxyHandler.cxx:77
 AliHLTHOMERProxyHandler.cxx:78
 AliHLTHOMERProxyHandler.cxx:79
 AliHLTHOMERProxyHandler.cxx:80
 AliHLTHOMERProxyHandler.cxx:81
 AliHLTHOMERProxyHandler.cxx:82
 AliHLTHOMERProxyHandler.cxx:83
 AliHLTHOMERProxyHandler.cxx:84
 AliHLTHOMERProxyHandler.cxx:85
 AliHLTHOMERProxyHandler.cxx:86
 AliHLTHOMERProxyHandler.cxx:87
 AliHLTHOMERProxyHandler.cxx:88
 AliHLTHOMERProxyHandler.cxx:89
 AliHLTHOMERProxyHandler.cxx:90
 AliHLTHOMERProxyHandler.cxx:91
 AliHLTHOMERProxyHandler.cxx:92
 AliHLTHOMERProxyHandler.cxx:93
 AliHLTHOMERProxyHandler.cxx:94
 AliHLTHOMERProxyHandler.cxx:95
 AliHLTHOMERProxyHandler.cxx:96
 AliHLTHOMERProxyHandler.cxx:97
 AliHLTHOMERProxyHandler.cxx:98
 AliHLTHOMERProxyHandler.cxx:99
 AliHLTHOMERProxyHandler.cxx:100
 AliHLTHOMERProxyHandler.cxx:101
 AliHLTHOMERProxyHandler.cxx:102
 AliHLTHOMERProxyHandler.cxx:103
 AliHLTHOMERProxyHandler.cxx:104
 AliHLTHOMERProxyHandler.cxx:105
 AliHLTHOMERProxyHandler.cxx:106
 AliHLTHOMERProxyHandler.cxx:107
 AliHLTHOMERProxyHandler.cxx:108
 AliHLTHOMERProxyHandler.cxx:109
 AliHLTHOMERProxyHandler.cxx:110
 AliHLTHOMERProxyHandler.cxx:111
 AliHLTHOMERProxyHandler.cxx:112
 AliHLTHOMERProxyHandler.cxx:113
 AliHLTHOMERProxyHandler.cxx:114
 AliHLTHOMERProxyHandler.cxx:115
 AliHLTHOMERProxyHandler.cxx:116
 AliHLTHOMERProxyHandler.cxx:117
 AliHLTHOMERProxyHandler.cxx:118
 AliHLTHOMERProxyHandler.cxx:119
 AliHLTHOMERProxyHandler.cxx:120
 AliHLTHOMERProxyHandler.cxx:121
 AliHLTHOMERProxyHandler.cxx:122
 AliHLTHOMERProxyHandler.cxx:123
 AliHLTHOMERProxyHandler.cxx:124
 AliHLTHOMERProxyHandler.cxx:125
 AliHLTHOMERProxyHandler.cxx:126
 AliHLTHOMERProxyHandler.cxx:127
 AliHLTHOMERProxyHandler.cxx:128
 AliHLTHOMERProxyHandler.cxx:129
 AliHLTHOMERProxyHandler.cxx:130
 AliHLTHOMERProxyHandler.cxx:131
 AliHLTHOMERProxyHandler.cxx:132
 AliHLTHOMERProxyHandler.cxx:133
 AliHLTHOMERProxyHandler.cxx:134
 AliHLTHOMERProxyHandler.cxx:135
 AliHLTHOMERProxyHandler.cxx:136
 AliHLTHOMERProxyHandler.cxx:137
 AliHLTHOMERProxyHandler.cxx:138
 AliHLTHOMERProxyHandler.cxx:139
 AliHLTHOMERProxyHandler.cxx:140
 AliHLTHOMERProxyHandler.cxx:141
 AliHLTHOMERProxyHandler.cxx:142
 AliHLTHOMERProxyHandler.cxx:143
 AliHLTHOMERProxyHandler.cxx:144
 AliHLTHOMERProxyHandler.cxx:145
 AliHLTHOMERProxyHandler.cxx:146
 AliHLTHOMERProxyHandler.cxx:147
 AliHLTHOMERProxyHandler.cxx:148
 AliHLTHOMERProxyHandler.cxx:149
 AliHLTHOMERProxyHandler.cxx:150
 AliHLTHOMERProxyHandler.cxx:151
 AliHLTHOMERProxyHandler.cxx:152
 AliHLTHOMERProxyHandler.cxx:153
 AliHLTHOMERProxyHandler.cxx:154
 AliHLTHOMERProxyHandler.cxx:155
 AliHLTHOMERProxyHandler.cxx:156
 AliHLTHOMERProxyHandler.cxx:157
 AliHLTHOMERProxyHandler.cxx:158
 AliHLTHOMERProxyHandler.cxx:159
 AliHLTHOMERProxyHandler.cxx:160
 AliHLTHOMERProxyHandler.cxx:161
 AliHLTHOMERProxyHandler.cxx:162
 AliHLTHOMERProxyHandler.cxx:163
 AliHLTHOMERProxyHandler.cxx:164
 AliHLTHOMERProxyHandler.cxx:165
 AliHLTHOMERProxyHandler.cxx:166
 AliHLTHOMERProxyHandler.cxx:167
 AliHLTHOMERProxyHandler.cxx:168
 AliHLTHOMERProxyHandler.cxx:169
 AliHLTHOMERProxyHandler.cxx:170
 AliHLTHOMERProxyHandler.cxx:171
 AliHLTHOMERProxyHandler.cxx:172
 AliHLTHOMERProxyHandler.cxx:173
 AliHLTHOMERProxyHandler.cxx:174
 AliHLTHOMERProxyHandler.cxx:175
 AliHLTHOMERProxyHandler.cxx:176
 AliHLTHOMERProxyHandler.cxx:177
 AliHLTHOMERProxyHandler.cxx:178
 AliHLTHOMERProxyHandler.cxx:179
 AliHLTHOMERProxyHandler.cxx:180
 AliHLTHOMERProxyHandler.cxx:181
 AliHLTHOMERProxyHandler.cxx:182
 AliHLTHOMERProxyHandler.cxx:183
 AliHLTHOMERProxyHandler.cxx:184
 AliHLTHOMERProxyHandler.cxx:185
 AliHLTHOMERProxyHandler.cxx:186
 AliHLTHOMERProxyHandler.cxx:187
 AliHLTHOMERProxyHandler.cxx:188
 AliHLTHOMERProxyHandler.cxx:189
 AliHLTHOMERProxyHandler.cxx:190
 AliHLTHOMERProxyHandler.cxx:191
 AliHLTHOMERProxyHandler.cxx:192
 AliHLTHOMERProxyHandler.cxx:193
 AliHLTHOMERProxyHandler.cxx:194
 AliHLTHOMERProxyHandler.cxx:195
 AliHLTHOMERProxyHandler.cxx:196
 AliHLTHOMERProxyHandler.cxx:197
 AliHLTHOMERProxyHandler.cxx:198
 AliHLTHOMERProxyHandler.cxx:199
 AliHLTHOMERProxyHandler.cxx:200
 AliHLTHOMERProxyHandler.cxx:201
 AliHLTHOMERProxyHandler.cxx:202
 AliHLTHOMERProxyHandler.cxx:203
 AliHLTHOMERProxyHandler.cxx:204
 AliHLTHOMERProxyHandler.cxx:205
 AliHLTHOMERProxyHandler.cxx:206
 AliHLTHOMERProxyHandler.cxx:207
 AliHLTHOMERProxyHandler.cxx:208
 AliHLTHOMERProxyHandler.cxx:209
 AliHLTHOMERProxyHandler.cxx:210
 AliHLTHOMERProxyHandler.cxx:211
 AliHLTHOMERProxyHandler.cxx:212
 AliHLTHOMERProxyHandler.cxx:213
 AliHLTHOMERProxyHandler.cxx:214
 AliHLTHOMERProxyHandler.cxx:215
 AliHLTHOMERProxyHandler.cxx:216
 AliHLTHOMERProxyHandler.cxx:217
 AliHLTHOMERProxyHandler.cxx:218
 AliHLTHOMERProxyHandler.cxx:219
 AliHLTHOMERProxyHandler.cxx:220
 AliHLTHOMERProxyHandler.cxx:221
 AliHLTHOMERProxyHandler.cxx:222
 AliHLTHOMERProxyHandler.cxx:223
 AliHLTHOMERProxyHandler.cxx:224
 AliHLTHOMERProxyHandler.cxx:225
 AliHLTHOMERProxyHandler.cxx:226
 AliHLTHOMERProxyHandler.cxx:227
 AliHLTHOMERProxyHandler.cxx:228
 AliHLTHOMERProxyHandler.cxx:229
 AliHLTHOMERProxyHandler.cxx:230
 AliHLTHOMERProxyHandler.cxx:231
 AliHLTHOMERProxyHandler.cxx:232
 AliHLTHOMERProxyHandler.cxx:233
 AliHLTHOMERProxyHandler.cxx:234
 AliHLTHOMERProxyHandler.cxx:235
 AliHLTHOMERProxyHandler.cxx:236
 AliHLTHOMERProxyHandler.cxx:237
 AliHLTHOMERProxyHandler.cxx:238
 AliHLTHOMERProxyHandler.cxx:239
 AliHLTHOMERProxyHandler.cxx:240
 AliHLTHOMERProxyHandler.cxx:241
 AliHLTHOMERProxyHandler.cxx:242
 AliHLTHOMERProxyHandler.cxx:243
 AliHLTHOMERProxyHandler.cxx:244
 AliHLTHOMERProxyHandler.cxx:245
 AliHLTHOMERProxyHandler.cxx:246
 AliHLTHOMERProxyHandler.cxx:247
 AliHLTHOMERProxyHandler.cxx:248
 AliHLTHOMERProxyHandler.cxx:249
 AliHLTHOMERProxyHandler.cxx:250
 AliHLTHOMERProxyHandler.cxx:251
 AliHLTHOMERProxyHandler.cxx:252
 AliHLTHOMERProxyHandler.cxx:253
 AliHLTHOMERProxyHandler.cxx:254
 AliHLTHOMERProxyHandler.cxx:255
 AliHLTHOMERProxyHandler.cxx:256
 AliHLTHOMERProxyHandler.cxx:257
 AliHLTHOMERProxyHandler.cxx:258
 AliHLTHOMERProxyHandler.cxx:259
 AliHLTHOMERProxyHandler.cxx:260
 AliHLTHOMERProxyHandler.cxx:261
 AliHLTHOMERProxyHandler.cxx:262
 AliHLTHOMERProxyHandler.cxx:263
 AliHLTHOMERProxyHandler.cxx:264
 AliHLTHOMERProxyHandler.cxx:265
 AliHLTHOMERProxyHandler.cxx:266
 AliHLTHOMERProxyHandler.cxx:267
 AliHLTHOMERProxyHandler.cxx:268
 AliHLTHOMERProxyHandler.cxx:269
 AliHLTHOMERProxyHandler.cxx:270
 AliHLTHOMERProxyHandler.cxx:271
 AliHLTHOMERProxyHandler.cxx:272
 AliHLTHOMERProxyHandler.cxx:273
 AliHLTHOMERProxyHandler.cxx:274
 AliHLTHOMERProxyHandler.cxx:275
 AliHLTHOMERProxyHandler.cxx:276
 AliHLTHOMERProxyHandler.cxx:277
 AliHLTHOMERProxyHandler.cxx:278
 AliHLTHOMERProxyHandler.cxx:279
 AliHLTHOMERProxyHandler.cxx:280
 AliHLTHOMERProxyHandler.cxx:281
 AliHLTHOMERProxyHandler.cxx:282
 AliHLTHOMERProxyHandler.cxx:283
 AliHLTHOMERProxyHandler.cxx:284
 AliHLTHOMERProxyHandler.cxx:285
 AliHLTHOMERProxyHandler.cxx:286
 AliHLTHOMERProxyHandler.cxx:287
 AliHLTHOMERProxyHandler.cxx:288
 AliHLTHOMERProxyHandler.cxx:289
 AliHLTHOMERProxyHandler.cxx:290
 AliHLTHOMERProxyHandler.cxx:291
 AliHLTHOMERProxyHandler.cxx:292
 AliHLTHOMERProxyHandler.cxx:293
 AliHLTHOMERProxyHandler.cxx:294
 AliHLTHOMERProxyHandler.cxx:295
 AliHLTHOMERProxyHandler.cxx:296
 AliHLTHOMERProxyHandler.cxx:297
 AliHLTHOMERProxyHandler.cxx:298
 AliHLTHOMERProxyHandler.cxx:299
 AliHLTHOMERProxyHandler.cxx:300
 AliHLTHOMERProxyHandler.cxx:301
 AliHLTHOMERProxyHandler.cxx:302
 AliHLTHOMERProxyHandler.cxx:303
 AliHLTHOMERProxyHandler.cxx:304
 AliHLTHOMERProxyHandler.cxx:305
 AliHLTHOMERProxyHandler.cxx:306
 AliHLTHOMERProxyHandler.cxx:307
 AliHLTHOMERProxyHandler.cxx:308
 AliHLTHOMERProxyHandler.cxx:309
 AliHLTHOMERProxyHandler.cxx:310
 AliHLTHOMERProxyHandler.cxx:311
 AliHLTHOMERProxyHandler.cxx:312
 AliHLTHOMERProxyHandler.cxx:313
 AliHLTHOMERProxyHandler.cxx:314
 AliHLTHOMERProxyHandler.cxx:315
 AliHLTHOMERProxyHandler.cxx:316
 AliHLTHOMERProxyHandler.cxx:317
 AliHLTHOMERProxyHandler.cxx:318
 AliHLTHOMERProxyHandler.cxx:319
 AliHLTHOMERProxyHandler.cxx:320
 AliHLTHOMERProxyHandler.cxx:321
 AliHLTHOMERProxyHandler.cxx:322
 AliHLTHOMERProxyHandler.cxx:323
 AliHLTHOMERProxyHandler.cxx:324
 AliHLTHOMERProxyHandler.cxx:325
 AliHLTHOMERProxyHandler.cxx:326
 AliHLTHOMERProxyHandler.cxx:327
 AliHLTHOMERProxyHandler.cxx:328
 AliHLTHOMERProxyHandler.cxx:329
 AliHLTHOMERProxyHandler.cxx:330
 AliHLTHOMERProxyHandler.cxx:331
 AliHLTHOMERProxyHandler.cxx:332
 AliHLTHOMERProxyHandler.cxx:333
 AliHLTHOMERProxyHandler.cxx:334
 AliHLTHOMERProxyHandler.cxx:335
 AliHLTHOMERProxyHandler.cxx:336
 AliHLTHOMERProxyHandler.cxx:337
 AliHLTHOMERProxyHandler.cxx:338
 AliHLTHOMERProxyHandler.cxx:339
 AliHLTHOMERProxyHandler.cxx:340
 AliHLTHOMERProxyHandler.cxx:341
 AliHLTHOMERProxyHandler.cxx:342
 AliHLTHOMERProxyHandler.cxx:343
 AliHLTHOMERProxyHandler.cxx:344
 AliHLTHOMERProxyHandler.cxx:345
 AliHLTHOMERProxyHandler.cxx:346
 AliHLTHOMERProxyHandler.cxx:347
 AliHLTHOMERProxyHandler.cxx:348
 AliHLTHOMERProxyHandler.cxx:349
 AliHLTHOMERProxyHandler.cxx:350
 AliHLTHOMERProxyHandler.cxx:351
 AliHLTHOMERProxyHandler.cxx:352
 AliHLTHOMERProxyHandler.cxx:353
 AliHLTHOMERProxyHandler.cxx:354
 AliHLTHOMERProxyHandler.cxx:355
 AliHLTHOMERProxyHandler.cxx:356
 AliHLTHOMERProxyHandler.cxx:357
 AliHLTHOMERProxyHandler.cxx:358
 AliHLTHOMERProxyHandler.cxx:359
 AliHLTHOMERProxyHandler.cxx:360
 AliHLTHOMERProxyHandler.cxx:361
 AliHLTHOMERProxyHandler.cxx:362
 AliHLTHOMERProxyHandler.cxx:363
 AliHLTHOMERProxyHandler.cxx:364
 AliHLTHOMERProxyHandler.cxx:365
 AliHLTHOMERProxyHandler.cxx:366
 AliHLTHOMERProxyHandler.cxx:367
 AliHLTHOMERProxyHandler.cxx:368
 AliHLTHOMERProxyHandler.cxx:369
 AliHLTHOMERProxyHandler.cxx:370
 AliHLTHOMERProxyHandler.cxx:371
 AliHLTHOMERProxyHandler.cxx:372
 AliHLTHOMERProxyHandler.cxx:373
 AliHLTHOMERProxyHandler.cxx:374
 AliHLTHOMERProxyHandler.cxx:375
 AliHLTHOMERProxyHandler.cxx:376
 AliHLTHOMERProxyHandler.cxx:377
 AliHLTHOMERProxyHandler.cxx:378
 AliHLTHOMERProxyHandler.cxx:379
 AliHLTHOMERProxyHandler.cxx:380
 AliHLTHOMERProxyHandler.cxx:381
 AliHLTHOMERProxyHandler.cxx:382
 AliHLTHOMERProxyHandler.cxx:383
 AliHLTHOMERProxyHandler.cxx:384
 AliHLTHOMERProxyHandler.cxx:385
 AliHLTHOMERProxyHandler.cxx:386
 AliHLTHOMERProxyHandler.cxx:387
 AliHLTHOMERProxyHandler.cxx:388
 AliHLTHOMERProxyHandler.cxx:389
 AliHLTHOMERProxyHandler.cxx:390
 AliHLTHOMERProxyHandler.cxx:391
 AliHLTHOMERProxyHandler.cxx:392
 AliHLTHOMERProxyHandler.cxx:393
 AliHLTHOMERProxyHandler.cxx:394
 AliHLTHOMERProxyHandler.cxx:395
 AliHLTHOMERProxyHandler.cxx:396
 AliHLTHOMERProxyHandler.cxx:397
 AliHLTHOMERProxyHandler.cxx:398
 AliHLTHOMERProxyHandler.cxx:399
 AliHLTHOMERProxyHandler.cxx:400
 AliHLTHOMERProxyHandler.cxx:401
 AliHLTHOMERProxyHandler.cxx:402
 AliHLTHOMERProxyHandler.cxx:403
 AliHLTHOMERProxyHandler.cxx:404
 AliHLTHOMERProxyHandler.cxx:405
 AliHLTHOMERProxyHandler.cxx:406
 AliHLTHOMERProxyHandler.cxx:407
 AliHLTHOMERProxyHandler.cxx:408
 AliHLTHOMERProxyHandler.cxx:409
 AliHLTHOMERProxyHandler.cxx:410
 AliHLTHOMERProxyHandler.cxx:411
 AliHLTHOMERProxyHandler.cxx:412
 AliHLTHOMERProxyHandler.cxx:413
 AliHLTHOMERProxyHandler.cxx:414
 AliHLTHOMERProxyHandler.cxx:415
 AliHLTHOMERProxyHandler.cxx:416
 AliHLTHOMERProxyHandler.cxx:417
 AliHLTHOMERProxyHandler.cxx:418
 AliHLTHOMERProxyHandler.cxx:419
 AliHLTHOMERProxyHandler.cxx:420
 AliHLTHOMERProxyHandler.cxx:421
 AliHLTHOMERProxyHandler.cxx:422
 AliHLTHOMERProxyHandler.cxx:423
 AliHLTHOMERProxyHandler.cxx:424
 AliHLTHOMERProxyHandler.cxx:425
 AliHLTHOMERProxyHandler.cxx:426
 AliHLTHOMERProxyHandler.cxx:427
 AliHLTHOMERProxyHandler.cxx:428
 AliHLTHOMERProxyHandler.cxx:429
 AliHLTHOMERProxyHandler.cxx:430
 AliHLTHOMERProxyHandler.cxx:431
 AliHLTHOMERProxyHandler.cxx:432
 AliHLTHOMERProxyHandler.cxx:433
 AliHLTHOMERProxyHandler.cxx:434
 AliHLTHOMERProxyHandler.cxx:435
 AliHLTHOMERProxyHandler.cxx:436
 AliHLTHOMERProxyHandler.cxx:437
 AliHLTHOMERProxyHandler.cxx:438
 AliHLTHOMERProxyHandler.cxx:439
 AliHLTHOMERProxyHandler.cxx:440
 AliHLTHOMERProxyHandler.cxx:441
 AliHLTHOMERProxyHandler.cxx:442
 AliHLTHOMERProxyHandler.cxx:443
 AliHLTHOMERProxyHandler.cxx:444
 AliHLTHOMERProxyHandler.cxx:445
 AliHLTHOMERProxyHandler.cxx:446
 AliHLTHOMERProxyHandler.cxx:447
 AliHLTHOMERProxyHandler.cxx:448
 AliHLTHOMERProxyHandler.cxx:449
 AliHLTHOMERProxyHandler.cxx:450
 AliHLTHOMERProxyHandler.cxx:451
 AliHLTHOMERProxyHandler.cxx:452
 AliHLTHOMERProxyHandler.cxx:453
 AliHLTHOMERProxyHandler.cxx:454
 AliHLTHOMERProxyHandler.cxx:455
 AliHLTHOMERProxyHandler.cxx:456
 AliHLTHOMERProxyHandler.cxx:457
 AliHLTHOMERProxyHandler.cxx:458
 AliHLTHOMERProxyHandler.cxx:459
 AliHLTHOMERProxyHandler.cxx:460
 AliHLTHOMERProxyHandler.cxx:461
 AliHLTHOMERProxyHandler.cxx:462
 AliHLTHOMERProxyHandler.cxx:463
 AliHLTHOMERProxyHandler.cxx:464
 AliHLTHOMERProxyHandler.cxx:465
 AliHLTHOMERProxyHandler.cxx:466
 AliHLTHOMERProxyHandler.cxx:467
 AliHLTHOMERProxyHandler.cxx:468
 AliHLTHOMERProxyHandler.cxx:469
 AliHLTHOMERProxyHandler.cxx:470
 AliHLTHOMERProxyHandler.cxx:471
 AliHLTHOMERProxyHandler.cxx:472
 AliHLTHOMERProxyHandler.cxx:473
 AliHLTHOMERProxyHandler.cxx:474
 AliHLTHOMERProxyHandler.cxx:475
 AliHLTHOMERProxyHandler.cxx:476
 AliHLTHOMERProxyHandler.cxx:477
 AliHLTHOMERProxyHandler.cxx:478
 AliHLTHOMERProxyHandler.cxx:479
 AliHLTHOMERProxyHandler.cxx:480
 AliHLTHOMERProxyHandler.cxx:481
 AliHLTHOMERProxyHandler.cxx:482
 AliHLTHOMERProxyHandler.cxx:483
 AliHLTHOMERProxyHandler.cxx:484
 AliHLTHOMERProxyHandler.cxx:485
 AliHLTHOMERProxyHandler.cxx:486
 AliHLTHOMERProxyHandler.cxx:487
 AliHLTHOMERProxyHandler.cxx:488
 AliHLTHOMERProxyHandler.cxx:489
 AliHLTHOMERProxyHandler.cxx:490
 AliHLTHOMERProxyHandler.cxx:491
 AliHLTHOMERProxyHandler.cxx:492
 AliHLTHOMERProxyHandler.cxx:493
 AliHLTHOMERProxyHandler.cxx:494
 AliHLTHOMERProxyHandler.cxx:495
 AliHLTHOMERProxyHandler.cxx:496
 AliHLTHOMERProxyHandler.cxx:497