// @(#)root/netx:$Name: $:$Id: TXNetFile.h,v 1.3 2005/05/01 10:00:07 rdm Exp $
// Author: Alvise Dorigo, Fabrizio Furano
/*************************************************************************
* Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TXNetFile
#define ROOT_TXNetFile
//////////////////////////////////////////////////////////////////////////
// //
// TXNetFile //
// //
// Authors: Alvise Dorigo, Fabrizio Furano //
// INFN Padova, 2003 //
// //
// TXNetFile is an extension of TNetFile able to deal with new xrootd //
// server. Its new features are: //
// - Automatic server kind recognition (xrootd load balancer, xrootd //
// data server, old rootd) //
// - Backward compatibility with old rootd server (acts as an old //
// TNetFile) //
// - Fault tolerance for read/write operations (read/write timeouts //
// and retry) //
// - Internal connection timeout (tunable indipendently from the OS //
// one) handled by threads //
// - handling of redirections from server //
// - Single TCP physical channel for multiple TXNetFile's instances //
// inside the same application //
// So, each TXNetFile object client must send messages containing //
// its ID (streamid). The server, of course, will respond with //
// messages containing the client's ID, in order to make the client //
// able to recognize its message by matching its streamid with that //
// one contained in the server's response. //
// - Tunable log verbosity level (0 = nothing, 3 = dump read/write //
// buffers too!) //
// - Many parameters configurable via TEnv facility (see SetParm() //
// methods) //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TNetFile
#include "TNetFile.h"
#endif
#ifndef ROOT_TXAbsNetCommon
#include "TXAbsNetCommon.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#define DFLT_TRYCONNECTSERVERSLIST 240
class TXNetConn;
//
// Just a container for the last parameters passed to the Open() method
//
struct Params_Open {
Bool_t FileOpened;
TString option;
TString fTitle;
Int_t compress;
Int_t netopt;
};
class TXNetFile : public TNetFile, public TXAbsNetCommon {
private:
Bool_t fAlreadyStated;
Bool_t fAlreadyDetected;
TXNetConn* fConnModule;
Bool_t fCreateMode;
char fHandle[4]; // The file handle returned by the server,
// to use for successive requests
Bool_t fIsROOT;
struct Params_Open fOpenPars; // Just a container for the last parameters
// passed to a Open method
Bool_t fOpenWithRefresh;
Long64_t fSize;
static Bool_t fgTagAlreadyPrinted;
void CreateTXNf(const char *url, Option_t *option, const char* ftitle,
Int_t compress, Int_t netopt);
Bool_t LowOpen(const char* file, Option_t *option, const char* ftitle,
Int_t compress, Int_t netopt,
Bool_t DoInit, Bool_t refresh_open = kFALSE);
Int_t SysStat(Int_t fd, Long_t* id, Long64_t* size, Long_t* flags,
Long_t* modtime);
Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode);
Int_t SysClose(Int_t fd);
public:
TXNetFile(const char *url, Option_t *option = "", const char* fTitle = "",
Int_t compress = 1, Int_t netopt = -1);
virtual ~TXNetFile();
Bool_t OpenFileWhenRedirected(char *newfhandle, Bool_t &wasopen);
Bool_t ProcessUnsolicitedMsg(TXUnsolicitedMsgSender *sender,
TXMessage *unsolmsg);
virtual void Close(const Option_t *opt ="");
virtual void Flush();
virtual Long_t GetRemoteFile(void**);
virtual Bool_t IsOpen() const;
Int_t LastBytesRecv(void);
Int_t LastBytesSent(void);
Int_t LastDataBytesRecv(void);
Int_t LastDataBytesSent(void);
Bool_t Open(Option_t *option, const char* fTitle, Int_t compress,
Int_t netopt, Bool_t DoInit);
virtual Bool_t ReadBuffer(char *buf, Int_t len);
virtual Int_t ReOpen(const Option_t *mode);
Long64_t Size(void);
virtual Bool_t WriteBuffer(const char *buffer, Int_t BufferLength);
ClassDef(TXNetFile, 1) //A TNetFile extension able to deal with new xrootd server.
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1