metaproxy  1.21.0
Private Member Functions | Private Attributes | Friends | List of all members
metaproxy_1::filter::Z3950Client::Assoc Class Reference
Inheritance diagram for metaproxy_1::filter::Z3950Client::Assoc:
Inheritance graph
Collaboration diagram for metaproxy_1::filter::Z3950Client::Assoc:
Collaboration graph

Private Member Functions

 Assoc (yazpp_1::SocketManager *socket_manager, yazpp_1::IPDU_Observable *PDU_Observable, std::string host, int connect_timeout, int init_timeout, int max_sockets_timeout, int general_timeout)
 
 ~Assoc ()
 
void connectNotify ()
 
void failNotify ()
 
void timeoutNotify ()
 
void recv_GDU (Z_GDU *gdu, int len)
 
void fixup_nsd (ODR odr, Z_Records *records)
 
void fixup_nsd (ODR odr, Z_DefaultDiagFormat *nsd)
 
void fixup_init (ODR odr, Z_InitResponse *initrs)
 
yazpp_1::IPDU_Observer * sessionNotify (yazpp_1::IPDU_Observable *the_PDU_Observable, int fd)
 

Private Attributes

yazpp_1::SocketManager * m_socket_manager
 
yazpp_1::IPDU_Observable * m_PDU_Observable
 
Package * m_package
 
bool m_in_use
 
bool m_waiting
 
bool m_destroyed
 
int m_connected
 
bool m_has_closed
 
int m_queue_len
 
int m_time_elapsed
 
int m_connect_time_max
 
int m_init_time_max
 
int m_max_sockets_timeout_sec
 
int m_general_time_max
 
std::string m_host
 

Friends

class Rep
 

Detailed Description

Definition at line 50 of file filter_z3950_client.cpp.

Constructor & Destructor Documentation

◆ Assoc()

mp::filter::Z3950Client::Assoc::Assoc ( yazpp_1::SocketManager *  socket_manager,
yazpp_1::IPDU_Observable *  PDU_Observable,
std::string  host,
int  connect_timeout,
int  init_timeout,
int  max_sockets_timeout,
int  general_timeout 
)
private

Definition at line 113 of file filter_z3950_client.cpp.

119  : Z_Assoc(PDU_Observable),
120  m_socket_manager(socket_manager), m_PDU_Observable(PDU_Observable),
121  m_package(0), m_in_use(true), m_waiting(false),
122  m_destroyed(false), m_connected(0), m_has_closed(false),
123  m_queue_len(1),
124  m_time_elapsed(0),
125  m_connect_time_max(connect_timeout),
126  m_init_time_max(init_timeout),
127  m_max_sockets_timeout_sec(max_sockets_timeout),
128  m_general_time_max(general_timeout),
129  m_host(host)
130 {
131  // std::cout << "create assoc " << this << "\n";
132 }

◆ ~Assoc()

mp::filter::Z3950Client::Assoc::~Assoc ( )
private

Definition at line 134 of file filter_z3950_client.cpp.

135 {
136  // std::cout << "destroy assoc " << this << "\n";
137 }

Member Function Documentation

◆ connectNotify()

void mp::filter::Z3950Client::Assoc::connectNotify ( )
private

Definition at line 139 of file filter_z3950_client.cpp.

140 {
141  m_waiting = false;
142 
143  m_connected = 1;
144 }

◆ failNotify()

void mp::filter::Z3950Client::Assoc::failNotify ( )
private

Definition at line 146 of file filter_z3950_client.cpp.

147 {
148  m_waiting = false;
149 
150  mp::odr odr;
151 
152  if (m_package)
153  {
154  Z_GDU *gdu = m_package->request().get();
155  Z_APDU *apdu = 0;
156  if (gdu && gdu->which == Z_GDU_Z3950)
157  apdu = gdu->u.z3950;
158 
159  m_package->response() = odr.create_close(apdu, Z_Close_peerAbort, 0);
160  m_package->session().close();
161  }
162 }

◆ fixup_init()

void mp::filter::Z3950Client::Assoc::fixup_init ( ODR  odr,
Z_InitResponse *  initrs 
)
private

Definition at line 231 of file filter_z3950_client.cpp.

