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