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

Modified Files:
        playersd.h playersd_mdns.c 
Log Message:
fixed up build, added auto registration to server

Index: playersd_mdns.c
===================================================================
RCS file: /cvsroot/playerstage/code/player/libplayersd/playersd_mdns.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** playersd_mdns.c     26 Sep 2007 21:35:46 -0000      1.11
--- playersd_mdns.c     26 Sep 2007 23:07:44 -0000      1.12
***************
*** 103,106 ****
--- 103,108 ----
    // User's browse callback
    player_sd_browse_callback_fn_t callb;
+   // Last set of flags that we got in the browse callback
+   DNSServiceFlags flags;
  } player_sd_mdns_t;
  
***************
*** 150,153 ****
--- 152,156 ----
    mdns->mdnsDevs_len = 0;
    mdns->callb = NULL;
+   mdns->flags = 0;
    sd->sdRef = mdns;
  
***************
*** 333,336 ****
--- 336,340 ----
    }
  
+   mdns->flags = 0;
    // Initiate the browse session
    if((sdErr = DNSServiceBrowse(&(mdns->browseRef),
***************
*** 405,408 ****
--- 409,488 ----
  }
  
+ int
+ player_sd_browse_stop(player_sd_t* sd)
+ 
+ {
+   player_sd_mdns_t* mdns = (player_sd_mdns_t*)sd->sdRef;
+ 
+   if(mdns->browseRef_valid)
+   {
+     DNSServiceRefDeallocate(mdns->browseRef);
+     mdns->browseRef_valid = 0;
+   }
+   return(0);
+ }
+ 
+ int 
+ player_sd_update(player_sd_t* sd, double timeout)
+ {
+   struct pollfd ufds[1];
+   int numready;
+   int polltime;
+   DNSServiceErrorType sdErr;
+   player_sd_mdns_t* mdns = (player_sd_mdns_t*)sd->sdRef;
+ 
+   if(!mdns->browseRef_valid)
+   {
+     PLAYER_ERROR("Can't update without a valid browsing session");
+     return(-1);
+   }
+ 
+   ufds[0].fd = DNSServiceRefSockFD(mdns->browseRef);
+   ufds[0].events = POLLIN;
+ 
+   if(timeout < 0)
+     polltime = -1;
+   else if (timeout == 0.0)
+     polltime = 0;
+   else
+     polltime = (int)rint(timeout * 1e3);
+ 
+   for(;;)
+   {
+     if((numready = poll(ufds,1,polltime)) < 0)
+     {
+       if(errno == EAGAIN)
+         continue;
+       else
+       {
+         PLAYER_ERROR1("poll returned error: %s", strerror(errno));
+         return(-1);
+       }
+     }
+     else if(numready > 0)
+     {
+       // Read all queued up responses
+       if((sdErr = DNSServiceProcessResult(mdns->browseRef)) != 
+          kDNSServiceErr_NoError)
+       {
+         PLAYER_ERROR1("DNSServiceProcessResult returned error: %d", sdErr);
+         return(-1);
+       }
+       while(mdns->flags & kDNSServiceFlagsMoreComing)
+       {
+         if((sdErr = DNSServiceProcessResult(mdns->browseRef)) != 
+            kDNSServiceErr_NoError)
+         {
+           PLAYER_ERROR1("DNSServiceProcessResult returned error: %d", sdErr);
+           return(-1);
+         }
+       }
+     }
+     else
+       break;
+   }
+   return(0);
+ }
+ 
  void 
  registerCB(DNSServiceRef sdRef, 
***************
*** 428,431 ****
--- 508,512 ----
  {
    player_sd_t* sd = (player_sd_t*)context;
+   player_sd_mdns_t* mdns = (player_sd_mdns_t*)sd->sdRef;
    player_sd_dev_t* sddev;
    DNSServiceRef resolveRef;
***************
*** 434,437 ****
--- 515,521 ----
    int numready;
  
+   mdns->flags = flags;
+   printf("browseCB: %x\n", mdns->flags);
+ 
    // Got a browse event.  
    if(flags & kDNSServiceFlagsAdd)
***************
*** 486,493 ****
          {
            PLAYER_ERROR1("DNSServiceProcessResult returned error: %d\n", 
sdErr);
!           return;
          }
        }
      }
    }
    else
--- 570,583 ----
          {
            PLAYER_ERROR1("DNSServiceProcessResult returned error: %d\n", 
sdErr);
!           sddev->addr_fail = 1;
          }
        }
      }
