metaproxy  1.21.0
Public Member Functions | Private Attributes | List of all members
metaproxy_1::filter::FrontendNet::ThreadPoolPackage Class Reference
Inheritance diagram for metaproxy_1::filter::FrontendNet::ThreadPoolPackage:
Inheritance graph
Collaboration diagram for metaproxy_1::filter::FrontendNet::ThreadPoolPackage:
Collaboration graph

Public Member Functions

 ThreadPoolPackage (mp::Package *package, yf::FrontendNet::ZAssocChild *ses, Rep *rep)
 
 ~ThreadPoolPackage ()
 
IThreadPoolMsghandle ()
 
void result (const char *t_info)
 
bool cleanup (void *info)
 
- Public Member Functions inherited from metaproxy_1::IThreadPoolMsg
virtual ~IThreadPoolMsg ()
 

Private Attributes

yaz_timing_t timer
 
ZAssocChildm_assoc_child
 
mp::Package * m_package
 
Repm_p
 

Detailed Description

Definition at line 149 of file filter_frontend_net.cpp.

Constructor & Destructor Documentation

◆ ThreadPoolPackage()

mp::filter::FrontendNet::ThreadPoolPackage::ThreadPoolPackage ( mp::Package *  package,
yf::FrontendNet::ZAssocChild *  ses,
Rep rep 
)

◆ ~ThreadPoolPackage()

mp::filter::FrontendNet::ThreadPoolPackage::~ThreadPoolPackage ( )

Definition at line 200 of file filter_frontend_net.cpp.

201 {
202  yaz_timing_destroy(&timer); // timer may be NULL
203  delete m_package;
204 }

Member Function Documentation

◆ cleanup()

bool mp::filter::FrontendNet::ThreadPoolPackage::cleanup ( void *  info)
virtual

Implements metaproxy_1::IThreadPoolMsg.

Definition at line 206 of file filter_frontend_net.cpp.

207 {
208  mp::Session *ses = (mp::Session *) info;
209  if (*ses == m_package->session())
210  {
212  return true;
213  }
214  return false;
215 }

◆ handle()

mp::IThreadPoolMsg * mp::filter::FrontendNet::ThreadPoolPackage::handle ( )
virtual

◆ result()

void mp::filter::FrontendNet::ThreadPoolPackage::result ( const char *  t_info)
virtual

Implements metaproxy_1::IThreadPoolMsg.

Definition at line 217 of file filter_frontend_net.cpp.

218 {
220 
221  yazpp_1::GDU *gdu = &m_package->response();
222 
223  if (gdu->get())
224  {
225  int len;
226  m_assoc_child->send_GDU(gdu->get(), &len);
227 
228  yaz_timing_stop(timer);
229  double duration = yaz_timing_get_real(timer);
230 
231  size_t ent = 0;
232  while (m_p->m_duration_lim[ent] != 0.0 && duration > m_p->m_duration_lim[ent])
233  ent++;
234  m_p->m_duration_freq[ent]++;
235 
236  m_p->m_duration_total += duration;
237 
238  if (m_p->m_duration_max < duration)
239  m_p->m_duration_max = duration;
240 
241  if (m_p->m_duration_min == 0.0 || m_p->m_duration_min > duration)
242  m_p->m_duration_min = duration;
243 
244  if (m_p->m_msg_config.length())
245  {
246  Z_GDU *z_gdu = gdu->get();
247 
248  std::ostringstream os;
249  os << m_p->m_msg_config << " "
250  << *m_package << " "
251  << std::fixed << std::setprecision (6) << duration << " ";
252 
253  if (z_gdu)
254  os << *z_gdu;
255  else
256  os << "-";
257 
258  yaz_log(YLOG_LOG, "%s %s", os.str().c_str(), t_info);
259  }
260  }
261  else if (!m_package->session().is_closed())
262  {
263  // no response package and yet the session is still open..
264  // means that request is unhandled..
265  yazpp_1::GDU *gdu_req = &m_package->request();
266  Z_GDU *z_gdu = gdu_req->get();
267  if (z_gdu && z_gdu->which == Z_GDU_Z3950)
268  {
269  // For Z39.50, response with a Close and shutdown
270  mp::odr odr;
271  int len;
272  Z_APDU *apdu_response = odr.create_close(
273  z_gdu->u.z3950, Z_Close_systemProblem,
274  "unhandled Z39.50 request");
275 
276  m_assoc_child->send_Z_PDU(apdu_response, &len);
277  }
278  else if (z_gdu && z_gdu->which == Z_GDU_HTTP_Request)
279  {
280  // For HTTP, respond with Server Error
281  int len;
282  mp::odr odr;
283  Z_GDU *zgdu_res
284  = odr.create_HTTP_Response(m_package->session(),
285  z_gdu->u.HTTP_Request, 500);
286  m_assoc_child->send_GDU(zgdu_res, &len);
287  }
288  m_package->session().close();
289  }
290 
291  if (m_assoc_child->m_no_requests == 0 && m_package->session().is_closed())
292  {
293  m_assoc_child->close();
294  }
295 
296 
297  delete this;
298 }

References metaproxy_1::filter::FrontendNet::m_p.

Member Data Documentation

◆ m_assoc_child

ZAssocChild* metaproxy_1::filter::FrontendNet::ThreadPoolPackage::m_assoc_child
private

Definition at line 160 of file filter_frontend_net.cpp.

◆ m_p

Rep* metaproxy_1::filter::FrontendNet::ThreadPoolPackage::m_p
private

Definition at line 162 of file filter_frontend_net.cpp.

◆ m_package

mp::Package* metaproxy_1::filter::FrontendNet::ThreadPoolPackage::m_package
private

Definition at line 161 of file filter_frontend_net.cpp.

◆ timer

yaz_timing_t metaproxy_1::filter::FrontendNet::ThreadPoolPackage::timer
private

Definition at line 159 of file filter_frontend_net.cpp.

Referenced by ThreadPoolPackage().


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