示例#1
0
/*=========================================================================*/
int KnownDABadDA(struct sockaddr_in* peeraddr)
/* Mark a KnownDA as a Bad DA.                                             */
/*                                                                         */
/* peeraddr (IN) address of the bad DA                                     */
/*                                                                         */
/* Returns: zero on success.                                               */
/*=========================================================================*/
{
    SLPDAEntry* entry;

    entry = (SLPDAEntry*)G_KnownDACache.head;
    while(entry)
    {
        if(memcmp(&(peeraddr->sin_addr),
                  &(entry->daaddr),
                  sizeof(struct in_addr)) == 0)
        {
            /* Remove entry from list and free it */
            SLPDAEntryFree( (SLPDAEntry*)SLPListUnlink(&G_KnownDACache,
                                                       (SLPListItem*)entry) );
            break;
        }
        entry = (SLPDAEntry*) entry->listitem.next;
    }

    return 0;
}
示例#2
0
/*=========================================================================*/
int KnownDAConnect(const char* scopelist, 
                   int scopelistlen,
                   struct sockaddr_in* peeraddr,
                   struct timeval* timeout)
/*=========================================================================*/
{
    int                 sock;
    SLPDAEntry*         entry;
    SLPDAEntry*         del   = 0;
    
    /* TODO THIS FUNCTION MUST BE SYNCRONIZED !! */

    memset(peeraddr,0,sizeof(struct sockaddr_in));
    peeraddr->sin_family = AF_INET;
    peeraddr->sin_port   = htons(SLP_RESERVED_PORT);

    entry = (SLPDAEntry*)G_KnownDAList.head;
    while(entry)
    {
        if(SLPIntersectStringList(entry->scopelistlen,
                                  entry->scopelist,
                                  scopelistlen,
                                  scopelist))
        {
            peeraddr->sin_addr   = entry->daaddr;
            sock = SLPNetworkConnectStream(peeraddr,timeout);
            if(sock >= 0)
            {
                return sock;
            }

            del = entry;
        }
        
        entry = (SLPDAEntry*) entry->listitem.next;

        if (del)
        {
          SLPDAEntryFree((SLPDAEntry*)SLPListUnlink(&G_KnownDAList,(SLPListItem*)del));
          KnownDASaveHints();
        }

    }

    return -1;
}
示例#3
0
/*=========================================================================*/
SLPDAEntry* SLPDKnownDARemove(SLPDAEntry* entry)
/*                                                                         */
/* entry- (IN) pointer to entry to remove                                  */
/*                                                                         */
/* Returns: The previous SLPDAEntry (may be null).                         */
/*=========================================================================*/
{
    SLPDAEntry* del = entry;
    entry = (SLPDAEntry*)entry->listitem.next;
    ListUnlink((PListItem*)&G_KnownDAListHead,(PListItem)del);               
    if(entry == 0)
    {
        entry = G_KnownDAListHead;
    }
    SLPDAEntryFree(del);
    return entry;
}
示例#4
0
/*-------------------------------------------------------------------------*/
int KnownDAListRemove(SLPList* dalist, SLPDAEntry* remove)
/* Remove an entry to the KnownDA cach                                     */
/*-------------------------------------------------------------------------*/
{
    SLPDAEntry*     entry;

    entry = (SLPDAEntry*)dalist->head;
    while(entry)
    {
        if(SLPCompareString(remove->urllen,
                            remove->url,
                            entry->urllen,
                            entry->url) == 0)
        {
            /* Remove entry from list and free it */
            SLPDAEntryFree( (SLPDAEntry*)SLPListUnlink(dalist, (SLPListItem*)entry) );
            break;
        }

        entry = (SLPDAEntry*) entry->listitem.next;
    }

    return 0;
}