commSetSelect(fd, COMM_SELECT_READ, commHandleRead, data, 0);
}
-/**
- * Queue a read. handler/handler_data are called when the read
- * completes, on error, or on file descriptor close.
- */
+#if 0 // obsolete wrapper.
void
comm_read(const Comm::ConnectionPointer &conn, char *buf, int size, IOCB *handler, void *handler_data)
{
CommIoCbPtrFun(handler, handler_data));
comm_read(conn, buf, size, call);
}
+#endif
+/**
+ * Queue a read. handler/handler_data are called when the read
+ * completes, on error, or on file descriptor close.
+ */
void
comm_read(const Comm::ConnectionPointer &conn, char *buf, int size, AsyncCall::Pointer &callback)
{
extern int comm_has_pending_read_callback(int fd);
extern bool comm_monitors_read(int fd);
-extern void comm_read(const Comm::ConnectionPointer &conn, char *buf, int len, IOCB *handler, void *data);
+//extern void comm_read(const Comm::ConnectionPointer &conn, char *buf, int len, IOCB *handler, void *data);
extern void comm_read(const Comm::ConnectionPointer &conn, char *buf, int len, AsyncCall::Pointer &callback);
extern void comm_read_cancel(int fd, IOCB *callback, void *data);
extern void comm_read_cancel(int fd, AsyncCall::Pointer &callback);
vc->conn = conn;
comm_add_close_handler(conn->fd, idnsVCClosed, vc);
- comm_read(conn, (char *)&vc->msglen, 2 , idnsReadVCHeader, vc);
+ AsyncCall::Pointer call = commCbCall(5,4, "idnsReadVCHeader",
+ CommIoCbPtrFun(idnsReadVCHeader, vc));
+ comm_read(conn, (char *)&vc->msglen, 2, call);
vc->busy = 0;
idnsDoSendQueryVC(vc);
}
vc->msg->size += len; // XXX should not access -> size directly
if (vc->msg->contentSize() < vc->msglen) {
- comm_read(conn, buf + len, vc->msglen - vc->msg->contentSize(), idnsReadVC, vc);
+ AsyncCall::Pointer call = commCbCall(5,4, "idnsReadVC",
+ CommIoCbPtrFun(idnsReadVC, vc));
+ comm_read(conn, buf+len, vc->msglen - vc->msg->contentSize(), call);
return;
}
idnsGrokReply(vc->msg->buf, vc->msg->contentSize(), vc->ns);
vc->msg->clean();
- comm_read(conn, (char *)&vc->msglen, 2 , idnsReadVCHeader, vc);
+ AsyncCall::Pointer call = commCbCall(5,4, "idnsReadVCHeader",
+ CommIoCbPtrFun(idnsReadVCHeader, vc));
+ comm_read(conn, (char *)&vc->msglen, 2, call);
}
static void
assert(vc->read_msglen <= 2);
if (vc->read_msglen < 2) {
- comm_read(conn, buf + len, 2 - vc->read_msglen, idnsReadVCHeader, vc);
+ AsyncCall::Pointer call = commCbCall(5,4, "idnsReadVCHeader",
+ CommIoCbPtrFun(idnsReadVCHeader, vc));
+ comm_read(conn, buf+len, 2 - vc->read_msglen, call);
return;
}
vc->msglen = ntohs(vc->msglen);
vc->msg->init(vc->msglen, vc->msglen);
- comm_read(conn, vc->msg->buf, vc->msglen, idnsReadVC, vc);
+ AsyncCall::Pointer call = commCbCall(5,4, "idnsReadVC",
+ CommIoCbPtrFun(idnsReadVC, vc));
+ comm_read(conn, vc->msg->buf, vc->msglen, call);
}
/*
do_next_read = 1;
}
- if (do_next_read)
- comm_read(conn, buf, read_sz, gopherReadReply, gopherState);
-
+ if (do_next_read) {
+ AsyncCall::Pointer call = commCbCall(5,4, "gopherReadReply",
+ CommIoCbPtrFun(gopherReadReply, gopherState));
+ comm_read(conn, buf, read_sz, call);
+ }
return;
}
comm_add_close_handler(rfd, helperServerFree, srv);
- comm_read(srv->readPipe, srv->rbuf, srv->rbuf_sz - 1, helperHandleRead, srv);
+ AsyncCall::Pointer call = commCbCall(5,4, "helperHandleRead",
+ CommIoCbPtrFun(helperHandleRead, srv));
+ comm_read(srv->readPipe, srv->rbuf, srv->rbuf_sz - 1, call);
}
hlp->last_restart = squid_curtime;
comm_add_close_handler(rfd, helperStatefulServerFree, srv);
- comm_read(srv->readPipe, srv->rbuf, srv->rbuf_sz - 1, helperStatefulHandleRead, srv);
+ AsyncCall::Pointer call = commCbCall(5,4, "helperStatefulHandleRead",
+ CommIoCbPtrFun(helperStatefulHandleRead, srv));
+ comm_read(srv->readPipe, srv->rbuf, srv->rbuf_sz - 1, call);
}
hlp->last_restart = squid_curtime;
}
}
- if (Comm::IsConnOpen(srv->readPipe))
- comm_read(srv->readPipe, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1, helperHandleRead, srv);
+ if (Comm::IsConnOpen(srv->readPipe)) {
+ AsyncCall::Pointer call = commCbCall(5,4, "helperHandleRead",
+ CommIoCbPtrFun(helperHandleRead, srv));
+ comm_read(srv->readPipe, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1, call);
+ }
}
static void
helperStatefulReleaseServer(srv);
}
- if (Comm::IsConnOpen(srv->readPipe))
- comm_read(srv->readPipe, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1,
- helperStatefulHandleRead, srv);
+ if (Comm::IsConnOpen(srv->readPipe)) {
+ AsyncCall::Pointer call = commCbCall(5,4, "helperStatefulHandleRead",
+ CommIoCbPtrFun(helperStatefulHandleRead, srv));
+ comm_read(srv->readPipe, srv->rbuf + srv->roffset, srv->rbuf_sz - srv->roffset - 1, call);
+ }
}
static void
#define IDENT_PORT 113
#define IDENT_KEY_SZ 50
+#define IDENT_BUFSIZE 4096
typedef struct _IdentClient {
IDCB *callback;
hash_link hash; /* must be first */
Comm::ConnectionPointer conn;
IdentClient *clients;
- char buf[4096];
+ char buf[IDENT_BUFSIZE];
} IdentStateData;
// TODO: make these all a series of Async job calls. They are self-contained callbacks now.
conn->local.GetPort());
AsyncCall::Pointer nil;
Comm::Write(conn, &mb, nil);
- comm_read(conn, state->buf, BUFSIZ, Ident::ReadReply, state);
+ AsyncCall::Pointer call = commCbCall(5,4, "Ident::ReadReply",
+ CommIoCbPtrFun(Ident::ReadReply, state));
+ comm_read(conn, state->buf, IDENT_BUFSIZE, call);
commSetTimeout(conn->fd, Ident::TheConfig.timeout, Ident::Timeout, state);
}
}
theList_[size_++] = conn;
- comm_read(conn, fakeReadBuf_, sizeof(fakeReadBuf_), IdleConnList::Read, this);
+ AsyncCall::Pointer call = commCbCall(5,4, "IdleConnList::Read",
+ CommIoCbPtrFun(IdleConnList::Read, this));
+ comm_read(conn, fakeReadBuf_, sizeof(fakeReadBuf_), call);
commSetTimeout(conn->fd, Config.Timeout.pconn, IdleConnList::Timeout, this);
}
TunnelStateData::copyRead(Connection &from, IOCB *completion)
{
assert(from.len == 0);
- comm_read(from.conn, from.buf, from.bytesWanted(1, SQUID_TCP_SO_RCVBUF), completion, this);
+ AsyncCall::Pointer call = commCbCall(5,4, "SomeTunnelReadHandler",
+ CommIoCbPtrFun(completion, this));
+ comm_read(from.conn, from.buf, from.bytesWanted(1, SQUID_TCP_SO_RCVBUF), call);
}
/**
String str_print=p->request->urlpath.substr(1,p->request->urlpath.size());
snprintf(buf, l, SQUIDSTRINGPH"\r\n", SQUIDSTRINGPRINT(str_print));
- AsyncCall::Pointer call = commCbCall(5,5, "whoisWriteComplete",
- CommIoCbPtrFun(whoisWriteComplete, p));
-
- Comm::Write(fwd->serverConnection(), buf, strlen(buf), call, NULL);
- comm_read(fwd->serverConnection(), p->buf, BUFSIZ, whoisReadReply, p);
+ AsyncCall::Pointer writeCall = commCbCall(5,5, "whoisWriteComplete",
+ CommIoCbPtrFun(whoisWriteComplete, p));
+ Comm::Write(fwd->serverConnection(), buf, strlen(buf), writeCall, NULL);
+ AsyncCall::Pointer readCall = commCbCall(5,4, "whoisReadReply",
+ CommIoCbPtrFun(whoisReadReply, p));
+ comm_read(fwd->serverConnection(), p->buf, BUFSIZ, readCall);
commSetTimeout(fwd->serverConnection()->fd, Config.Timeout.read, whoisTimeout, p);
}
do_next_read = 0;
}
- if (do_next_read)
- comm_read(conn, aBuffer, BUFSIZ, whoisReadReply, this);
+ if (do_next_read) {
+ AsyncCall::Pointer call = commCbCall(5,4, "whoisReadReply",
+ CommIoCbPtrFun(whoisReadReply, this));
+ comm_read(conn, aBuffer, BUFSIZ, call);
+ }
}
static void