Lines Matching refs:conn

31 static void auth_client_input(struct auth_client_connection *conn);
64 static void auth_client_send(struct auth_client_connection *conn,
73 o_stream_nsendv(conn->output, iov, 2);
75 if (o_stream_get_buffer_used_size(conn->output) >=
79 io_remove(&conn->io);
82 if (conn->auth->set->debug) {
84 conn->auth->set->debug_passwords ?
90 struct auth_client_connection *conn)
94 auth_client_connection_unref(&conn);
96 auth_client_send(conn, reply);
101 auth_client_input_cpid(struct auth_client_connection *conn, const char *args)
106 i_assert(conn->pid == 0);
113 if (conn->login_requests)
126 i_assert(old != conn);
140 conn->refcount++;
141 conn->request_handler =
142 auth_request_handler_create(conn->token_auth, auth_callback, conn,
143 !conn->login_requests ? NULL :
145 auth_request_handler_set(conn->request_handler, conn->connect_uid, pid);
147 conn->pid = pid;
148 if (conn->auth->set->debug)
149 i_debug("auth client connected (pid=%u)", conn->pid);
153 static int auth_client_output(struct auth_client_connection *conn)
155 if (o_stream_flush(conn->output) < 0) {
156 auth_client_disconnected(&conn);
160 if (o_stream_get_buffer_used_size(conn->output) <=
161 OUTBUF_THROTTLE_SIZE/3 && conn->io == NULL) {
163 conn->io = io_add(conn->fd, IO_READ, auth_client_input, conn);
169 auth_line_hide_pass(struct auth_client_connection *conn, const char *line)
178 if (conn->auth->set->debug_passwords)
187 cont_line_hide_pass(struct auth_client_connection *conn, const char *line)
191 if (conn->auth->set->debug_passwords)
202 auth_client_cancel(struct auth_client_connection *conn, const char *line)
211 auth_request_handler_cancel_request(conn->request_handler, client_id);
216 auth_client_handle_line(struct auth_client_connection *conn, const char *line)
219 if (conn->auth->set->debug) {
221 auth_line_hide_pass(conn, line));
223 return auth_request_handler_auth_begin(conn->request_handler,
227 if (conn->auth->set->debug) {
229 cont_line_hide_pass(conn, line));
231 return auth_request_handler_auth_continue(conn->request_handler,
235 if (conn->auth->set->debug)
237 return auth_client_cancel(conn, line + 7);
245 static void auth_client_input(struct auth_client_connection *conn)
250 switch (i_stream_read(conn->input)) {
255 auth_client_disconnected(&conn);
260 conn->pid, (int)AUTH_CLIENT_MAX_LINE_LENGTH);
261 auth_client_connection_destroy(&conn);
265 while (conn->request_handler == NULL) {
267 line = i_stream_next_line(conn->input);
271 if (!conn->version_received) {
281 auth_client_connection_destroy(&conn);
289 auth_client_connection_destroy(&conn);
292 conn->version_minor = vminor;
293 conn->version_received = TRUE;
298 if (!auth_client_input_cpid(conn, line + 5)) {
299 auth_client_connection_destroy(&conn);
306 auth_client_connection_destroy(&conn);
311 conn->refcount++;
312 while ((line = i_stream_next_line(conn->input)) != NULL) {
314 ret = auth_client_handle_line(conn, line);
319 struct auth_client_connection *tmp_conn = conn;
324 auth_client_connection_unref(&conn);
331 struct auth_client_connection *conn;
335 conn = i_new(struct auth_client_connection, 1);
336 conn->auth = auth;
337 conn->refcount = 1;
338 conn->connect_uid = ++connect_uid_counter;
339 conn->login_requests = login_requests;
340 conn->token_auth = token_auth;
341 random_fill(conn->cookie, sizeof(conn->cookie));
343 conn->fd = fd;
344 conn->input = i_stream_create_fd(fd, AUTH_CLIENT_MAX_LINE_LENGTH);
345 conn->output = o_stream_create_fd(fd, (size_t)-1);
346 o_stream_set_no_error_handling(conn->output, TRUE);
347 o_stream_set_flush_callback(conn->output, auth_client_output, conn);
348 conn->io = io_add(fd, IO_READ, auth_client_input, conn);
350 DLLIST_PREPEND(&auth_client_connections, conn);
363 mechanisms, my_pid, conn->connect_uid);
364 binary_to_hex_append(str, conn->cookie, sizeof(conn->cookie));
367 if (o_stream_send(conn->output, str_data(str), str_len(str)) < 0)
368 auth_client_disconnected(&conn);
373 struct auth_client_connection *conn = *_conn;
376 if (conn->fd == -1)
379 DLLIST_REMOVE(&auth_client_connections, conn);
381 i_stream_close(conn->input);
382 o_stream_close(conn->output);
384 io_remove(&conn->io);
386 net_disconnect(conn->fd);
387 conn->fd = -1;
389 if (conn->request_handler != NULL) {
390 auth_request_handler_abort_requests(conn->request_handler);
391 auth_request_handler_destroy(&conn->request_handler);
395 auth_client_connection_unref(&conn);
400 struct auth_client_connection *conn = *_conn;
406 if (conn->input->stream_errno != 0)
407 err = conn->input->stream_errno;
408 else if (conn->output->stream_errno != 0)
409 err = conn->output->stream_errno;
413 request_count = conn->request_handler == NULL ? 0 :
414 auth_request_handler_get_request_count(conn->request_handler);
417 "pending requests: %s", conn->pid, request_count,
420 auth_client_connection_destroy(&conn);
425 struct auth_client_connection *conn = *_conn;
428 if (--conn->refcount > 0)
431 i_stream_unref(&conn->input);
432 o_stream_unref(&conn->output);
433 i_free(conn);
439 struct auth_client_connection *conn;
441 for (conn = auth_client_connections; conn != NULL; conn = conn->next) {
442 if (conn->pid == pid)
443 return conn;
450 struct auth_client_connection *conn;
453 conn = auth_client_connections;
454 auth_client_connection_destroy(&conn);