/******************************************************************************/
/* */
/* X r d C l i e n t L o g C o n n e c t i o n . c c */
/* */
/* Author: Fabrizio Furano (INFN Padova, 2004) */
/* Adapted from TXNetFile (root.cern.ch) originally done by */
/* Alvise Dorigo, Fabrizio Furano */
/* INFN Padova, 2003 */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
//////////////////////////////////////////////////////////////////////////
// //
// Class implementing logical connections //
// //
//////////////////////////////////////////////////////////////////////////
#include "XrdClient/XrdClientLogConnection.hh"
#include "XrdClient/XrdClientPhyConnection.hh"
#include "XrdClient/XrdClientDebug.hh"
#include "XrdClient/XrdClientSid.hh"
//_____________________________________________________________________________
XrdClientLogConnection::XrdClientLogConnection(XrdClientSid *sidmgr):
fSidManager(sidmgr) {
// Constructor
fPhyConnection = 0;
fStreamid = fSidManager ? fSidManager->GetNewSid() : 0;
}
//_____________________________________________________________________________
XrdClientLogConnection::~XrdClientLogConnection() {
// Destructor
// Decrement counter in the reference phy conn
if (fPhyConnection)
fPhyConnection->CountLogConn(-1);
if (fSidManager)
fSidManager->ReleaseSidTree(fStreamid);
}
//_____________________________________________________________________________
int XrdClientLogConnection::WriteRaw(const void *buffer, int bufferlength,
int substreamid)
{
// Send over the open physical connection 'bufferlength' bytes located
// at buffer.
// Return number of bytes sent.
Info(XrdClientDebug::kDUMPDEBUG,
"WriteRaw",
"Writing " << bufferlength << " bytes to physical connection");
return fPhyConnection->WriteRaw(buffer, bufferlength, substreamid);
}
//_____________________________________________________________________________
int XrdClientLogConnection::ReadRaw(void *buffer, int bufferlength)
{
// Receive from the open physical connection 'bufferlength' bytes and
// save in buffer.
// Return number of bytes received.
Info(XrdClientDebug::kDUMPDEBUG,
"ReadRaw",
"Reading " << bufferlength << " bytes from physical connection");
return fPhyConnection->ReadRaw(buffer, bufferlength);
}
//_____________________________________________________________________________
UnsolRespProcResult XrdClientLogConnection::ProcessUnsolicitedMsg(XrdClientUnsolMsgSender *sender,
XrdClientMessage *unsolmsg)
{
// We are here if an unsolicited response comes from the connmgr
// The response comes in the form of an XrdClientMessage *, that must NOT be
// destroyed after processing. It is destroyed by the first sender.
// Remember that we are in a separate thread, since unsolicited responses
// are asynchronous by nature.
//Info(XrdClientDebug::kDUMPDEBUG, "LogConnection",
// "Processing unsolicited response (ID:"<HeaderSID()<<")");
// Local processing ....
// We propagate the event to the obj which registered itself here
return SendUnsolicitedMsg(sender, unsolmsg);
}