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