Пример #1
0
int hostport2addr(SOCKADDR_UNION *addr, char *hostname, char *portname) {
    SOCKADDR_LIST addr_list;
    int retval;

    addr_list.num=0;
    addr_list.addr=NULL;
    retval=hostport2addrlist(&addr_list, hostname, portname);
    if(retval>0)
        memcpy(addr, &addr_list.addr[0], sizeof *addr);
    if(addr_list.addr)
        str_free(addr_list.addr);
    return retval;
}
Пример #2
0
unsigned hostport2addr(SOCKADDR_UNION *addr,
        char *host_name, char *port_name, int passive) {
    SOCKADDR_LIST *addr_list;
    unsigned retval;

    addr_list=str_alloc(sizeof(SOCKADDR_LIST));
    addrlist_clear(addr_list, passive);
    retval=hostport2addrlist(addr_list, host_name, port_name);
    if(retval)
        addrlist2addr(addr, addr_list);
    str_free(addr_list->addr);
    str_free(addr_list);
    return retval;
}
Пример #3
0
int name2addrlist(SOCKADDR_LIST *addr_list, char *name, char *default_host) {
    char tmp[STRLEN], *hostname, *portname;

    /* set hostname and portname */
    safecopy(tmp, name);
    portname=strrchr(tmp, ':');
    if(portname) {
        hostname=tmp;
        *portname++='\0';
    } else { /* no ':' - use default host IP */
        hostname=default_host;
        portname=tmp;
    }

    /* fill addr_list structure */
    return hostport2addrlist(addr_list, hostname, portname);
}
Пример #4
0
int name2addrlist(SOCKADDR_LIST *addr_list, char *name, char *default_host) {
    char *tmp, *hostname, *portname;
    int retval;

    /* set hostname and portname */
    tmp=str_dup(name);
    portname=strrchr(tmp, ':');
    if(portname) {
        hostname=tmp;
        *portname++='\0';
    } else { /* no ':' - use default host IP */
        hostname=default_host;
        portname=tmp;
    }

    /* fill addr_list structure */
    retval=hostport2addrlist(addr_list, hostname, portname);
    str_free(tmp);
    return retval;
}
Пример #5
0
int name2addrlist(SOCKADDR_LIST *addr_list, char *name, char *default_host) {
    char *tmp, *hostname, *portname;
    int retval;

    addr_list->cur=0; /* reset round-robin counter */

    /* first check if this is a UNIX socket */
#ifdef HAVE_STRUCT_SOCKADDR_UN
    if(*name=='/') {
        if(offsetof(struct sockaddr_un, sun_path)+strlen(name)+1
                > sizeof(struct sockaddr_un)) {
            s_log(LOG_ERR, "Unix socket path is too long");
            return 0; /* no results */
        }
        addr_list->addr=str_realloc(addr_list->addr,
            (addr_list->num+1)*sizeof(SOCKADDR_UNION));
        addr_list->addr[addr_list->num].un.sun_family=AF_UNIX;
        strcpy(addr_list->addr[addr_list->num].un.sun_path, name);
        return ++(addr_list->num); /* ok - return the number of addresses */
    }
#endif

    /* set hostname and portname */
    tmp=str_dup(name);
    portname=strrchr(tmp, ':');
    if(portname) {
        hostname=tmp;
        *portname++='\0';
    } else { /* no ':' - use default host IP */
        hostname=default_host;
        portname=tmp;
    }

    /* fill addr_list structure */
    retval=hostport2addrlist(addr_list, hostname, portname);
    str_free(tmp);
    return retval;
}