232 {
233  Z_External *uif = initrs->userInformationField;
234 
235  if (uif && uif->which == Z_External_userInfo1)
236  {
237  Z_OtherInformation *ui = uif->u.userInfo1;
238  int i;
239  for (i = 0; i < ui->num_elements; i++)
240  {
241  Z_OtherInformationUnit *unit = ui->list[i];
242  if (unit->which == Z_OtherInfo_externallyDefinedInfo &&
243  unit->information.externallyDefinedInfo &&
244  unit->information.externallyDefinedInfo->which ==
245  Z_External_diag1)
246  {
247  Z_DiagnosticFormat *diag =
248  unit->information.externallyDefinedInfo->u.diag1;
249  int j;
250  for (j = 0; j < diag->num; j++)
251  {
252  Z_DiagnosticFormat_s *ds = diag->elements[j];
253  if (ds->which == Z_DiagnosticFormat_s_defaultDiagRec)
254  {
255  Z_DefaultDiagFormat *r = ds->u.defaultDiagRec;
256  char *oaddinfo = r->u.v2Addinfo;
257  char *naddinfo = (char *) odr_malloc(
258  odr,
259  (oaddinfo ? strlen(oaddinfo) : 0) + 20 +
260  m_host.length());
261  *naddinfo = '\0';
262  if (oaddinfo && *oaddinfo)
263  {
264  strcat(naddinfo, oaddinfo);
265  strcat(naddinfo, " ");
266  }
267  strcat(naddinfo, "(backend=");
268  strcat(naddinfo, m_host.c_str());
269  strcat(naddinfo, ")");
270 
271  r->u.v2Addinfo = naddinfo;
272  }
273  }
274  }
275  }
276  }
277 }

◆ fixup_nsd() [1/2]

void mp::filter::Z3950Client::Assoc::fixup_nsd ( ODR  odr,
Z_DefaultDiagFormat *  nsd 
)
private

Definition at line 194 of file filter_z3950_client.cpp.

195 {
196  std::string addinfo;
197 
198  // should really check for nsd->which.. But union has two members
199  // containing almost same data
200  const char *v2Addinfo = nsd->u.v2Addinfo;
201  // Z_InternationalString *v3Addinfo;
202  if (v2Addinfo && *v2Addinfo)
203  {
204  addinfo.assign(nsd->u.v2Addinfo);
205  addinfo += " ";
206  }
207  addinfo += "(backend=" + m_host + ")";
208  nsd->u.v2Addinfo = odr_strdup(odr, addinfo.c_str());
209 }

◆ fixup_nsd() [2/2]

void mp::filter::Z3950Client::Assoc::fixup_nsd ( ODR  odr,
Z_Records *  records 
)
private

Definition at line 211 of file filter_z3950_client.cpp.

212 {
213  if (records && records->which == Z_Records_NSD)
214  {
215  fixup_nsd(odr, records->u.nonSurrogateDiagnostic);
216  }
217  if (records && records->which == Z_Records_multipleNSD)
218  {
219  Z_DiagRecs *drecs = records->u.multipleNonSurDiagnostics;
220  int i;
221  for (i = 0; i < drecs->num_diagRecs; i++)
222  {
223  Z_DiagRec *dr = drecs->diagRecs[i];
224 
225  if (dr->which == Z_DiagRec_defaultFormat)
226  fixup_nsd(odr, dr->u.defaultFormat);
227  }
228  }
229 }
void fixup_nsd(ODR odr, Z_Records *records)

◆ recv_GDU()

void mp::filter::Z3950Client::Assoc::recv_GDU ( Z_GDU *  gdu,
int  len 
)
private

Definition at line 279 of file filter_z3950_client.cpp.

280 {
281  m_waiting = false;
282 
283  if (m_package)
284  {
285  mp::odr odr; // must be in scope for response() = assignment
286  if (gdu && gdu->which == Z_GDU_Z3950)
287  {
288  Z_APDU *apdu = gdu->u.z3950;
289  switch (apdu->which)
290  {
291  case Z_APDU_searchResponse:
292  fixup_nsd(odr, apdu->u.searchResponse->records);
293  break;
294  case Z_APDU_presentResponse:
295  fixup_nsd(odr, apdu->u.presentResponse->records);
296  break;
297  case Z_APDU_initResponse:
298  fixup_init(odr, apdu->u.initResponse);
299  m_connected = 2;
300  break;
301  }
302  }
303  m_package->response() = gdu;
304  }
305 }
void fixup_init(ODR odr, Z_InitResponse *initrs)

