XRootD
Loading...
Searching...
No Matches
XrdCl::Log Class Reference

Handle diagnostics. More...

#include <XrdClLog.hh>

Collaboration diagram for XrdCl::Log:

Public Types

enum  LogLevel {
  NoMsg = 0 ,
  ErrorMsg = 1 ,
  WarningMsg = 2 ,
  InfoMsg = 3 ,
  DebugMsg = 4 ,
  DumpMsg = 5
}
 Log levels. More...

Public Member Functions

 Log ()
 Constructor.
 ~Log ()
void Debug (uint64_t topic, const char *format,...)
 Print a debug message.
void Dump (uint64_t topic, const char *format,...)
 Print a dump message.
void Error (uint64_t topic, const char *format,...)
 Report an error.
LogLevel GetLevel () const
 Get the log level.
void Info (uint64_t topic, const char *format,...)
 Print an info.
uint64_t RegisterTopic (const std::string &topic)
 Register new topic.
void Say (LogLevel level, uint64_t topic, const char *format, va_list list)
void SetLevel (const std::string &level)
 Set the level of the messages that should be sent to the destination.
void SetLevel (LogLevel level)
 Set the level of the messages that should be sent to the destination.
void SetMask (const std::string &level, uint64_t mask)
 Sets the mask for the topics of messages that should be printed.
void SetMask (LogLevel level, uint64_t mask)
 Sets the mask for the topics of messages that should be printed.
void SetOutput (LogOut *output)
 Set the output that should be used.
void SetPid (pid_t pid)
 Set pid.
void SetTopicName (uint64_t topic, std::string name)
 Map a topic number to a string.
void Warning (uint64_t topic, const char *format,...)
 Report a warning.

Detailed Description

Handle diagnostics.

Definition at line 100 of file XrdClLog.hh.

Member Enumeration Documentation

◆ LogLevel

Log levels.

Enumerator
NoMsg 

report nothing

ErrorMsg 

report errors

WarningMsg 

report warnings

InfoMsg 

print info

DebugMsg 

print debug info

DumpMsg 

print details of the request and responses

Definition at line 106 of file XrdClLog.hh.

107 {
108 NoMsg = 0,
109 ErrorMsg = 1,
110 WarningMsg = 2,
111 InfoMsg = 3,
112 DebugMsg = 4,
113 DumpMsg = 5
114 };
@ InfoMsg
print info
Definition XrdClLog.hh:111
@ NoMsg
report nothing
Definition XrdClLog.hh:108
@ WarningMsg
report warnings
Definition XrdClLog.hh:110
@ DebugMsg
print debug info
Definition XrdClLog.hh:112
@ ErrorMsg
report errors
Definition XrdClLog.hh:109
@ DumpMsg
print details of the request and responses
Definition XrdClLog.hh:113

Constructor & Destructor Documentation

◆ Log()

XrdCl::Log::Log ( )
inline

Constructor.

Definition at line 119 of file XrdClLog.hh.

119 : pLevel( NoMsg ), pTopicMaxLength( 18 ), pPid(0)
120 {
121 pOutput = new LogOutCerr();
122 int maxMask = (int)DumpMsg+1;
123 for( int i = 0; i < maxMask; ++i )
124 pMask[i] = 0xffffffffffffffffULL;
125 }

References DumpMsg, and NoMsg.

◆ ~Log()

XrdCl::Log::~Log ( )
inline

Definition at line 130 of file XrdClLog.hh.

131 {
132 delete pOutput;
133 }

Member Function Documentation

◆ Debug()

void XrdCl::Log::Debug ( uint64_t topic,
const char * format,
... )

Print a debug message.

Definition at line 282 of file XrdClLog.cc.

283 {
284 if( likely( GetLevel() < DebugMsg ) )
285 return;
286
287 if( unlikely( (topic & pMask[DebugMsg]) == 0 ) )
288 return;
289
290 va_list argList;
291 va_start( argList, format );
292 Say( DebugMsg, topic, format, argList );
293 va_end( argList );
294 }
#define likely(x)
#define unlikely(x)
XrdOucPup XrdCmsParser::Pup & Say
LogLevel GetLevel() const
Get the log level.
Definition XrdClLog.hh:258

References DebugMsg, GetLevel(), likely, Say, and unlikely.

