blob: d336bdd2219d1804b8d2a75a9d9a83872c15ce08 [file] [log] [blame]
/*
* Copyright 2003-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
* @author Sanjaya Singharage (sanjayas@opensource.lk, sanjayas@jkcsworld.com)
*
*/
#include "SessionHandler.hpp"
#include <axis/GDefine.hpp>
#include <axis/IHandlerSoapSerializer.hpp>
#include <axis/IHandlerSoapDeSerializer.hpp>
#include <axis/BasicNode.hpp>
#include <iostream>
SessionHandler::SessionHandler()
{
m_pOption = NULL;
m_sEmpty = "";
}
SessionHandler::~SessionHandler()
{
}
const string& SessionHandler::getOption(const string& sArg)
{
map<string, string>::const_iterator it = m_pOption->find(sArg);
if (it != m_pOption->end())
{
return (*it).second;
}
return m_sEmpty;
}
void SessionHandler::setOptionList(const map<string, string>* OptionList)
{
m_pOption = OptionList;
}
int SessionHandler::invoke(void *pvIMsg)
{
IMessageData *pIMsg = (IMessageData*) pvIMsg;
AxisChar * sessionid = NULL;
const AxisChar * pachSessionHeaderLocalName = "sessionID";
if(pIMsg->isPastPivot()) {
/* Called on the client response path */
IHandlerSoapDeSerializer* pIHandlerSoapDeSerializer;
pIMsg->getSoapDeSerializer(&pIHandlerSoapDeSerializer);
IHeaderBlock* pIHeaderBlock = pIHandlerSoapDeSerializer->
getHeaderBlock("sessionID",
"http://xml.apache.org/axis/session");
if (pIHeaderBlock != NULL)
{
if(strcmp(pachSessionHeaderLocalName,pIHeaderBlock->getLocalName())==0)
{
const BasicNode* pBasicNode= pIHeaderBlock->getFirstChild();
if(CHARACTER_NODE == pBasicNode->getNodeType())
{
pIMsg->setProperty("sessionid",pBasicNode->getValue());
}
}
}
}
else
{
/* Called on the client request path */
sessionid = (AxisChar *)pIMsg->getProperty("sessionid");
if(strcmp("", sessionid)!=0)
{
IHandlerSoapSerializer* pISZ;
pIMsg->getSoapSerializer(&pISZ);
IHeaderBlock* pIHeaderBlock= pISZ->createHeaderBlock();
pIHeaderBlock->setLocalName("sessionID");
pIHeaderBlock->setUri("http://xml.apache.org/axis/session");
pIHeaderBlock->createStdAttribute(MUST_UNDERSTAND_FALSE,
SOAP_VER_1_1);
pIHeaderBlock->createStdAttribute(ACTOR, SOAP_VER_1_1);
pIHeaderBlock->createAttribute("type", "xsi", "soapenc:long");
pIHeaderBlock->createNamespaceDecl("soapenc",
"http://schemas.xmlsoap.org/soap/encoding/");
const AxisChar* pachHeaderVal = sessionid;
BasicNode* pBasicNode = pIHeaderBlock->createChild(CHARACTER_NODE);
pBasicNode->setValue(pachHeaderVal);
pIHeaderBlock->addChild(pBasicNode);
}
}
return AXIS_SUCCESS;
}
void SessionHandler::onFault(void *pvIMsg)
{
}
int SessionHandler::init()
{
//do any initialization, resetting of values
return AXIS_SUCCESS;
}
int SessionHandler::fini()
{
//do any finalizatoin
return AXIS_SUCCESS;
}