Lines Matching defs:client

106 rc_stop(rc_conn_t *client)
108 (void) pthread_mutex_lock(&client->rrc_rlock);
109 if (!client->rrc_closed) {
110 client->rrc_closed = B_TRUE;
111 (void) pthread_cond_broadcast(&client->rrc_cv);
114 adr_stream_close(client->rrc_stream);
116 (void) pthread_mutex_unlock(&client->rrc_rlock);
122 rc_conn_t *client = read_handle;
123 int res = adr_stream_read(client->rrc_stream, buf, len);
125 rc_stop(client);
132 rc_conn_t *client = write_handle;
133 return (adr_stream_write(client->rrc_stream, buf, len));
204 rc_rele(rc_conn_t *client)
206 if (!TAILQ_EMPTY(&client->rrc_objects)) {
207 (void) pthread_mutex_unlock(&client->rrc_lock);
211 xdr_destroy(&client->rrc_rxdr);
212 xdr_destroy(&client->rrc_wxdr);
213 adr_stream_free(client->rrc_stream);
216 for (message_wrapper_t *mw = TAILQ_FIRST(&client->rrc_events);
221 for (message_wrapper_t *mw = TAILQ_FIRST(&client->rrc_responses);
227 free(client);
240 rc_conn_t *client = zalloc(sizeof (rc_conn_t));
242 if (client == NULL)
245 (void) pthread_mutex_init(&client->rrc_lock, NULL);
246 (void) pthread_mutex_init(&client->rrc_rlock, NULL);
247 (void) pthread_mutex_init(&client->rrc_wlock, NULL);
248 TAILQ_INIT(&client->rrc_responses);
249 TAILQ_INIT(&client->rrc_events);
250 TAILQ_INIT(&client->rrc_objects);
251 client->rrc_seq = 100;
252 client->rrc_stream = str;
253 client->rrc_closed = B_FALSE;
254 if (!xdr_recpair(&client->rrc_rxdr, &client->rrc_wxdr, client,
256 free(client);
260 if (!rc_negotiate(&client->rrc_rxdr, &client->rrc_wxdr, ver)) {
261 rc_rele(client);
265 return (client);
283 radclient_read(rc_conn_t *client, message_wrapper_t **mwp)
290 if (!xdrrec_skiprecord(&client->rrc_rxdr) ||
291 !xdr_message(&client->rrc_rxdr, &mw->message)) {
302 rc_queue_event(rc_conn_t *client, message_wrapper_t *mw)
304 (void) pthread_mutex_lock(&client->rrc_rlock);
305 TAILQ_INSERT_TAIL(&client->rrc_events, mw, node);
306 (void) pthread_cond_broadcast(&client->rrc_cv);
307 (void) pthread_mutex_unlock(&client->rrc_rlock);
311 rc_queue_response(rc_conn_t *client, message_wrapper_t *mw)
313 (void) pthread_mutex_lock(&client->rrc_rlock);
314 TAILQ_INSERT_TAIL(&client->rrc_responses, mw, node);
315 (void) pthread_cond_broadcast(&client->rrc_cv);
316 (void) pthread_mutex_unlock(&client->rrc_rlock);
321 find_response(rc_conn_t *client, long long serial)
324 TAILQ_FOREACH(mw, &client->rrc_responses, node)
331 rc_dequeue_response(rc_conn_t *client, long long serial)
336 (void) pthread_mutex_lock(&client->rrc_rlock);
337 while ((mw = find_response(client, serial)) == NULL) {
338 if (client->rrc_closed)
340 (void) pthread_cond_wait(&client->rrc_cv, &client->rrc_rlock);
343 TAILQ_REMOVE(&client->rrc_responses, mw, node);
344 (void) pthread_mutex_unlock(&client->rrc_rlock);
354 find_event(rc_conn_t *client, const char *name)
357 return (TAILQ_FIRST(&client->rrc_events));
360 TAILQ_FOREACH(mw, &client->rrc_events, node)
367 rc_dequeue_event(rc_conn_t *client, const char *name, boolean_t block)
372 (void) pthread_mutex_lock(&client->rrc_rlock);
373 while ((mw = find_event(client, name)) == NULL && block &&
374 !client->rrc_closed)
375 (void) pthread_cond_wait(&client->rrc_cv, &client->rrc_rlock);
377 TAILQ_REMOVE(&client->rrc_responses, mw, node);
379 (void) pthread_mutex_unlock(&client->rrc_rlock);
386 rc_set_threaded(rc_conn_t *client, boolean_t threaded)
388 (void) pthread_mutex_lock(&client->rrc_lock);
389 client->rrc_threaded = threaded;
391 (void) pthread_cond_broadcast(&client->rrc_cv);
392 (void) pthread_mutex_unlock(&client->rrc_lock);
396 rc_thread(rc_conn_t *client)
398 (void) pthread_mutex_lock(&client->rrc_lock);
399 assert(client->rrc_threaded);
400 (void) pthread_mutex_unlock(&client->rrc_lock);
404 if (!radclient_read(client, &mw))
408 rc_queue_response(client, mw);
410 rc_queue_event(client, mw);
413 rc_stop(client);
414 rc_set_threaded(client, B_FALSE);
444 rc_wait(rc_conn_t *client, long long serial)
448 (void) pthread_mutex_lock(&client->rrc_lock);
449 if (client->rrc_threaded) {
450 (void) pthread_mutex_unlock(&client->rrc_lock);
451 return (rc_dequeue_response(client, serial));
456 if (!radclient_read(client, &mw)) {
457 (void) pthread_mutex_unlock(&client->rrc_lock);
462 rc_queue_event(client, mw);
465 (void) pthread_mutex_unlock(&client->rrc_lock);
477 rc_stop(client);