Exemplo n.º 1
0
Arquivo: irs_data.c Projeto: aosm/bind
int *
__h_errno(void) {
	/* NULL param here means use the default config file. */
	struct net_data *net_data = net_data_init(NULL);
	if (net_data && net_data->res)
		return (&net_data->res->res_h_errno);
	return (&h_errno);
}
Exemplo n.º 2
0
struct __res_state *
__res_state(void) {
	/* NULL param here means use the default config file. */
	struct net_data *net_data = net_data_init(NULL);
	if (net_data && net_data->res)
		return (net_data->res);

	return (&_res);
}
Exemplo n.º 3
0
int *
__h_errno(void) {
	/* NULL param here means use the default config file. */
	struct net_data *net_data = net_data_init(NULL);
	if (net_data && net_data->res)
		return (&net_data->res->res_h_errno);
#if !(__GLIBC__ > 2 || __GLIBC__ == 2 &&  __GLIBC_MINOR__ >= 3)
	return(&_res.res_h_errno);
#else
	return (&h_errno);
#endif
}
Exemplo n.º 4
0
static struct net_data *
init(void) {
	struct net_data *net_data;

	if (!(net_data = net_data_init(NULL)))
		goto error;
	if (!net_data->ng) {
		net_data->ng = (*net_data->irs->ng_map)(net_data->irs);
		if (!net_data->ng) {
  error:
			errno = EIO;
			return (NULL);
		}
	}
	
	return (net_data);
}
Exemplo n.º 5
0
static struct net_data *
init() {
	struct net_data *net_data;
	if (!(net_data = net_data_init(NULL)))
		goto error;
	if (!net_data->pw) {
		net_data->pw = (*net_data->irs->pw_map)(net_data->irs);

		if (!net_data->pw || !net_data->res) {
 error: 
			errno = EIO;
			return (NULL);
		}
		(*net_data->pw->res_set)(net_data->pw, net_data->res, NULL);
	}
	
	return (net_data);
}
Exemplo n.º 6
0
static struct net_data *
init() {
	struct net_data *net_data;

	if (!(net_data = net_data_init(NULL)))
		goto error;
	if (!net_data->ho) {
		net_data->ho = (*net_data->irs->ho_map)(net_data->irs);
		if (!net_data->ho || !net_data->res) {
  error:
			errno = EIO;
			if (net_data && net_data->res)
				RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
			return (NULL);
		}
	
		(*net_data->ho->res_set)(net_data->ho, net_data->res, NULL);
	}
	
	return (net_data);
}
Exemplo n.º 7
0
static int net_http_rsp_handler(struct net_handle_cxt* cxt,
                                struct conn* server) {
    struct conn* client = cxt->client;
    
    client->tx = 0;
    
    struct net_data* data = mem_alloc(sizeof(struct net_data));
    net_data_init(data);
    int ret = net_fetch_http(server, data);
    if (ret) {
        // Failed to fetch response from server
        conn_close(server);
        net_bad_gateway(client);
        net_data_done(data);
        mem_free(data);
        return ret;
    }
    
    struct net_rsp rsp;
    memset(&rsp, 0, sizeof(rsp));
    rsp.data = data;
    ret = net_parse_rsp(&rsp);
    if (ret) {
        conn_close(server);
        net_bad_gateway(client);
        net_rsp_done(&rsp);
        return ret;
    }
    
    // TODO check headers and http version
    
    ret = net_forward_rsp_header(&rsp, client);
    if (ret) {
        net_rsp_done(&rsp);
        return ret;
    }
    
    if (rsp.ver_major*100 + rsp.ver_minor > 100) {
        // Higher than http 1.0
        ret = net_transfer_body_HTTP_1_1(client, server, rsp.data);
    } else {
        PLOGD("Forwarding http 1.0 response");
        while (1) {
            ret = conn_copy(client, server, 64*1024);
            if (ret < 0) {
                ret = 0;
                break;
            }
        }
        conn_close(client);
        conn_close(server);
    }
    
    struct net_req* req = cxt->head->req;
    
    if (ret == 0)
        ret = rsp.code;
    
    // WTF... 
    log_http_req(&client->ep, req->data->buf.p + req->host, 
                 req->data->buf.p + req->path, client->tx);

    PLOGI("%s %s %s:%d%s %d", ep_tostring(&client->ep),
                            req->data->buf.p,
                            req->data->buf.p + req->host,
                            req->port,
                            req->data->buf.p + req->path,
                            client->tx);
    net_rsp_done(&rsp);
    return ret;
}