+     DNSServiceRefDeallocate(resolveRef);
+     if(sddev->addr_valid)
+     {
+       // Invoke the users' callback
+       (mdns->callb)(sd,sddev);
+     }
    }
    else
***************
*** 497,500 ****
--- 587,593 ----
      {
        sddev->valid = 0;
+       sddev->addr_valid = 0;
+       // Invoke the users' callback
+       (mdns->callb)(sd,sddev);
      }
    }

Index: playersd.h
===================================================================
RCS file: /cvsroot/playerstage/code/player/libplayersd/playersd.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** playersd.h  26 Sep 2007 21:19:54 -0000      1.9
--- playersd.h  26 Sep 2007 23:07:44 -0000      1.10
***************
*** 65,69 ****
  #include <libplayercore/player.h>
  
! #define PLAYER_SD_SERVICENAME "_player2._tcp"
  #define PLAYER_SD_DEVICE_TXTNAME "device"
  #define PLAYER_SD_NAME_MAXLEN 256
--- 65,69 ----
  #include <libplayercore/player.h>
  
! #define PLAYER_SD_SERVICENAME "_player21._tcp"
  #define PLAYER_SD_DEVICE_TXTNAME "device"
  #define PLAYER_SD_NAME_MAXLEN 256
***************
*** 118,123 ****
  /// added or removed.
  typedef void (*player_sd_browse_callback_fn_t)(player_sd_t* sd,
!                                                const char* name,
!                                                player_devaddr_t addr);
  
  /// Browse for player devices.  Browses for timeout s, accruing the results
--- 118,122 ----
  /// added or removed.
  typedef void (*player_sd_browse_callback_fn_t)(player_sd_t* sd,
!                                                player_sd_dev_t* dev);
  
  /// Browse for player devices.  Browses for timeout s, accruing the results
***************
*** 127,132 ****
  /// If cb is non-NULL, then it is registered and
  /// invoked whenever new device notifications are received (call
! /// player_sd_update to give this a chance to happen).  Returns 0 on
! /// success, non-zero on error.
  int player_sd_browse(player_sd_t* sd,
                       double timeout, 
--- 126,135 ----
  /// If cb is non-NULL, then it is registered and
  /// invoked whenever new device notifications are received (call
! /// player_sd_update to give this a chance to happen).  
! ///
! /// NOTE: Because device hostnames are resolved as they are discovered,
! /// this call may block for an unpredictable amount of time.
! ///
! /// Returns 0 on success, non-zero on error.
  int player_sd_browse(player_sd_t* sd,
                       double timeout, 
***************
*** 137,142 ****
  /// are updated, and if a callback was passed to player_sd_browse, then this
  /// function is also called for each discovered device.  Only makes sense to
! /// call this function after a call to player_sd_browse.  Returns 0 on
! /// success, non-zero on error.
  int player_sd_update(player_sd_t* sd, double timeout);
  
--- 140,149 ----
  /// are updated, and if a callback was passed to player_sd_browse, then this
  /// function is also called for each discovered device.  Only makes sense to
! /// call this function after a call to player_sd_browse.  
! ///
! /// NOTE: Because device hostnames are resolved as they are discovered,
! /// this call may block for an unpredictable amount of time.
! ///
! /// Returns 0 on success, non-zero on error.
  int player_sd_update(player_sd_t* sd, double timeout);
  


-------------------------------------------------------------------------
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