API change - probably breaks unix

This commit is contained in:
Bert Belder 2011-03-31 14:22:20 +02:00
parent 42d96dc3ca
commit 5628ee9e51
2 changed files with 20 additions and 22 deletions

11
ol.h
View File

@ -10,13 +10,12 @@ typedef int ol_err; /* FIXME */
typedef struct ol_req_s ol_req;
typedef struct ol_handle_s ol_handle;
typedef void (*ol_req_cb)(ol_req* req, ol_err e);
typedef void (*ol_read_cb)(ol_req* req, size_t nread, ol_err e);
typedef void (*ol_write_cb)(ol_req* req, ol_err e);
typedef void (*ol_read_cb)(ol_req* req, size_t nread);
typedef void (*ol_write_cb)(ol_req* req);
typedef void (*ol_accept_cb)(ol_handle* server, ol_handle* new_client);
typedef void (*ol_close_cb)(ol_handle* handle, ol_err e);
typedef ol_req_cb ol_connect_cb;
typedef ol_req_cb ol_shutdown_cb;
typedef void (*ol_connect_cb)(ol_req* req, ol_err e);
typedef void (*ol_shutdown_cb)(ol_req* req);
#if defined(__unix__) || defined(__POSIX__)
@ -81,6 +80,8 @@ const char* ol_err_str(ol_err err);
void ol_init();
int ol_run();
void ol_req_init(ol_req *req, void *cb);
ol_handle* ol_tcp_handle_new(ol_close_cb close_cb, void* data);
/* TODO:
* ol_named_pipe_handle_new

View File

@ -15,31 +15,27 @@ typedef struct {
} peer_t;
void after_write(ol_req* req, ol_err err);
void after_read(ol_req* req, size_t nread, ol_err err);
void after_write(ol_req* req);
void after_read(ol_req* req, size_t nread);
void try_read(peer_t* peer);
void on_close(ol_handle* peer, ol_err err);
void on_accept(ol_handle* server, ol_handle* new_client);
void after_write(ol_req* req, ol_err err) {
if (!err) {
peer_t *peer = (peer_t*) req->data;
try_read(peer);
}
void after_write(ol_req* req) {
peer_t *peer = (peer_t*) req->data;
try_read(peer);
}
void after_read(ol_req* req, size_t nread, ol_err err) {
if (!err) {
if (nread == 0) {
ol_close(req->handle);
} else {
peer_t *peer = (peer_t*) req->data;
peer->buf.len = nread;
peer->req.cb = after_write;
ol_write(peer->handle, &peer->req, &peer->buf, 1);
}
void after_read(ol_req* req, size_t nread) {
if (nread == 0) {
ol_close(req->handle);
} else {
peer_t *peer = (peer_t*) req->data;
peer->buf.len = nread;
peer->req.cb = after_write;
ol_write(peer->handle, &peer->req, &peer->buf, 1);
}
}
@ -71,6 +67,7 @@ void on_accept(ol_handle* server, ol_handle* new_client) {
p->buf.base = p->read_buffer;
p->buf.len = BUFSIZE;
p->req.data = p;
ol_req_init(&p->req, NULL);
try_read(p);