void DoubleProperty::SetValueFromMessage (const void *data) { if (readonly) { PLAYER_WARN2 ("Property %s is read only, cannot change value %f", key, reinterpret_cast<const player_dblprop_req_t*> (data)->value); return; } value = reinterpret_cast<const player_dblprop_req_t*> (data)->value; }
void StringProperty::SetValueFromMessage (const void *data) { if (readonly) { PLAYER_WARN2 ("Property %s is read only, cannot change value %s", key, reinterpret_cast<const player_strprop_req_t*> (data)->value); return; } const player_strprop_req_t *req = reinterpret_cast<const player_strprop_req_t*> (data); if (value != NULL) free (value); if ((value = strdup (req->value)) == NULL) { PLAYER_ERROR1 ("Failed to allocate memory to store property value %s", req->value); value = NULL; } }
const char* StringProperty::operator= (const char* rhs) { if (readonly) { PLAYER_WARN2 ("Property %s is read only, cannot change value 50 %s", key, rhs); return value; } if (value != NULL) free (value); if (rhs == NULL) value = NULL; else if ((value = strdup (rhs)) == NULL) { PLAYER_ERROR1 ("Failed to allocate memory to store property value %s", rhs); value = NULL; } return *this; }
int player_sd_register(player_sd_t* sd, const char* name, player_devaddr_t addr) { DNSServiceErrorType sdErr; char recordval[PLAYER_SD_TXT_MAXLEN]; int i,j; player_sd_mdns_t* mdns = (player_sd_mdns_t*)(sd->sdRef); player_sd_mdns_dev_t* dev; char nameBuf[PLAYER_SD_NAME_MAXLEN]; // Find a spot for this device for(i=0;i<mdns->mdnsDevs_len;i++) { if(!mdns->mdnsDevs[i].valid) break; } if(i==mdns->mdnsDevs_len) { // Make the list bigger if(!mdns->mdnsDevs_len) mdns->mdnsDevs_len = PLAYER_SD_MDNS_DEVS_LEN_INITIAL; else mdns->mdnsDevs_len *= PLAYER_SD_MDNS_DEVS_LEN_MULTIPLIER; mdns->mdnsDevs = (player_sd_mdns_dev_t*)realloc(mdns->mdnsDevs, (mdns->mdnsDevs_len * sizeof(player_sd_mdns_dev_t))); assert(mdns->mdnsDevs); for(j=i;j<mdns->mdnsDevs_len;j++) mdns->mdnsDevs[j].valid = 0; } dev = mdns->mdnsDevs + i; dev->fail = 0; memset(dev->sdDev.name,0,sizeof(dev->sdDev.name)); strncpy(dev->sdDev.name,name,sizeof(dev->sdDev.name)-1); memset(dev->sdDev.hostname,0,sizeof(dev->sdDev.hostname)); packedaddr_to_dottedip(dev->sdDev.hostname,sizeof(dev->sdDev.hostname), addr.host); dev->sdDev.robot = addr.robot; dev->sdDev.interf = addr.interf; dev->sdDev.index = addr.index; dev->nameIdx = 1; TXTRecordCreate(&(dev->txtRecord),sizeof(dev->txtBuf),dev->txtBuf); memset(recordval,0,sizeof(recordval)); snprintf(recordval, sizeof(recordval), "%s:%u", interf_to_str(addr.interf), addr.index); if((sdErr = TXTRecordSetValue(&(dev->txtRecord), "device", strlen(recordval), recordval))) { PLAYER_ERROR1("TXTRecordSetValue returned error: %d", sdErr); return(-1); } memset(nameBuf,0,sizeof(nameBuf)); strncpy(nameBuf,name,sizeof(nameBuf)-1); sdErr = kDNSServiceErr_NameConflict; // Avahi can return the kDNSServiceErr_NameConflict immediately. while(sdErr == kDNSServiceErr_NameConflict) { sdErr = DNSServiceRegister(&(dev->regRef), 0, 0, nameBuf, PLAYER_SD_SERVICENAME, NULL, NULL, addr.robot, TXTRecordGetLength(&(dev->txtRecord)), TXTRecordGetBytesPtr(&(dev->txtRecord)), registerCB, (void*)dev); if(sdErr == kDNSServiceErr_NameConflict) { // Pick a new name memset(nameBuf,0,sizeof(nameBuf)); snprintf(nameBuf,sizeof(nameBuf),"%s (%d)", name,dev->nameIdx++); } } if(sdErr != kDNSServiceErr_NoError) { PLAYER_ERROR1("DNSServiceRegister returned error: %d", sdErr); return(-1); } else { dev->valid = 1; if(strcmp(nameBuf,name)) PLAYER_WARN2("Changing service name of %s to %s\n", name,nameBuf); PLAYER_MSG1(2,"Registration of %s successful", name); return(0); } }