Referenced by XrdCl::Channel::Channel(), XrdCl::ClassicCopyJob::ClassicCopyJob(), XrdCl::Stream::Stream(), XrdCl::ThirdPartyCopyJob::ThirdPartyCopyJob(), XrdCl::TPFallBackCopyJob::TPFallBackCopyJob(), XrdCl::XRootDMsgHandler::XRootDMsgHandler(), XrdCl::Stream::~Stream(), XrdCl::XRootDMsgHandler::~XRootDMsgHandler(), XrdCl::PollerBuiltIn::AddSocket(), XrdCl::FileStateHandler::AfterForkChild(), XrdCl::InQueue::AssignTimeout(), XrdCl::CheckSumManager::Calculate(), XrdCl::AsyncSocketHandler::CheckHSWait(), XrdCl::FileStateHandler::Checkpoint(), XrdCl::Utils::CheckTPC(), XrdCl::Utils::CheckTPCLite(), XrdCl::ForkHandler::Child(), child(), XrdCl::FileStateHandler::ChkptWrt(), XrdCl::FileStateHandler::ChkptWrtV(), XrdCl::AsyncSocketHandler::Close(), XrdCl::FileStateHandler::Close(), XrdCl::AsyncSocketHandler::Connect(), XrdCl::PollerFactory::CreatePoller(), XrdCl::FileStateHandler::DelXAttr(), DoLS(), XrdCl::AsyncSocketHandler::DoTlsHandShake(), XrdCl::FSExecutor::Execute(), XrdCl::FileStateHandler::Fcntl(), XrdCl::Stream::ForceError(), XrdCl::InQueue::GetHandlerForMessage(), XrdCl::Env::GetInt(), XrdCl::DefaultEnv::GetMonitor(), XrdCl::Env::GetString(), XrdCl::FileStateHandler::GetXAttr(), XrdCl::AsyncSocketHandler::HandleHandShake(), IndexRemote(), XrdCl::FileStateHandler::ListXAttr(), XrdCl::Utils::LogHostAddresses(), XrdCl::XRootDTransport::MultiplexSubStream(), XrdCl::FileStateHandler::OnClose(), XrdCl::Stream::OnConnect(), XrdCl::AsyncSocketHandler::OnConnectionReturn(), XrdCl::Stream::OnError(), XrdCl::FileStateHandler::OnOpen(), XrdCl::Stream::OnReadTimeout(), XrdCl::Stream::OnReadyToWrite(), XrdCl::FileStateHandler::Open(), XrdCl::ZipArchive::OpenArchive(), XrdCl::ForkHandler::Parent(), parent(), XrdCl::FileStateHandler::PgRead(), XrdCl::FileStateHandler::PgReadImpl(), XrdCl::FileStateHandler::PgWriteImpl(), XrdCl::CopyProcess::Prepare(), XrdCl::ForkHandler::Prepare(), prepare(), XrdCl::XRootDMsgHandler::Process(), XrdCl::Utils::ProcessConfigDir(), XrdCl::PlugInManager::ProcessEnvironmentSettings(), XrdCl::Env::PutInt(), XrdCl::Env::PutString(), XrdCl::FileStateHandler::Read(), XrdCl::FileStateHandler::ReadV(), XrdCl::PlugInManager::RegisterDefaultFactory(), XrdCl::PlugInManager::RegisterFactory(), XrdCl::TaskManager::RegisterTask(), XrdCl::InQueue::RemoveMessageHandler(), XrdCl::PollerBuiltIn::RemoveSocket(), XrdCl::ClassicCopyJob::Run(), XrdCl::ThirdPartyCopyJob::Run(), XrdCl::TPFallBackCopyJob::Run(), XrdCl::TaskManager::RunTasks(), XrdCl::FileStateHandler::SetXAttr(), XrdCl::JobManager::Start(), XrdCl::PollerBuiltIn::Start(), XrdCl::TaskManager::Start(), XrdCl::FileStateHandler::Stat(), XrdCl::LocalFileHandler::Stat(), XrdCl::JobManager::Stop(), XrdCl::PollerBuiltIn::Stop(), XrdCl::TaskManager::Stop(), XrdCl::FileStateHandler::Sync(), XrdCl::FileStateHandler::Truncate(), XrdCl::FileStateHandler::TryOtherServer(), XrdCl::TaskManager::UnregisterTask(), XrdCl::FileStateHandler::VectorRead(), XrdCl::FileStateHandler::VectorWrite(), XrdCl::FileStateHandler::Visa(), XrdCl::FileStateHandler::Write(), XrdCl::XRootDMsgHandler::WriteMessageBody(), and XrdCl::FileStateHandler::WriteV().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Dump()

