HttpResponse ServiceTask::apacheRun(HttpRequest* req) { //logger << dlib << endl; HttpResponse res; string ip; string alldatlg = "\ngot fd from parent"; try { string webpath = serverRootDirectory + "web/"; if(req->getFile()=="") { logger << req->getFile() << endl; req->setFile("index.html"); } if(req->hasCookie()) { logger << "has the session id" << endl; if(!configData.sessatserv) req->getSession()->setSessionAttributes(req->getCookieInfo()); else { string id = req->getCookieInfoAttribute("FFEADID"); logger << id << endl; map<string,string> values = readFromSharedMemeory(id); req->getSession()->setSessionAttributes(values); } } if(configData.cntMap[req->getCntxt_name()]!="true") { req->setCntxt_name("default"); req->setCntxt_root(webpath+"default"); req->setUrl(webpath+"default"+req->getActUrl()); } //logger << req->getCntxt_name() << req->getCntxt_root() << req->getUrl() << endl; if(configData.appMap[req->getCntxt_name()]!="false") { if(dlib == NULL) { cerr << dlerror() << endl; exit(-1); } string meth1 = (req->getCntxt_name()+"checkRules"); string path1; void *mkr1 = dlsym(dlib, meth1.c_str()); if(mkr1!=NULL) { typedef string (*DCPPtr1) (string,HttpSession); DCPPtr1 f = (DCPPtr1)mkr1; path1 = f(req->getUrl(),*(req->getSession())); //logger << path1 << flush; if(path1=="FAILED") { req->setUrl(""); } else if(path1!="" && path1!=req->getUrl()) { req->setUrl(path1); } } } string ext = getFileExtension(req->getUrl()); vector<unsigned char> test; string content; string claz; bool isoAuthRes = false; long sessionTimeoutVar = configData.sessionTimeout; bool isContrl = securityHandler.handle(configData.ip_address, req, res, configData.securityObjectMap, sessionTimeoutVar, dlib, configData.cntMap); filterHandler.handleIn(req, res, configData.filterMap, dlib, ext); if(!isContrl) { isContrl = authHandler.handle(configData.autMap, configData.autpattMap, req, res, configData.filterMap, dlib, ext); } string pthwofile = req->getCntxt_name()+req->getActUrl(); if(req->getCntxt_name()!="default" && configData.cntMap[req->getCntxt_name()]=="true") { pthwofile = req->getActUrl(); } if(!isContrl) { isContrl = controllerHandler.handle(req, res, configData.urlpattMap, configData.mappattMap, dlib, ext, configData.rstCntMap, configData.mapMap, configData.urlMap, pthwofile); } /*After going through the controller the response might be blank, just set the HTTP version*/ res.setHttpVersion(req->getHttpVersion()); //logger << req->toString() << endl; if(isContrl) { } else if(ext==".form") { formHandler.handle(req, res, configData.formMap, dlib); } else if((req->getContent_type().find("application/soap+xml")!=string::npos || req->getContent_type().find("text/xml")!=string::npos) && (req->getContent().find("<soap:Envelope")!=string::npos || req->getContent().find("<soapenv:Envelope")!=string::npos) && configData.wsdlmap[req->getFile()]==req->getCntxt_name()) { soapHandler.handle(req, res, dlib, configData.props[".xml"]); } else { bool cntrlit = scriptHandler.handle(req, res, configData.handoffs, dlib, ext, configData.props); logger << "html page requested" <<endl; if(cntrlit) { } else { cntrlit = extHandler.handle(req, res, dlib, configData.resourcePath, configData.tmplMap, configData.vwMap, ext, configData.props); } if(!cntrlit && ext==".fview") { content = fviewHandler.handle(req, res, configData.fviewmap); } else { if(res.getContent_str()=="") content = getContentStr(req->getUrl(),configData.lprops[req->getDefaultLocale()],ext); else content = res.getContent_str(); } if(content.length()==0) { res.setStatusCode("404"); res.setStatusMsg("Not Found"); //res.setContent_len(CastUtil::lexical_cast<string>(0)); } else { res.setStatusCode("200"); res.setStatusMsg("OK"); if(res.getContent_type()=="")res.setContent_type(configData.props[ext]); res.setContent_str(content); //res.setContent_len(CastUtil::lexical_cast<string>(content.length())); //sess.setAttribute("CURR",req->getUrl()); } } filterHandler.handleOut(req, res, configData.filterMap, dlib, ext); alldatlg += "--processed data"; string h1; bool sessionchanged = !req->hasCookie(); sessionchanged |= req->getSession()->isDirty(); if(req->getConnection()!="") res.setConnection("close"); createResponse(res,sessionchanged,req->getSession()->getSessionAttributes(),req->getCookieInfoAttribute("FFEADID"), sessionTimeoutVar, configData.sessatserv); //h1 = res.generateResponse(); delete req; logger << alldatlg << "--sent data--DONE" << flush; //sessionMap[sessId] = sess; } catch(const char* ex) { logger << ex << endl; } catch(...) { logger << "Standard exception: " << endl; } return res; }
bool ControllerHandler::handle(HttpRequest* req, HttpResponse& res, map<string, string> urlpattMap, map<string, string> mappattMap, void* dlib, string ext, resFuncMap rstCntMap, map<string, string> mapMap, map<string, string> urlMap, string pthwofile) { Logger logger = Logger::getLogger("ControllerHandler"); string claz; bool isContrl = false; if((urlpattMap[req->getCntxt_name()+"*.*"]!="" || urlMap[req->getCntxt_name()+ext]!="")) { //logger << "Controller requested for " << req->getCntxt_name() << " name " << urlMap[req->getCntxt_name()+ext] << endl; if(urlpattMap[req->getCntxt_name()+"*.*"]!="") claz = "getReflectionCIFor" + urlpattMap[req->getCntxt_name()+"*.*"]; else claz = "getReflectionCIFor" + urlMap[req->getCntxt_name()+ext]; string libName = Constants::INTER_LIB_FILE; if(dlib == NULL) { cerr << dlerror() << endl; exit(-1); } void *mkr = dlsym(dlib, claz.c_str()); if(mkr!=NULL) { FunPtr f = (FunPtr)mkr; ClassInfo srv = f(); args argus; Constructor ctor = srv.getConstructor(argus); Reflector ref; void *_temp = ref.newInstanceGVP(ctor); Controller *thrd = (Controller *)_temp; try{ logger << "Controller called" << endl; res = thrd->service(*req); logger << res.getStatusCode() << endl; logger << res.getContent_type() << endl; logger << res.getContent_len() << endl; if(res.getStatusCode()!="") isContrl = true; ext = AuthHandler::getFileExtension(req->getUrl()); //delete mkr; }catch(...){ logger << "Controller exception" << endl;} logger << "Controller called\n" << flush; } } else if((mappattMap[req->getCntxt_name()+"*.*"]!="" || mapMap[req->getCntxt_name()+ext]!="")) { string file = req->getFile(); string fili = file.substr(0,file.find_last_of(".")); if(mappattMap[req->getCntxt_name()+"*.*"]!="") { req->setFile(fili+mappattMap[req->getCntxt_name()+"*.*"]); logger << "URL mapped from * to " << mappattMap[req->getCntxt_name()+"*.*"] << endl; } else { req->setFile(fili+mapMap[req->getCntxt_name()+ext]); logger << "URL mapped from " << ext << " to " << mapMap[req->getCntxt_name()+ext] << endl; } } else { resFuncMap::iterator it; RestFunction rft; bool flag = false; int prsiz = 0; vector<string> valss; //logger << pthwofile << endl; for (it=rstCntMap.begin();it!=rstCntMap.end();it++) { valss.clear(); //logger << it->first << endl; //if(pthwofile.find(it->first)!=string::npos) { RestFunction ft = it->second; prsiz = ft.params.size(); string pthwofiletemp(pthwofile); if(ft.baseUrl=="") { logger << "checking url : " << pthwofiletemp << ",param size: " << prsiz << ", against url: " << it->first << endl; for (int var = 0; var < prsiz; var++) { //logger << "loop - " << pthwofiletemp << endl; string valsvv(pthwofiletemp.substr(pthwofiletemp.find_last_of("/")+1)); pthwofiletemp = pthwofiletemp.substr(0, pthwofiletemp.find_last_of("/")); valss.push_back(valsvv); } reverse(valss.begin(),valss.end()); //logger << "after - " << pthwofiletemp << endl; /*if(pthwofiletemp.at(pthwofiletemp.length()-1)=='/') { pthwofiletemp = pthwofiletemp.substr(0, pthwofiletemp.length()-1); }*/ //logger << "after - " << pthwofiletemp << endl; logger << "checking url : " << pthwofiletemp << ",param size: " << prsiz << ",vals: " << valss.size() << ", against url: " << it->first << endl; if(it->first==pthwofiletemp) { string lhs = StringUtil::toUpperCopy(ft.meth); string rhs = StringUtil::toUpperCopy(req->getMethod()); logger << lhs << " <> " << rhs << endl; if(prsiz==(int)valss.size() && lhs==rhs) { logger << "got correct url -- restcontroller " << endl; rft = ft; flag = true; } else { res.setStatusCode("404"); res.setStatusMsg("Not Found"); //res.setContent_type("text/plain"); /*if(prsiz==valss.size()) res.setContent_str("Invalid number of arguments"); else res.setContent_str("Invalid HTTPMethod used");*/ logger << "Rest Controller Param/Method Error" << endl; } break; } } else { string baseUrl(req->getCntxt_name()+ft.baseUrl); logger << "checking url : " << pthwofiletemp << ",param size: " << prsiz << ", against url: " << baseUrl << endl; for (int var = 1; var <= prsiz; var++) { strVec vemp; stringstream ss; ss << "{"; ss << var; ss << "}"; string param; ss >> param; StringUtil::split(vemp, baseUrl, (param)); if(vemp.size()==2 && pthwofiletemp.find(vemp.at(0))!=string::npos) { string temp = pthwofiletemp; StringUtil::replaceFirst(temp, vemp.at(0), ""); if(temp.find("/")!=string::npos) { pthwofiletemp = temp.substr(temp.find("/")); temp = temp.substr(0, temp.find("/")); } valss.push_back(temp); baseUrl = vemp.at(1); logger << "variable at " << param << " mapped to " << temp << " from URL" << endl; logger << baseUrl << endl; logger << pthwofiletemp << endl; } else { flag = false; break; } } string lhs = StringUtil::toUpperCopy(ft.meth); string rhs = StringUtil::toUpperCopy(req->getMethod()); logger << lhs << " <> " << rhs << endl; if(prsiz==(int)valss.size() && lhs==rhs) { logger << "got correct url -- restcontroller " << endl; rft = ft; flag = true; break; } else { res.setStatusCode("404"); res.setStatusMsg("Not Found"); //res.setContent_type("text/plain"); /*if(prsiz==valss.size()) res.setContent_str("Invalid number of arguments"); else res.setContent_str("Invalid HTTPMethod used");*/ logger << "Rest Controller Param/Method Error" << endl; } } } } if(flag) { //logger << "inside restcontroller logic ..." << endl; string libName = Constants::INTER_LIB_FILE; if(dlib == NULL) { cerr << dlerror() << endl; exit(-1); } string clasnam("getReflectionCIFor"+rft.clas); void *mkr = dlsym(dlib, clasnam.c_str()); logger << mkr << endl; if(mkr!=NULL) { FunPtr f = (FunPtr)mkr; ClassInfo srv = f(); args argus; Constructor ctor = srv.getConstructor(argus); Reflector ref; void *_temp = ref.newInstanceGVP(ctor); RestController* rstcnt = (RestController*)_temp; rstcnt->request = req; rstcnt->response = &res; vals valus; bool invValue = false; for (int var = 0; var < prsiz; var++) { try { argus.push_back(rft.params.at(var).type); if(rft.params.at(var).type=="int") { int* ival = new int(CastUtil::lexical_cast<int>(valss.at(var))); valus.push_back(ival); } else if(rft.params.at(var).type=="long") { long* ival = new long(CastUtil::lexical_cast<long>(valss.at(var))); valus.push_back(ival); } else if(rft.params.at(var).type=="double") { double* ival = new double(CastUtil::lexical_cast<double>(valss.at(var))); valus.push_back(ival); } else if(rft.params.at(var).type=="float") { float* ival = new float(CastUtil::lexical_cast<float>(valss.at(var))); valus.push_back(ival); } else if(rft.params.at(var).type=="bool") { bool* ival = new bool(CastUtil::lexical_cast<bool>(valss.at(var))); valus.push_back(ival); } else if(rft.params.at(var).type=="string") { string* sval = new string(valss.at(var)); valus.push_back(sval); } } catch (...) { invValue= true; break; } } Method meth = srv.getMethod(rft.name, argus); if(meth.getMethodName()!="" && !invValue) { ref.invokeMethodUnknownReturn(_temp,meth,valus); logger << "successfully called restcontroller" << endl; //return; } else { res.setStatusCode("404"); res.setStatusMsg("Not Found"); //res.setContent_type("text/plain"); /*if(invValue) res.setContent_str("Invalid value passed as URL param"); else res.setContent_str("Rest Controller Method Not Found");*/ logger << "Rest Controller Method Not Found" << endl; //return; } } } } return isContrl; }
void ServiceTask::run() { //logger << dlib << endl; string ip = "invalid session"; string alldatlg = "\ngot fd from parent"; SSL *ssl=NULL; BIO *sbio=NULL; BIO *io=NULL,*ssl_bio=NULL; try { int cntlen = 0; char buf[MAXBUFLENM]; strVec results; stringstream ss; string temp; //int bytes = -1; if(isSSLEnabled) { sbio=BIO_new_socket(fd,BIO_NOCLOSE); ssl=SSL_new(ctx); SSL_set_bio(ssl,sbio,sbio); io=BIO_new(BIO_f_buffer()); ssl_bio=BIO_new(BIO_f_ssl()); BIO_set_ssl(ssl_bio,ssl,BIO_CLOSE); BIO_push(io,ssl_bio); int r = SSL_accept(ssl); cout << r << endl; int bser = SSL_get_error(ssl,r); cout << bser << endl; if(r<=0) { sslHandler.error_occurred((char*)"SSL accept error",fd,ssl); return; } int er=-1; bool flag = true; while(flag) { er = BIO_gets(io,buf,BUFSIZZ-1); cout << er << endl; int bser = SSL_get_error(ssl,er); cout << bser << endl; switch(bser) { case SSL_ERROR_WANT_READ: { logger << "more to read error" << endl; break; } case SSL_ERROR_WANT_WRITE: { logger << "more to write error" << endl; break; } case SSL_ERROR_NONE: { break; } case SSL_ERROR_ZERO_RETURN: { sslHandler.error_occurred((char*)"SSL error problem",fd,ssl); if(io!=NULL)BIO_free(io); return; } default: { sslHandler.error_occurred((char*)"SSL read problem",fd,ssl); if(io!=NULL)BIO_free(io); return; } } ss << buf; //logger <<buf <<endl; if(!strcmp(buf,"\r\n") || !strcmp(buf,"\n")) break; string temp(buf); if(temp=="")continue; temp = temp.substr(0,temp.length()-1); results.push_back(temp); //logger << temp <<endl; if(temp.find("Content-Length:")!=string::npos) { std::string cntle = temp.substr(temp.find(": ")+2); cntle = cntle.substr(0,cntle.length()-1); //logger << "contne-length="<<cntle <<endl; try { cntlen = CastUtil::lexical_cast<int>(cntle); } catch(const char* ex) { logger << "bad lexical cast" <<endl; } } memset(&buf[0], 0, sizeof(buf)); } } else { int er=-1; bool flag = true; sbio=BIO_new_socket(fd,BIO_CLOSE); io=BIO_new(BIO_f_buffer()); BIO_push(io,sbio); logger << "into run method" << endl; while(flag) { er = BIO_gets(io,buf,BUFSIZZ-1); if(er==0) { close(fd); logger << "\nsocket closed before being serviced" <<flush; return; } ss << buf; if(!strcmp(buf,"\r\n") || !strcmp(buf,"\n") || er<0) break; string temp(buf); temp = temp.substr(0,temp.length()-1); results.push_back(temp); //logger << temp <<endl; if(temp.find("Content-Length:")!=string::npos) { std::string cntle = temp.substr(temp.find(": ")+2); cntle = cntle.substr(0,cntle.length()-1); //logger << "contne-length="<<cntle <<endl; try { cntlen = CastUtil::lexical_cast<int>(cntle); } catch(const char* ex) { logger << "bad lexical cast" <<endl; } } memset(&buf[0], 0, sizeof(buf)); } } ss.clear(); if(isSSLEnabled && cntlen>0) { int er=-1; if(cntlen>0) { //logger << "reading conetnt " << cntlen << endl; er = BIO_read(io,buf,cntlen); switch(SSL_get_error(ssl,er)) { case SSL_ERROR_NONE: cntlen -= er; break; case SSL_ERROR_ZERO_RETURN: { sslHandler.error_occurred((char*)"SSL error problem",fd,ssl); if(io!=NULL)BIO_free(io); return; } default: { sslHandler.error_occurred((char*)"SSL read problem",fd,ssl); if(io!=NULL)BIO_free(io); return; } } string temp(buf); results.push_back("\r"); results.push_back(temp); //logger <<buf <<endl; memset(&buf[0], 0, sizeof(buf)); } } else if(cntlen>0) { int er=-1; if(cntlen>0) { //logger << "reading conetnt " << cntlen << endl; er = BIO_read(io,buf,cntlen); if(er==0) { close(fd); logger << "\nsocket closed before being serviced" <<flush; return; } else if(er>0) { string temp(buf); results.push_back("\r"); results.push_back(temp); //logger << temp <<endl; memset(&buf[0], 0, sizeof(buf)); } } } alldatlg += "--read data"; map<string,string> params1 = *params; string webpath = serverRootDirectory + "web/"; HttpRequest* req= new HttpRequest(results,webpath); //logger << req->toString() << endl; if(req->getFile()=="") { logger << req->getFile() << endl; req->setFile("index.html"); } if(req->hasCookie()) { logger << "has the session id" << endl; if(!configData.sessatserv) req->getSession()->setSessionAttributes(req->getCookieInfo()); else { string id = req->getCookieInfoAttribute("FFEADID"); logger << id << endl; map<string,string> values = readFromSharedMemeory(id); req->getSession()->setSessionAttributes(values); } } if(configData.cntMap[req->getCntxt_name()]!="true") { req->setCntxt_name("default"); req->setCntxt_root(webpath+"default"); req->setUrl(webpath+"default"+req->getActUrl()); } //logger << req->getCntxt_name() << req->getCntxt_root() << req->getUrl() << endl; if(configData.appMap[req->getCntxt_name()]!="false") { if(dlib == NULL) { cerr << dlerror() << endl; exit(-1); } string meth1 = (req->getCntxt_name()+"checkRules"); string path1; void *mkr1 = dlsym(dlib, meth1.c_str()); if(mkr1!=NULL) { typedef string (*DCPPtr1) (string,HttpSession); DCPPtr1 f = (DCPPtr1)mkr1; path1 = f(req->getUrl(),*(req->getSession())); //logger << path1 << flush; if(path1=="FAILED") { req->setUrl(""); } else if(path1!="" && path1!=req->getUrl()) { req->setUrl(path1); } } } HttpResponse res; string ext = getFileExtension(req->getUrl()); vector<unsigned char> test; string content; string claz; bool isoAuthRes = false; long sessionTimeoutVar = configData.sessionTimeout; bool isContrl = securityHandler.handle(configData.ip_address, req, res, configData.securityObjectMap, sessionTimeoutVar, dlib, configData.cntMap); filterHandler.handleIn(req, res, configData.filterMap, dlib, ext); if(!isContrl) { isContrl = authHandler.handle(configData.autMap, configData.autpattMap, req, res, configData.filterMap, dlib, ext); } string pthwofile = req->getCntxt_name()+req->getActUrl(); if(req->getCntxt_name()!="default" && configData.cntMap[req->getCntxt_name()]=="true") { pthwofile = req->getActUrl(); } if(!isContrl) { isContrl = controllerHandler.handle(req, res, configData.urlpattMap, configData.mappattMap, dlib, ext, configData.rstCntMap, configData.mapMap, configData.urlMap, pthwofile); } /*After going through the controller the response might be blank, just set the HTTP version*/ res.setHttpVersion(req->getHttpVersion()); //logger << req->toString() << endl; if(req->getMethod()!="TRACE") { if(isContrl) { } else if(ext==".form") { formHandler.handle(req, res, configData.formMap, dlib); } else if((req->getContent_type().find("application/soap+xml")!=string::npos || req->getContent_type().find("text/xml")!=string::npos) && (req->getContent().find("<soap:Envelope")!=string::npos || req->getContent().find("<soapenv:Envelope")!=string::npos) && configData.wsdlmap[req->getFile()]==req->getCntxt_name()) { soapHandler.handle(req, res, dlib, configData.props[".xml"]); } else { bool cntrlit = scriptHandler.handle(req, res, configData.handoffs, dlib, ext, configData.props); logger << "html page requested" <<endl; if(cntrlit) { } else { cntrlit = extHandler.handle(req, res, dlib, configData.resourcePath, configData.tmplMap, configData.vwMap, ext, configData.props); } if(!cntrlit && ext==".fview") { content = fviewHandler.handle(req, res, configData.fviewmap); } else { if(res.getContent_str()=="") content = getContentStr(req->getUrl(),configData.lprops[req->getDefaultLocale()],ext); else content = res.getContent_str(); } if(content.length()==0) { res.setStatusCode("404"); res.setStatusMsg("Not Found"); //res.setContent_len(CastUtil::lexical_cast<string>(0)); } else { res.setStatusCode("200"); res.setStatusMsg("OK"); if(res.getContent_type()=="")res.setContent_type(configData.props[ext]); res.setContent_str(content); //res.setContent_len(CastUtil::lexical_cast<string>(content.length())); //sess.setAttribute("CURR",req->getUrl()); } } filterHandler.handleOut(req, res, configData.filterMap, dlib, ext); } alldatlg += "--processed data"; string h1; bool sessionchanged = !req->hasCookie(); sessionchanged |= req->getSession()->isDirty(); if(req->getConnection()!="") res.setConnection("close"); createResponse(res,sessionchanged,req->getSession()->getSessionAttributes(),req->getCookieInfoAttribute("FFEADID"), sessionTimeoutVar, configData.sessatserv); //Head should behave exactly as Get but there should be no entity body if(req->getMethod()=="HEAD") { h1 = res.generateHeadResponse(); } else if(req->getMethod()=="OPTIONS") { h1 = res.generateOptionsResponse(); } else if(req->getMethod()=="TRACE") { h1 = res.generateTraceResponse(req); } else { h1 = res.generateResponse(); } //logger << h1 << endl; if(isSSLEnabled) { int r; /* Now perform renegotiation if requested */ if(configData.client_auth==CLIENT_AUTH_REHANDSHAKE){ SSL_set_verify(ssl,SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,0); /* Stop the client from just resuming the un-authenticated session */ SSL_set_session_id_context(ssl, (const unsigned char*)&SSLHandler::s_server_auth_session_id_context, sizeof(SSLHandler::s_server_auth_session_id_context)); if(SSL_renegotiate(ssl)<=0) { sslHandler.error_occurred((char*)"SSL renegotiation error",fd,ssl); if(io!=NULL)BIO_free(io); return; } if(SSL_do_handshake(ssl)<=0) { sslHandler.error_occurred((char*)"SSL renegotiation error",fd,ssl); if(io!=NULL)BIO_free(io); return; } ssl->state=SSL_ST_ACCEPT; if(SSL_do_handshake(ssl)<=0) { sslHandler.error_occurred((char*)"SSL renegotiation error",fd,ssl); if(io!=NULL)BIO_free(io); return; } } if((r=BIO_puts(io,h1.c_str()))<=0) { sslHandler.error_occurred((char*)"send failed",fd,ssl); if(io!=NULL)BIO_free(io); return; } if((r=BIO_flush(io))<0) { sslHandler.error_occurred((char*)"Error flushing BIO",fd,ssl); if(io!=NULL)BIO_free(io); return; } sslHandler.closeSSL(fd,ssl,io); } else { int size; if ((size=send(fd,&h1[0] , h1.length(), 0)) == -1) logger << "send failed" << flush; else if(size==0) { close(fd); memset(&buf[0], 0, sizeof(buf)); logger << "socket closed for writing" << flush; return; } if(io!=NULL)BIO_free_all(io); } close(fd); memset(&buf[0], 0, sizeof(buf)); ss.clear(); //Logger::info("got new connection to process\n"+req->getFile()+" :: " + res.getStatusCode() + "\n"+req->getCntxt_name() + "\n"+req->getCntxt_root() + "\n"+req->getUrl()); delete req; logger << alldatlg << "--sent data--DONE" << flush; //sessionMap[sessId] = sess; } catch(...) { logger << "Standard exception: " << endl; } }