Make http connections work

This commit is contained in:
Love Hornquist Astrand
2010-01-06 12:53:52 +01:00
parent 1354b6650b
commit 0f5267b97f

View File

@@ -579,6 +579,7 @@ output_data(struct client *c, const void *data, size_t len)
c->outmsg = erealloc(c->outmsg, c->olen + len); c->outmsg = erealloc(c->outmsg, c->olen + len);
memcpy(&c->outmsg[c->olen], data, len); memcpy(&c->outmsg[c->olen], data, len);
c->olen += len; c->olen += len;
c->flags |= WAITING_WRITE;
} }
static void static void
@@ -606,7 +607,12 @@ socket_complete(heim_sipc_call ctx, int returnvalue, heim_idata *reply)
/* data */ /* data */
output_data(c, reply->data, reply->length); output_data(c, reply->data, reply->length);
c->flags |= WAITING_WRITE;
/* if HTTP, close connection */
if (c->flags & HTTP_REPLY) {
c->flags |= WAITING_CLOSE;
c->flags &= ~WAITING_READ;
}
} }
c->calls--; c->calls--;
@@ -889,13 +895,8 @@ socket_release(heim_sipc ctx)
return 0; return 0;
} }
#define HEIM_SIPC_TYPE_IPC 1
#define HEIM_SIPC_TYPE_UINT32 2
#define HEIM_SIPC_TYPE_HTTP 4
int int
heim_sipc_stream_listener(int fd, heim_sipc_stream_listener(int fd, int type,
int type,
heim_ipc_callback callback, heim_ipc_callback callback,
void *user, heim_sipc *ctx) void *user, heim_sipc *ctx)
{ {
@@ -912,6 +913,7 @@ heim_sipc_stream_listener(int fd,
case HEIM_SIPC_TYPE_UINT32: case HEIM_SIPC_TYPE_UINT32:
c = add_new_socket(fd, LISTEN_SOCKET|WAITING_READ, callback, user); c = add_new_socket(fd, LISTEN_SOCKET|WAITING_READ, callback, user);
break; break;
case HEIM_SIPC_TYPE_HTTP:
case HEIM_SIPC_TYPE_UINT32|HEIM_SIPC_TYPE_HTTP: case HEIM_SIPC_TYPE_UINT32|HEIM_SIPC_TYPE_HTTP:
c = add_new_socket(fd, LISTEN_SOCKET|WAITING_READ|ALLOW_HTTP, callback, user); c = add_new_socket(fd, LISTEN_SOCKET|WAITING_READ|ALLOW_HTTP, callback, user);
break; break;
@@ -964,7 +966,8 @@ heim_sipc_service_unix(const char *service,
chmod(un.sun_path, 0666); chmod(un.sun_path, 0666);
return heim_sipc_stream_listener(fd, HEIM_SIPC_TYPE_IPC, callback, user, ctx); return heim_sipc_stream_listener(fd, HEIM_SIPC_TYPE_IPC,
callback, user, ctx);
} }
/** /**