void XrdCl::Log::Dump ( uint64_t topic,
const char * format,
... )

Print a dump message.

Definition at line 299 of file XrdClLog.cc.

300 {
301 if( likely( GetLevel() < DumpMsg ) )
302 return;
303
304 if( unlikely( (topic & pMask[DumpMsg]) == 0 ) )
305 return;
306
307 va_list argList;
308 va_start( argList, format );
309 Say( DumpMsg, topic, format, argList );
310 va_end( argList );
311 }

References DumpMsg, GetLevel(), likely, Say, and unlikely.

Referenced by XrdCl::ZipArchive::AppendFile(), XrdCl::FileSystemData::AssignLastURL(), XrdCl::FileSystemData::AssignLoadBalancer(), XrdCl::ZipArchive::CloseArchive(), XrdCl::Stream::DisableIfEmpty(), XrdCl::PollerBuiltIn::EnableReadNotification(), XrdCl::PollerBuiltIn::EnableWriteNotification(), XrdCl::XRootDMsgHandler::Examine(), XrdCl::FSExecutor::Execute(), XrdCl::URL::FromString(), XrdCl::CheckSumManager::GetCalculator(), XrdCl::CheckSumHelper::GetCheckSum(), XrdCl::XRootDTransport::GetHeader(), XrdCl::Utils::GetLocalCheckSum(), XrdCl::Utils::GetRemoteCheckSum(), XrdCl::XRootDTransport::IsStreamBroken(), XrdCl::XRootDTransport::IsStreamTTLElapsed(), XrdCl::Utils::LogPropertyList(), main(), XrdCl::XRootDTransport::MessageReceived(), XrdCl::FileStateHandler::OnClose(), XrdCl::Stream::OnIncoming(), XrdCl::Stream::OnReadyToWrite(), XrdCl::FileStateHandler::OnStateError(), XrdCl::FileStateHandler::OnStateResponse(), XrdCl::XRootDMsgHandler::OnStatusReady(), XrdCl::XRootDMsgHandler::OnStreamEvent(), XrdCl::ZipArchive::OpenArchive(), XrdCl::ZipArchive::OpenFile(), XrdCl::XRootDMsgHandler::Process(), XrdCl::AsyncHSReader::Read(), XrdCl::AsyncMsgReader::Read(), XrdCl::AsyncVectorReader::Read(), XrdCl::ZipArchive::ReadFromImpl, XrdCl::MessageUtils::RedirectMessage(), XrdCl::TaskManager::RunTasks(), XrdCl::FileSystemData::Send(), XrdCl::Socket::Send(), XrdCl::Stream::Send(), XrdCl::MessageUtils::SendMessage(), XrdCl::FileStateHandler::TimeOutRequests(), and XrdCl::AsyncMsgWriter::Write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Error()

void XrdCl::Log::Error ( uint64_t topic,
const char * format,
... )

Report an error.

Definition at line 231 of file XrdClLog.cc.

232 {
233 if( unlikely( GetLevel() < ErrorMsg ) )
234 return;
235
236 if( unlikely( (topic & pMask[ErrorMsg]) == 0 ) )
237 return;
238
239 va_list argList;
240 va_start( argList, format );
241 Say( ErrorMsg, topic, format, argList );
242 va_end( argList );
243 }

References ErrorMsg, GetLevel(), Say, and unlikely.

