Exemplo n.º 1
0
void h2o_socketpool_init_by_hostport(h2o_socketpool_t *pool, h2o_iovec_t host, uint16_t port, size_t capacity)
{
    struct sockaddr_in sin = {};

    if (h2o_hostinfo_aton(host, &sin.sin_addr) == 0) {
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);
        h2o_socketpool_init_by_address(pool, (void *)&sin, sizeof(sin), capacity);
        return;
    }

    common_init(pool, H2O_SOCKETPOOL_TYPE_NAMED, capacity);
    pool->peer.named.host = h2o_strdup(NULL, host.base, host.len);
    pool->peer.named.port.base = h2o_mem_alloc(sizeof("65535"));
    pool->peer.named.port.len = sprintf(pool->peer.named.port.base, "%u", (unsigned)port);
}
Exemplo n.º 2
0
void h2o_socketpool_init_by_hostport(h2o_socketpool_t *pool, h2o_iovec_t host, uint16_t port, int is_ssl, size_t capacity)
{
    struct sockaddr_in sin;
    memset(&sin, 0, sizeof(sin));

    if (h2o_hostinfo_aton(host, &sin.sin_addr) == 0) {
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);
        h2o_socketpool_init_by_address(pool, (void *)&sin, sizeof(sin), is_ssl, capacity);
        return;
    }

    common_init(pool, H2O_SOCKETPOOL_TYPE_NAMED, host, is_ssl, capacity);
    pool->peer.named_serv.base = h2o_mem_alloc(sizeof(H2O_UINT16_LONGEST_STR));
    pool->peer.named_serv.len = sprintf(pool->peer.named_serv.base, "%u", (unsigned)port);
}
Exemplo n.º 3
0
void h2o_socketpool_init(h2o_socketpool_t *pool, h2o_iovec_t host, uint16_t port, size_t capacity)
{
    memset(pool, 0, sizeof(*pool));

    if (h2o_hostinfo_aton(host, &pool->peer.sin.sin_addr) == 0) {
        pool->peer.sin.sin_family = AF_INET;
        pool->peer.sin.sin_port = htons(port);
    } else {
        pool->peer.named.host = h2o_strdup(NULL, host.base, host.len);
        pool->peer.named.port.base = h2o_mem_alloc(sizeof("65535"));
        pool->peer.named.port.len = sprintf(pool->peer.named.port.base, "%u", (unsigned)port);
        pool->peer.is_named = 1;
    }
    pool->capacity = capacity;
    pool->timeout = UINT64_MAX;

    pthread_mutex_init(&pool->_shared.mutex, NULL);
    h2o_linklist_init_anchor(&pool->_shared.sockets);
}
Exemplo n.º 4
0
h2o_socketpool_target_type_t detect_target_type(h2o_url_t *url, struct sockaddr_storage *sa, socklen_t *salen)
{
    memset(sa, 0, sizeof(*sa));
    const char *to_sun_err = h2o_url_host_to_sun(url->host, (struct sockaddr_un *)sa);
    if (to_sun_err == h2o_url_host_to_sun_err_is_not_unix_socket) {
        sa->ss_family = AF_INET;
        struct sockaddr_in *sin = (struct sockaddr_in *)sa;
        *salen = sizeof(*sin);

        if (h2o_hostinfo_aton(url->host, &sin->sin_addr) == 0) {
            sin->sin_port = htons(h2o_url_get_port(url));
            return H2O_SOCKETPOOL_TYPE_SOCKADDR;
        } else {
            return H2O_SOCKETPOOL_TYPE_NAMED;
        }
    } else {
        assert(to_sun_err == NULL);
        struct sockaddr_un *sun = (struct sockaddr_un *)sa;
        *salen = sizeof(*sun);
        return H2O_SOCKETPOOL_TYPE_SOCKADDR;
    }
}
Exemplo n.º 5
0
static void test_aton(void)
{
    struct in_addr addr;

    memset(&addr, 0x55, sizeof(addr));
#ifndef _MSC_VER
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("127.0.0.1")}, &addr) == 0);
#else
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("127.0.0.1") }, &addr) == 0);
#endif
    ok(ntohl(addr.s_addr) == 0x7f000001);

    memset(&addr, 0x55, sizeof(addr));
#ifndef _MSC_VER
    ok(h2o_hostinfo_aton((h2o_iovec_t){"127.0.0.12", sizeof("127.0.0.1") - 1}, &addr) == 0);
#else
	ok(h2o_hostinfo_aton((h2o_iovec_t) { sizeof("127.0.0.1") - 1 , "127.0.0.12" }, &addr) == 0);
#endif
    ok(ntohl(addr.s_addr) == 0x7f000001);

    memset(&addr, 0x55, sizeof(addr));
#ifndef _MSC_VER
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("255.001.002.128")}, &addr) == 0);
#else
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("255.001.002.128") }, &addr) == 0);
#endif
    ok(ntohl(addr.s_addr) == 0xff010280);

#ifndef _MSC_VER
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("127.0.0.z")}, &addr) != 0);
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("256.0.0.0")}, &addr) != 0);
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("0001.0.0.0")}, &addr) != 0);
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("0.0..1")}, &addr) != 0);
    ok(h2o_hostinfo_aton((h2o_iovec_t){H2O_STRLIT("1.0.0.0.")}, &addr) != 0);
#else
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("127.0.0.z") }, &addr) != 0);
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("256.0.0.0") }, &addr) != 0);
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("0001.0.0.0") }, &addr) != 0);
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("0.0..1") }, &addr) != 0);
	ok(h2o_hostinfo_aton((h2o_iovec_t) { H2O_MY_STRLIT("1.0.0.0.") }, &addr) != 0);
#endif
}