Lines Matching refs:ctx

68 					    tmp, sizeof tmp, ctx->logger)
86 struct ctl_sctx * ctx;
179 struct ctl_sctx *ctx;
193 ctx = memget(sizeof *ctx);
194 if (ctx == NULL) {
198 ctx->ev = lev;
199 ctx->uctx = uctx;
200 ctx->unkncode = unkncode;
201 ctx->timeoutcode = timeoutcode;
202 ctx->verbs = verbs;
203 ctx->timeout = evConsTime(timeout, 0);
204 ctx->logger = logger;
205 ctx->connverb = connverb;
206 ctx->max_sess = max_sess;
207 ctx->cur_sess = 0;
208 INIT_LIST(ctx->sess);
209 ctx->sock = socket(sap->sa_family, SOCK_STREAM, PF_UNSPEC);
210 if (ctx->sock > evHighestFD(ctx->ev)) {
211 ctx->sock = -1;
214 if (ctx->sock < 0) {
216 (*ctx->logger)(ctl_error, "%s: socket: %s",
218 memput(ctx, sizeof *ctx);
222 if (ctx->sock > evHighestFD(lev)) {
223 close(ctx->sock);
224 (*ctx->logger)(ctl_error, "%s: file descriptor > evHighestFD");
226 memput(ctx, sizeof *ctx);
232 if (setsockopt(ctx->sock, SOL_SOCKET, SO_REUSEADDR,
234 (*ctx->logger)(ctl_warning,
238 if (bind(ctx->sock, sap, sap_len) < 0) {
241 (*ctx->logger)(ctl_error, "%s: bind: %s: %s",
243 tmp, sizeof tmp, ctx->logger),
245 close(ctx->sock);
246 memput(ctx, sizeof *ctx);
250 if (fcntl(ctx->sock, F_SETFD, 1) < 0) {
251 (*ctx->logger)(ctl_warning, "%s: fcntl: %s", me,
254 if (evListen(lev, ctx->sock, backlog, ctl_accept, ctx,
255 &ctx->acID) < 0) {
257 (*ctx->logger)(ctl_error, "%s: evListen(fd %d): %s",
258 me, ctx->sock, strerror(errno));
259 close(ctx->sock);
260 memput(ctx, sizeof *ctx);
264 (*ctx->logger)(ctl_debug, "%s: new ctx %p, sock %d",
265 me, ctx, ctx->sock);
266 return (ctx);
271 * ctl_endserver(ctx)
276 ctl_endserver(struct ctl_sctx *ctx) {
280 (*ctx->logger)(ctl_debug, "%s: ctx %p, sock %d, acID %p, sess %p",
281 me, ctx, ctx->sock, ctx->acID.opaque, ctx->sess);
282 if (ctx->acID.opaque != NULL) {
283 (void)evCancelConn(ctx->ev, ctx->acID);
284 ctx->acID.opaque = NULL;
286 if (ctx->sock != -1) {
287 (void) close(ctx->sock);
288 ctx->sock = -1;
290 for (this = HEAD(ctx->sess); this != NULL; this = next) {
294 memput(ctx, sizeof *ctx);
308 struct ctl_sctx *ctx = sess->ctx;
322 ctl_bufget(&sess->outbuf, ctx->logger) < 0) {
323 (*ctx->logger)(ctl_error, "%s: %s: cant get an output buffer",
328 (*ctx->logger)(ctl_error, "%s: %s: output buffer ovf, closing",
348 (*ctx->logger)(ctl_debug, "%s: [%d] %s", me,
350 if (evWrite(ctx->ev, sess->sock, iov, iovp - iov,
352 (*ctx->logger)(ctl_error, "%s: %s: evWrite: %s", me,
356 if (evSetIdleTimer(ctx->ev, ctl_wrtimeout, sess, ctx->timeout,
359 (*ctx->logger)(ctl_error, "%s: %s: evSetIdleTimer: %s", me,
363 if (evTimeRW(ctx->ev, sess->wrID, sess->wrtiID) < 0) {
364 (*ctx->logger)(ctl_error, "%s: %s: evTimeRW: %s", me,
367 ctl_signal_done(ctx, sess);
378 struct ctl_sctx *ctx = sess->ctx;
382 ctl_morehelp(ctx, sess, NULL, me, CTL_MORE,
383 (const void *)ctx->verbs, NULL);
407 struct ctl_sctx *ctx = uap;
416 (*ctx->logger)(ctl_error, "%s: accept: %s",
420 if (ctx->cur_sess == ctx->max_sess) {
421 (*ctx->logger)(ctl_error, "%s: %s: too many control sessions",
424 ctx->logger));
430 (*ctx->logger)(ctl_error, "%s: memget: %s", me,
436 (*ctx->logger)(ctl_warning, "%s: fcntl: %s", me,
439 ctx->cur_sess++;
441 APPEND(ctx->sess, sess, link);
442 sess->ctx = ctx;
461 sess->verb = ctx->connverb;
462 (*ctx->logger)(ctl_debug, "%s: %s: accepting (fd %d)",
464 (*ctx->connverb->func)(ctx, sess, ctx->connverb, "", 0,
465 (const struct sockaddr *)rav, ctx->uctx);
472 struct ctl_sctx *ctx = sess->ctx;
475 (*ctx->logger)(ctl_debug, "%s: %s: %s -> %s (%s)",
485 struct ctl_sctx *ctx = sess->ctx;
499 (void) evCancelRW(ctx->ev, sess->wrID);
503 (void) evClearIdleTimer(ctx->ev, sess->wrtiID);
513 (*ctx->logger)(ctl_debug, "%s: %s: closed (fd %d)",
515 UNLINK(ctx->sess, sess, link);
517 ctx->cur_sess--;
523 struct ctl_sctx *ctx = sess->ctx;
533 if (evSetIdleTimer(ctx->ev, ctl_rdtimeout, sess, ctx->timeout,
536 (*ctx->logger)(ctl_error, "%s: %s: evSetIdleTimer: %s", me,
541 if (evSelectFD(ctx->ev, sess->sock, EV_READ,
543 (*ctx->logger)(ctl_error, "%s: %s: evSelectFD: %s", me,
553 struct ctl_sctx *ctx = sess->ctx;
557 (void) evDeselectFD(ctx->ev, sess->rdID);
560 (void) evClearIdleTimer(ctx->ev, sess->rdtiID);
570 struct ctl_sctx *ctx;
579 ctx = sess->ctx;
582 ctl_bufget(&sess->inbuf, ctx->logger) < 0) {
583 (*ctx->logger)(ctl_error, "%s: %s: cant get an input buffer",
591 (*ctx->logger)(ctl_debug, "%s: %s: read: %s",
603 (*sess->verb->func)(sess->ctx, sess, sess->verb,
606 sess->ctx->uctx);
619 (*ctx->logger)(ctl_error, "%s: %s: line too long, closing",
632 struct ctl_sctx *ctx = sess->ctx;
641 (*ctx->logger)(ctl_warning, "%s: %s: write timeout, closing",
644 (void) evCancelRW(ctx->ev, sess->wrID);
647 ctl_signal_done(ctx, sess);
659 struct ctl_sctx *ctx = sess->ctx;
668 (*ctx->logger)(ctl_warning, "%s: %s: timeout, closing",
672 ctl_signal_done(ctx, sess);
674 ctl_response(sess, ctx->timeoutcode, "Timeout.", CTL_EXIT, NULL,
682 struct ctl_sctx *ctx = sess->ctx;
686 (*ctx->logger)(ctl_debug, "%s: %s: \"%s\" [%u]",
696 for (verb = ctx->verbs;
703 (*verb->func)(ctx, sess, verb, rest, 0, NULL, ctx->uctx);
714 ctl_response(sess, ctx->unkncode, buf, 0, NULL, NULL, NULL,
723 struct ctl_sctx *ctx = sess->ctx;
734 (void) evClearIdleTimer(ctx->ev, sess->wrtiID);
737 (*ctx->logger)(ctl_error, "%s: %s: %s",
746 ctl_signal_done(ctx, sess);
751 (*sess->verb->func)(sess->ctx, sess, sess->verb, "",
752 CTL_MORE, sess->respctx, sess->ctx->uctx);
754 ctl_signal_done(ctx, sess);
760 ctl_morehelp(struct ctl_sctx *ctx, struct ctl_sess *sess,
766 UNUSED(ctx);
780 ctl_signal_done(struct ctl_sctx *ctx, struct ctl_sess *sess) {
782 (*sess->donefunc)(ctx, sess, sess->uap);