Referenced by XrdCl::FileSystem::FileSystem(), xrdcl_proxy::ProxyFactory::ProxyFactory(), XrdCl::FSExecutor::AddCommand(), XrdCl::PollerBuiltIn::AddSocket(), XrdCl::CheckSumManager::Calculate(), XrdCl::Stream::CanCollapse(), XrdCl::Utils::CheckTPC(), XrdCl::Utils::CheckTPCLite(), XrdCl::LocalFileHandler::Close(), XrdCl::ZipArchive::CloseArchive(), XrdCl::PostMaster::CollapseRedirect(), XrdCl::AsyncSocketHandler::Connect(), XrdCl::Tls::Connect(), XrdCl::RecorderFactory::CreateFileSystem(), xrdcl_proxy::ProxyFactory::CreateFileSystem(), XrdCl::PollerFactory::CreatePoller(), XrdCl::XRootDTransport::Disconnect(), DoCache(), DoCat(), DoCD(), DoChMod(), DoLocate(), DoLS(), DoMkDir(), DoMv(), DoPrepare(), DoQuery(), DoRm(), DoRmDir(), DoSpaceInfo(), DoStat(), DoStatVFS(), DoTail(), DoTruncate(), DoXAttr(), XrdCl::Stream::EnableLink(), XrdCl::PollerBuiltIn::EnableReadNotification(), XrdCl::PollerBuiltIn::EnableWriteNotification(), XrdCl::FSExecutor::Execute(), XrdCl::URL::FromString(), XrdCl::CheckSumManager::GetCalculator(), XrdCl::Utils::GetHostAddresses(), XrdCl::Utils::GetLocalCheckSum(), XrdCl::DefaultEnv::GetMonitor(), XrdCl::XRootDTransport::GetMore(), XrdCl::AsyncSocketHandler::HandleHandShake(), XrdCl::XRootDTransport::HandShake(), XrdCl::XRootDTransport::HandShakeDone(), XrdCl::Env::ImportInt(), IndexRemote(), XrdCl::CheckSumHelper::Initialize(), XrdCl::XCpCtx::Initialize(), XrdCl::InitTLS(), XrdCl::XRootDMsgHandler::InspectStatusRsp(), XrdCl::XRootDTransport::IsStreamBroken(), XrdCl::XRootDTransport::IsStreamTTLElapsed(), XrdCl::XRootDTransport::LogErrorResponse(), main(), XrdCl::XRootDTransport::MessageReceived(), XrdCl::XRootDTransport::MultiplexSubStream(), XrdCl::XRootDTransport::NbConnectedStrm(), XrdCl::Stream::OnConnectError(), XrdCl::AsyncSocketHandler::OnConnectionReturn(), XrdCl::AsyncSocketHandler::OnFault(), XrdCl::AsyncSocketHandler::OnFaultWhileHandshaking(), XrdCl::FileStateHandler::OnStateError(), XrdCl::XRootDMsgHandler::OnStatusReady(), XrdCl::File::Open(), XrdCl::FileStateHandler::Open(), XrdCl::ZipArchive::OpenArchive(), XrdCl::XRootDMsgHandler::Process(), ProcessStatQuery(), XrdCl::AsyncDiscardReader::Read(), XrdCl::AsyncRawReader::Read(), XrdCl::AsyncVectorReader::Read(), XrdCl::LocalFileHandler::Read(), XrdCl::LocalFileHandler::ReadV(), XrdCl::MessageUtils::RedirectMessage(), XrdCl::PollerBuiltIn::RemoveSocket(), XrdCl::ClassicCopyJob::Run(), XrdCl::MessageUtils::SendMessage(), XrdCl::JobManager::Start(), XrdCl::PollerBuiltIn::Start(), XrdCl::TaskManager::Start(), XrdCl::LocalFileHandler::Stat(), XrdCl::JobManager::Stop(), XrdCl::PollerBuiltIn::Stop(), XrdCl::TaskManager::Stop(), XrdCl::XRootDTransport::SubStreamNumber(), XrdCl::LocalFileHandler::Sync(), XrdCl::LocalFileHandler::Truncate(), XrdCl::LocalFileHandler::VectorRead(), XrdCl::LocalFileHandler::VectorWrite(), XrdCl::AsyncHSWriter::Write(), XrdCl::AsyncMsgWriter::Write(), XrdCl::LocalFileHandler::Write(), and XrdCl::LocalFileHandler::WriteV().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLevel()

LogLevel XrdCl::Log::GetLevel ( ) const
inline

Get the log level.

Definition at line 258 of file XrdClLog.hh.

259 {
260 LogLevel lvl = pLevel.load(std::memory_order_relaxed);
261 return lvl;
262 }
LogLevel
Log levels.
Definition XrdClLog.hh:107