◆ sessionNotify()

yazpp_1::IPDU_Observer * mp::filter::Z3950Client::Assoc::sessionNotify ( yazpp_1::IPDU_Observable *  the_PDU_Observable,
int  fd 
)
private

Definition at line 307 of file filter_z3950_client.cpp.

310 {
311  return 0;
312 }

◆ timeoutNotify()

void mp::filter::Z3950Client::Assoc::timeoutNotify ( )
private

Definition at line 164 of file filter_z3950_client.cpp.

165 {
166  m_time_elapsed++;
170  {
171  m_waiting = false;
172 
173  mp::odr odr;
174 
175  if (m_package)
176  {
177  Z_GDU *gdu = m_package->request().get();
178  Z_APDU *apdu = 0;
179  if (gdu && gdu->which == Z_GDU_Z3950)
180  apdu = gdu->u.z3950;
181 
182  if (m_connected == 2)
183  m_package->response() =
184  odr.create_close(apdu, Z_Close_lackOfActivity, 0);
185  else
186  m_package->response() =
187  odr.create_close(apdu, Z_Close_peerAbort, 0);
188 
189  m_package->session().close();
190  }
191  }
192 }

Friends And Related Function Documentation

◆ Rep

friend class Rep
friend

Definition at line 51 of file filter_z3950_client.cpp.

Member Data Documentation

◆ m_connect_time_max

int metaproxy_1::filter::Z3950Client::Assoc::m_connect_time_max
private

Definition at line 79 of file filter_z3950_client.cpp.

◆ m_connected

int metaproxy_1::filter::Z3950Client::Assoc::m_connected
private

Definition at line 75 of file filter_z3950_client.cpp.

◆ m_destroyed

bool metaproxy_1::filter::Z3950Client::Assoc::m_destroyed
private

Definition at line 74 of file filter_z3950_client.cpp.

◆ m_general_time_max

int metaproxy_1::filter::Z3950Client::Assoc::m_general_time_max
private

Definition at line 82 of file filter_z3950_client.cpp.

◆ m_has_closed

bool metaproxy_1::filter::Z3950Client::Assoc::m_has_closed
private

Definition at line 76 of file filter_z3950_client.cpp.

◆ m_host

std::string metaproxy_1::filter::Z3950Client::Assoc::m_host
private

Definition at line 83 of file filter_z3950_client.cpp.

◆ m_in_use

bool metaproxy_1::filter::Z3950Client::Assoc::m_in_use
private

Definition at line 72 of file filter_z3950_client.cpp.

◆ m_init_time_max

int metaproxy_1::filter::Z3950Client::Assoc::m_init_time_max
private

Definition at line 80 of file filter_z3950_client.cpp.

◆ m_max_sockets_timeout_sec

int metaproxy_1::filter::Z3950Client::Assoc::m_max_sockets_timeout_sec
private

Definition at line 81 of file filter_z3950_client.cpp.

◆ m_package

Package* metaproxy_1::filter::Z3950Client::Assoc::m_package
private

Definition at line 71 of file filter_z3950_client.cpp.

◆ m_PDU_Observable

yazpp_1::IPDU_Observable* metaproxy_1::filter::Z3950Client::Assoc::m_PDU_Observable
private

Definition at line 70 of file filter_z3950_client.cpp.

◆ m_queue_len

int metaproxy_1::filter::Z3950Client::Assoc::m_queue_len
private

Definition at line 77 of file filter_z3950_client.cpp.

◆ m_socket_manager

yazpp_1::SocketManager* metaproxy_1::filter::Z3950Client::Assoc::m_socket_manager
private

Definition at line 69 of file filter_z3950_client.cpp.

◆ m_time_elapsed

int metaproxy_1::filter::Z3950Client::Assoc::m_time_elapsed
private

Definition at line 78 of file filter_z3950_client.cpp.

◆ m_waiting

bool metaproxy_1::filter::Z3950Client::Assoc::m_waiting
private

Definition at line 73 of file filter_z3950_client.cpp.


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