コード例 #1
0
/*-------------------------------------------------------------------------*/
int KnownDADiscoverFromProperties()
/* Locates DAs from a list of DA hostnames                                 */
/*                                                                         */
/* Returns: number of *new* DAs found                                      */
/*-------------------------------------------------------------------------*/
{
    char*               temp;
    char*               tempend;
    char*               slider1;
    char*               slider2;
    int                 sockfd;
    struct hostent*     he;
    struct sockaddr_in  peeraddr;
    struct timeval      timeout;
    int                 result      = 0;

    memset(&peeraddr,0,sizeof(peeraddr));
    peeraddr.sin_family = AF_INET;
    peeraddr.sin_port = htons(SLP_RESERVED_PORT);

    slider1 = slider2 = temp = strdup(SLPGetProperty("net.slp.DAAddresses"));
    if(temp)
    {
        tempend = temp + strlen(temp);
        while(slider1 != tempend)
        {
            timeout.tv_sec = SLPPropertyAsInteger(SLPGetProperty("net.slp.DADiscoveryMaximumWait"));
            timeout.tv_usec = (timeout.tv_sec % 1000) * 1000;
            timeout.tv_sec = timeout.tv_sec / 1000;

            while(*slider2 && *slider2 != ',') slider2++;
            *slider2 = 0;

            he = gethostbyname(slider1);
            if(he)
            {
                peeraddr.sin_addr.s_addr = *((unsigned int*)(he->h_addr_list[0]));
                sockfd = SLPNetworkConnectStream(&peeraddr,&timeout);
                if(sockfd >= 0)
                {
                    result = KnownDADiscoveryRqstRply(sockfd,&peeraddr,0,"");
                    close(sockfd);
                    if(result)
                    {
                        break;
                    }
                }
            }

            slider1 = slider2;
            slider2++;
        }

        free(temp);
    }

    return result;
}
コード例 #2
0
ファイル: libslp_knownda.c プロジェクト: ncultra/openslp
/*-------------------------------------------------------------------------*/
int KnownDADiscoveryByProperties(struct timeval* timeout)
/* Locates DAs from a list of DA hostnames                                 */
/*                                                                         */
/* Returns: number of DAs discovered                                       */
/*-------------------------------------------------------------------------*/
{
    int                 result      = 0;
    char*               slider1;
    char*               slider2;
    char*               temp;
    char*               tempend;
    int                 sock;
    struct hostent*     he;
    struct sockaddr_in  peeraddr;
    
    memset(&peeraddr,0,sizeof(peeraddr));
    peeraddr.sin_family = AF_INET;
    peeraddr.sin_port = htons(SLP_RESERVED_PORT);
    
    slider1 = slider2 = temp = strdup(SLPGetProperty("net.slp.DAAddresses"));

    if (temp)
    {
        tempend = temp + strlen(temp);
        while (slider1 != tempend)
        {
            while (*slider2 && *slider2 != ',') slider2++;
            *slider2 = 0;

            he = gethostbyname(slider1);
            if (he)
            {
                peeraddr.sin_addr.s_addr = *((unsigned long*)(he->h_addr_list[0]));
                result += 1;

                sock = SLPNetworkConnectStream(&peeraddr,timeout);
                if (sock >= 0)
                {
                    result += KnownDADiscoveryRqstRply(sock, &peeraddr);
                    close(sock);
                }
            }

            slider1 = slider2;
            slider2++;
        }

        free(temp);
    }

    return result;
}
コード例 #3
0
/*-------------------------------------------------------------------------*/
int KnownDADiscoveryByMulticast()
/* Locates  DAs via multicast convergence                                  */
/*                                                                         */
/* Returns  The number of DAs found                                        */
/*-------------------------------------------------------------------------*/
{
    int                 result      = 0;
    int                 sock;
    struct sockaddr_in  peeraddr;
    
    sock = NetworkConnectToMulticast(&peeraddr);
    if(sock >= 0)
    {
        result = KnownDADiscoveryRqstRply(sock, &peeraddr);
        close(sock);
    }
    
    return result;;
}
コード例 #4
0
/*-------------------------------------------------------------------------*/
int KnownDADiscoverFromIPC()
/* Ask Slpd if it knows about a DA                                         */ 
/*                                                                         */
/* Returns: number of *new* DAs found                                      */
/*-------------------------------------------------------------------------*/
{
    struct sockaddr_in peeraddr;
    int sockfd; 
    int result = 0;

    sockfd = NetworkConnectToSlpd(&peeraddr);
    if(sockfd >= 0)
    {
        result = KnownDADiscoveryRqstRply(sockfd, &peeraddr, 0, "");
        close(sockfd);
    }

    return result;
}
コード例 #5
0
/*-------------------------------------------------------------------------*/
int KnownDADiscoverFromMulticast(int scopelistlen, const char* scopelist)
/* Locates  DAs via multicast convergence                                  */
/*                                                                         */
/* Returns: number of *new* DAs found                                      */
/*-------------------------------------------------------------------------*/
{
    struct sockaddr_in peeraddr;
    int sockfd; 
    int result = 0;

    sockfd = NetworkConnectToMulticast(&peeraddr);
    if(sockfd >= 0)
    {
        result = KnownDADiscoveryRqstRply(sockfd,
                                          &peeraddr,
                                          scopelistlen,
                                          scopelist);
        close(sockfd);
    }

    return result;
}