Update of /cvsroot/playerstage/code/player/libplayersd
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2352/libplayersd

Modified Files:
        playersd.h playersd_mdns.c 
Log Message:
working on browsing

Index: playersd_mdns.c
===================================================================
RCS file: /cvsroot/playerstage/code/player/libplayersd/playersd_mdns.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** playersd_mdns.c     26 Sep 2007 19:53:45 -0000      1.9
--- playersd_mdns.c     26 Sep 2007 21:19:54 -0000      1.10
***************
*** 62,65 ****
--- 62,66 ----
  #include <libplayercore/error.h>
  #include <libplayercore/interface_util.h>
+ #include <libplayercore/addr_util.h>
  
  #include <replace/replace.h> // for poll(2)
***************
*** 427,430 ****
--- 428,433 ----
    DNSServiceRef resolveRef;
    DNSServiceErrorType sdErr;
+   struct pollfd ufds[1];
+   int numready;
  
    // Got a browse event.  
***************
*** 442,449 ****
      sddev->valid = 1;
      sddev->addr_valid = 0;
      memset(sddev->name,0,sizeof(sddev->name));
      strncpy(sddev->name,serviceName,sizeof(sddev->name)-1);
  
-     printf("Resolving %s\n", serviceName);
      // Resolve its address
      if((sdErr = DNSServiceResolve(&resolveRef,
--- 445,452 ----
      sddev->valid = 1;
      sddev->addr_valid = 0;
+     sddev->addr_fail = 0;
      memset(sddev->name,0,sizeof(sddev->name));
      strncpy(sddev->name,serviceName,sizeof(sddev->name)-1);
  
      // Resolve its address
      if((sdErr = DNSServiceResolve(&resolveRef,
***************
*** 460,473 ****
      }
  
!     puts("Calling DNSServiceProcessResult");
!     
!     // Wait for the resolution response.
!     // TODO: test whether this can block for a long time
!     if((sdErr = DNSServiceProcessResult(resolveRef)) != 
kDNSServiceErr_NoError)
      {
!       PLAYER_ERROR1("DNSServiceProcessResult returned error: %d\n", sdErr);
!       return;
      }
-     puts("done");
    }
    else
--- 463,490 ----
      }
  
!     ufds[0].fd = DNSServiceRefSockFD(resolveRef);
!     ufds[0].events = POLLIN;
!     while(!sddev->addr_valid && !sddev->addr_fail)
      {
!       if((numready = poll(ufds,1,-1)) < 0)
!       {
!         if(errno == EAGAIN)
!           continue;
!         else
!         {
!           PLAYER_ERROR1("poll returned error: %s", strerror(errno));
!           sddev->addr_fail = 1;
!         }
!       }
!       else if(numready > 0)
!       {
!         if((sdErr = DNSServiceProcessResult(resolveRef)) != 
!            kDNSServiceErr_NoError)
!         {
!           PLAYER_ERROR1("DNSServiceProcessResult returned error: %d\n", 
sdErr);
!           return;
!         }
!       }
      }
    }
    else
***************
*** 480,487 ****
    }
  
-   puts("***************************************************");
-   puts("Device cache:");
    player_sd_printcache(sd);
-   puts("***************************************************");
  }
  
--- 497,501 ----
***************
*** 498,502 ****
            void *context)
  {
    // Handle resolution result
!   printf("resolveCB: %s\n", fullname);
  }
--- 512,565 ----
            void *context)
  {
+   player_sd_dev_t* sddev = (player_sd_dev_t*)context;
+   const char* value;
+   uint8_t value_len;
+   char* colon;
+   char buf[PLAYER_SD_TXT_MAXLEN];
+ 
    // Handle resolution result
!   if(errorCode == kDNSServiceErr_NoError)
!   {
!     // Fill in the address info
!     if(hostname_to_packedaddr(&(sddev->addr.host), hosttarget) != 0)
!     {
!       PLAYER_ERROR1("Failed to resolve IP address for host %s\n",
!                     hosttarget);
!       sddev->addr_fail = 1;
!       return;
!     }
!     sddev->addr.robot = port;
!     if(!(value = (const char*)TXTRecordGetValuePtr(txtLen,
!                                                    txtRecord,
!                                                    PLAYER_SD_DEVICE_TXTNAME,
!                                                    &value_len)))
!     {
!       PLAYER_ERROR1("Failed to find TXT info for service %s\n", sddev->name);
!       sddev->addr_fail = 1;
!       return;
!     }
!     if(!(colon = strchr(value,':')) ||
!        ((colon-value) <= 0) ||
!        ((value_len - (colon-value+1)) <= 0))
!     {
!       PLAYER_ERROR2("Failed to parse TXT info \"%s\" for service %s\n",
!                     value, sddev->name);
!       sddev->addr_fail = 1;
!       return;
!     }
!     memset(buf,0,sizeof(buf));
!     strncpy(buf,value,(colon-value));
!     sddev->addr.interf = str_to_interf(buf);
! 
!     memset(buf,0,sizeof(buf));
!     strncpy(buf,colon,(value_len-(colon-value+1)));
!     sddev->addr.index = atoi(buf);
! 
!     sddev->addr_valid = 1;
!   }
!   else
!   {
!     // Something went wrong.
!     sddev->addr_fail = 1;
!   }
  }

Index: playersd.h
===================================================================
RCS file: /cvsroot/playerstage/code/player/libplayersd/playersd.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** playersd.h  26 Sep 2007 19:53:45 -0000      1.8
--- playersd.h  26 Sep 2007 21:19:54 -0000      1.9
***************
*** 66,69 ****
--- 66,70 ----
  
  #define PLAYER_SD_SERVICENAME "_player2._tcp"
+ #define PLAYER_SD_DEVICE_TXTNAME "device"
  #define PLAYER_SD_NAME_MAXLEN 256
  #define PLAYER_SD_TXT_MAXLEN 256
***************
*** 78,81 ****
--- 79,84 ----
    // Is the address valid?
    uint8_t addr_valid;
+   // Did address resolution fail?
+   uint8_t addr_fail;
    // Address of the device
    player_devaddr_t addr;


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to