mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-11-30 10:57:34 +08:00
9697f95b8f
This reverts commit 15d999759e
.
104 lines
2.5 KiB
C++
104 lines
2.5 KiB
C++
// http_aio.cpp : 定义控制台应用程序的入口点。
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "lib_acl.h"
|
|
#include "lib_protocol.h"
|
|
#include <assert.h>
|
|
|
|
typedef struct {
|
|
ACL_ASTREAM *stream;
|
|
HTTP_HDR_RES *hdr_res;
|
|
HTTP_RES *http_res;
|
|
} CTX;
|
|
|
|
int On_httphdr_notify_cb(int status, void *arg);
|
|
|
|
static int On_close_cb(ACL_ASTREAM *stream, void *context)
|
|
{
|
|
printf("%s(%d)\n", __FUNCTION__, __LINE__);
|
|
return (0);
|
|
}
|
|
|
|
static int On_timeout_cb(ACL_ASTREAM *stream, void *context)
|
|
{
|
|
printf("%s(%d)\n", __FUNCTION__, __LINE__);
|
|
return (0);
|
|
}
|
|
|
|
static int On_connect_cb(ACL_ASTREAM *stream, void *context)
|
|
{
|
|
const char *request = "GET / HTTP/1.1\r\n"
|
|
"HOST: www.sina.com.cn\r\n"
|
|
"\r\n";
|
|
CTX *ctx = (CTX*) context;
|
|
|
|
printf("%s(%d)\n", __FUNCTION__, __LINE__);
|
|
acl_aio_writen(stream, request, (int) strlen(request));
|
|
ctx->hdr_res = http_hdr_res_new();
|
|
http_hdr_res_get_async(ctx->hdr_res, stream, On_httphdr_notify_cb, ctx, 0);
|
|
return (0);
|
|
}
|
|
|
|
static int read_respond_body_ready(int status, char *data, int dlen, void *arg)
|
|
{
|
|
static ACL_VSTRING *_buf;
|
|
|
|
if (_buf == NULL)
|
|
_buf = acl_vstring_alloc(256);
|
|
acl_vstring_memcpy(_buf, data, dlen);
|
|
ACL_VSTRING_TERMINATE(_buf);
|
|
//printf(">>%s", acl_vstring_str(_buf));
|
|
return (0);
|
|
}
|
|
|
|
int On_httphdr_notify_cb(int status, void *arg)
|
|
{
|
|
CTX *ctx = (CTX*) arg;
|
|
ACL_ASTREAM *stream = ctx->stream;
|
|
|
|
http_hdr_print(&ctx->hdr_res->hdr, "---respond---");
|
|
ctx->http_res = http_res_new(ctx->hdr_res);
|
|
http_res_body_get_async(ctx->http_res,
|
|
ctx->stream,
|
|
read_respond_body_ready,
|
|
ctx,
|
|
0);
|
|
//acl_aio_iocp_close(stream);
|
|
return (0);
|
|
}
|
|
|
|
static int On_write_cb(ACL_ASTREAM *stream, void *context)
|
|
{
|
|
CTX *ctx = (CTX*) context;
|
|
//ctx->hdr_res = http_hdr_res_new();
|
|
printf("%s(%d)\n", __FUNCTION__, __LINE__);
|
|
// http_hdr_res_get_async(ctx->hdr_res, stream, On_httphdr_notify_cb, ctx, 0);
|
|
return (0);
|
|
}
|
|
|
|
int _tmain(int argc, _TCHAR* argv[])
|
|
{
|
|
ACL_AIO *aio = acl_aio_create(ACL_EVENT_SELECT);
|
|
ACL_ASTREAM *stream;
|
|
const char *addr = "218.30.108.184:80";
|
|
CTX *ctx = (CTX*) acl_mycalloc(1, sizeof(CTX));
|
|
|
|
acl_init();
|
|
stream = acl_aio_connect(aio, addr, 0);
|
|
assert(stream);
|
|
ctx->stream = stream;
|
|
acl_aio_ctl(stream,
|
|
ACL_AIO_CTL_CONNECT_HOOK_ADD, On_connect_cb, ctx,
|
|
ACL_AIO_CTL_CLOSE_HOOK_ADD, On_close_cb, ctx,
|
|
ACL_AIO_CTL_TIMEO_HOOK_ADD, On_timeout_cb, ctx,
|
|
ACL_AIO_CTL_WRITE_HOOK_ADD, On_write_cb, ctx,
|
|
ACL_AIO_CTL_END);
|
|
while (1) {
|
|
acl_aio_loop(aio);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|