Referenced by Debug(), Dump(), Error(), XrdCl::URL::FromString(), XrdCl::XRootDTransport::GenerateDescription(), Info(), XrdCl::Utils::LogPropertyList(), main(), and Warning().

Here is the caller graph for this function:

◆ Info()

void XrdCl::Log::Info ( uint64_t topic,
const char * format,
... )

Print an info.

Definition at line 265 of file XrdClLog.cc.

266 {
267 if( likely( GetLevel() < InfoMsg ) )
268 return;
269
270 if( unlikely( (topic & pMask[InfoMsg]) == 0 ) )
271 return;
272
273 va_list argList;
274 va_start( argList, format );
275 Say( InfoMsg, topic, format, argList );
276 va_end( argList );
277 }

References GetLevel(), InfoMsg, likely, Say, and unlikely.

Referenced by XrdCl::PostMaster::CollapseRedirect(), XrdCl::AsyncSocketHandler::DoTlsHandShake(), XrdCl::Env::ImportInt(), XrdCl::Env::ImportString(), IndexRemote(), XrdCl::Stream::OnConnectError(), XrdCl::FileStateHandler::PgWrite(), XrdCl::ClassicCopyJob::Run(), XrdCl::ThirdPartyCopyJob::Run(), and XrdCl::FileStateHandler::Write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RegisterTopic()

uint64_t XrdCl::Log::RegisterTopic ( const std::string & topic)
inline

Register new topic.

Definition at line 248 of file XrdClLog.hh.

249 {
250 uint64_t tpcnb = pTopicMap.rbegin()->first << 1;
251 SetTopicName( tpcnb, topic );
252 return tpcnb;
253 }
void SetTopicName(uint64_t topic, std::string name)
Map a topic number to a string.
Definition XrdClLog.cc:163

References SetTopicName().

Here is the call graph for this function:

◆ Say()

void XrdCl::Log::Say ( LogLevel level,
uint64_t topic,
const char * format,
va_list list )

Always print the message

Parameters
levellog level
topictopic of the message
formatformat string - the same as in printf
listlist of arguments

Definition at line 96 of file XrdClLog.cc.

100 {
101 //--------------------------------------------------------------------------
102 // Build the user message
103 //--------------------------------------------------------------------------
104 int size = 1024;
105 int ret = 0;
106 char *buffer = 0;
107 while(1)
108 {
109 va_list cp;
110 va_copy( cp, list );
111 buffer = new char[size];
112 ret = vsnprintf( buffer, size, format, cp );
113 va_end( cp );
114
115 if( ret < 0 )
116 {
117 snprintf( buffer, size, "Error while processing a log message \"%s\" \n", format);
118 pOutput->Write(buffer);
119 delete [] buffer;
120 return;
121 }
122 else if( ret < size )
123 break;
124
125 size *= 2;
126 delete [] buffer;
127 }
128
129 //--------------------------------------------------------------------------
130 // Add time and error level
131 //--------------------------------------------------------------------------
132 char now[48];
133 char ts[32];
134 char tz[8];
135 tm tsNow;
136 timeval ttNow;
137
138 gettimeofday( &ttNow, 0 );
139 localtime_r( &ttNow.tv_sec, &tsNow );
140
141 strftime( ts, 32, "%Y-%m-%d %H:%M:%S", &tsNow );
142 strftime( tz, 8, "%z", &tsNow );
143 snprintf( now, 48, "%s.%06ld %s", ts, (long int)ttNow.tv_usec, tz );
144
145 XrdOucTokenizer tok( buffer );
146 char *line = 0;
147 std::ostringstream out;
148 while( (line = tok.GetLine()) )
149 {
150 out << "[" << now << "][" << LogLevelToString( level ) << "]";
151 out << "[" << TopicToString( topic ) << "]";
152 if(pPid) out << "[" << std::setw(5) << pPid << "]";
153 out << " " << line << std::endl;
154 }
155
156 pOutput->Write( out.str() );
157 delete [] buffer;
158 }
static std::string ts()
timestamp output for logging messages
Definition XrdCephOss.cc:53

References XrdOucTokenizer::GetLine(), and ts().

Here is the call graph for this function:

◆ SetLevel() [1/2]

void XrdCl::Log::SetLevel ( const std::string & level)
inline

