/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
/
/**
* SOURCE: rasmgr_utils_comm.cc
*
* MODULE: rascontrol
* CLASS: RasMgrClientComm, UserLogin
*
* PURPOSE:
* rasmgr-Client communication and login classes
*
* COMMENTS:
*
*
*/
// trace macros
#include "debug-clt.hh"
#include "globals.hh"
#include "rasmgr_utils_comm.hh"
#include "rascontrol.hh"
RasMgrClientComm::RasMgrClientComm()
{
rasmgrSocket=-1;
userName[0]= EOS_CHAR;
encrPass[0]= EOS_CHAR;
rasmgrHost[0]= EOS_CHAR;
answerBody=answerMessage;
answerMessage[0]= EOS_CHAR;
}
RasMgrClientComm::~RasMgrClientComm()
{
}
void RasMgrClientComm::setRasMgrHost(const char *rasmgrHost, int rasmgrPort)
{
strcpy(this->rasmgrHost,rasmgrHost);
this->rasmgrPort=rasmgrPort;
}
const char* RasMgrClientComm::getRasMgrHost()
{ return rasmgrHost;
}
void RasMgrClientComm::setUserIdentification(const char *userName, const char *encrPass)
{
strcpy(this->userName,userName);
strcpy(this->encrPass,encrPass);
}
int RasMgrClientComm::openSocket()
{
ENTER("RasMgrClientComm::openSocket: enter." );
// if open already, close beforehand
if(rasmgrSocket!=-1)
{
TALK ("RasMgrClientComm::openSocket: socket was open, closing it." );
closeSocket();
}
struct protoent *getprotoptr = getprotoptr=getprotobyname("tcp"); // FIXME: what is this???
struct hostent *hostinfo = gethostbyname(rasmgrHost);
if(hostinfo==NULL)
{
TALK ("RasMgrClientComm::openSocket: leave. unknown host " << rasmgrHost );
return -1;
}
sockaddr_in internetAddress;
internetAddress.sin_family=AF_INET;
internetAddress.sin_port=htons(rasmgrPort);
internetAddress.sin_addr=*(struct in_addr*)hostinfo->h_addr;
rasmgrSocket=socket(PF_INET,SOCK_STREAM,getprotoptr->p_proto);
if(rasmgrSocket<0)
{
int tempErrno = errno;
TALK ("RasMgrClientComm::openSocket: leave. error opening socket: " << strerror(tempErrno ) );
return -1;
}
if(0>connect(rasmgrSocket,(struct sockaddr*)&internetAddress,sizeof(internetAddress)))
{
int tempErrno = errno;
TALK ("RasMgrClientComm::openSocket: leave. error connecting socket: " << strerror(tempErrno ) );
return -1;
}
LEAVE( "RasMgrClientComm::openSocket: leave. ok." );
return 0;
}
void RasMgrClientComm::closeSocket()
{
ENTER( "RasMgrClientComm::closeSocket. enter." );
if(rasmgrSocket >0)
{
TALK( "RasMgrClientComm::closeSocket. closing, socket=" << rasmgrSocket );
close(rasmgrSocket);
rasmgrSocket=-1;
}
LEAVE( "RasMgrClientComm::closeSocket. leave." );
}
int RasMgrClientComm::sendMessage(const char *message)
{
char request[MAXMSG];
int result = COMM_CONT; // was: 0, but this is same value
ENTER( "RasMgrClientComm::sendMessage: enter. message=" << message );
sprintf(request, "POST rascontrol HTTP/1.1\r\nAccept: text/plain\r\nUserAgent: rascontrol/2.0");
sprintf(request+strlen(request),"\r\nAuthorization: ras %s:%s",userName,encrPass);//"rasadmin","d293a15562d3e70b6fdc5ee452eaed40");
sprintf(request+strlen(request),"\r\nContent length: %d\r\n\r\n%s ",strlen(message)+1,message);
int reqLen=strlen(request)+1; // including final '\0'!!
if(writeWholeMessage(rasmgrSocket,request,reqLen)