Set the level of the messages that should be sent to the destination.

Definition at line 205 of file XrdClLog.hh.

206 {
207 LogLevel lvl;
208 if( StringToLogLevel( level, lvl ) )
209 SetLevel( lvl );
210 }
void SetLevel(LogLevel level)
Set the level of the messages that should be sent to the destination.
Definition XrdClLog.hh:193

References SetLevel().

Here is the call graph for this function:

◆ SetLevel() [2/2]

void XrdCl::Log::SetLevel ( LogLevel level)
inline

Set the level of the messages that should be sent to the destination.

Definition at line 193 of file XrdClLog.hh.

194 {
195#if __cplusplus >= 201103L
196 pLevel.store(level, std::memory_order_relaxed);
197#else
198 pLevel = level;
199#endif
200 }

Referenced by main(), SetLevel(), and XrdCl::DefaultEnv::SetLogLevel().

Here is the caller graph for this function:

◆ SetMask() [1/2]

void XrdCl::Log::SetMask ( const std::string & level,
uint64_t mask )
inline

Sets the mask for the topics of messages that should be printed.

Definition at line 232 of file XrdClLog.hh.

233 {
234 LogLevel lvl;
235 if( StringToLogLevel( level, lvl ) )
236 pMask[lvl] = mask;
237 }

◆ SetMask() [2/2]

void XrdCl::Log::SetMask ( LogLevel level,
uint64_t mask )
inline

Sets the mask for the topics of messages that should be printed.

Definition at line 224 of file XrdClLog.hh.

225 {
226 pMask[level] = mask;
227 }

Referenced by XrdCl::DefaultEnv::SetLogMask().

Here is the caller graph for this function:

◆ SetOutput()

void XrdCl::Log::SetOutput ( LogOut * output)
inline

Set the output that should be used.

Definition at line 215 of file XrdClLog.hh.

216 {
217 delete pOutput;
218 pOutput = output;
219 }

Referenced by XrdCl::DefaultEnv::SetLogFile(), and XrdSsiLogger::SetMCB().

Here is the caller graph for this function:

◆ SetPid()

void XrdCl::Log::SetPid ( pid_t pid)
inline

Set pid.

Definition at line 267 of file XrdClLog.hh.

268 {
269 pPid = pid;
270 }

Referenced by child(), and parent().

Here is the caller graph for this function:

◆ SetTopicName()

void XrdCl::Log::SetTopicName ( uint64_t topic,
std::string name )

Map a topic number to a string.

Definition at line 163 of file XrdClLog.cc.

164 {
165 uint32_t len = name.length();
166 if( len > pTopicMaxLength )
167 {
168 pTopicMaxLength = len;
169 TopicMap::iterator it;
170 for( it = pTopicMap.begin(); it != pTopicMap.end(); ++it )
171 it->second.append( len-it->second.length(), ' ' );
172 }
173 else
174 name.append( pTopicMaxLength-len, ' ' );
175 pTopicMap[topic] = name;
176 }

Referenced by RegisterTopic(), and XrdCl::SetUpLogging().

Here is the caller graph for this function:

◆ Warning()

void XrdCl::Log::Warning ( uint64_t topic,
const char * format,
... )

Report a warning.

Definition at line 248 of file XrdClLog.cc.

249 {
250 if( unlikely( GetLevel() < WarningMsg ) )
251 return;
252
253 if( unlikely( (topic & pMask[WarningMsg]) == 0 ) )
254 return;
255
256 va_list argList;
257 va_start( argList, format );
258 Say( WarningMsg, topic, format, argList );
259 va_end( argList );
260 }

References GetLevel(), Say, unlikely, and WarningMsg.

Referenced by XrdCl::PollerBuiltIn::AddSocket(), XrdCl::PollerBuiltIn::EnableReadNotification(), XrdCl::PollerBuiltIn::EnableWriteNotification(), XrdCl::XRootDMsgHandler::Examine(), XrdCl::ActionExecutor::Execute(), XrdCl::Stream::OnIncoming(), XrdCl::Stream::OnReadyToWrite(), XrdCl::FileStateHandler::PgWrite(), XrdCl::XRootDMsgHandler::Process(), XrdCl::ClassicCopyJob::Run(), and XrdCl::Stream::Send().

Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following files: