package org.dyndns.jkiddo.service.daap.server; import java.util.HashMap; import org.dyndns.jkiddo.dmap.chunks.audio.AudioProtocolVersion; import org.dyndns.jkiddo.dmap.chunks.audio.extension.MusicSharingVersion; import org.dyndns.jkiddo.dmp.chunks.media.MediaProtocolVersion; import org.dyndns.jkiddo.dmp.util.DmapUtil; import org.dyndns.jkiddo.service.dmap.MDNSResource; import org.dyndns.jkiddo.service.dmap.Util; import org.dyndns.jkiddo.zeroconf.IZeroconfManager; import com.dd.plist.NSDictionary; import com.dd.plist.NSString; public class HomeSharingResource extends MDNSResource { public static String HOME_SHARING_SERVICE_TYPE = "_home-sharing._tcp.local."; private final static AudioProtocolVersion audioProtocolVersion = new AudioProtocolVersion(DmapUtil.APRO_VERSION_3012); private final static MediaProtocolVersion mediaProtocolVersion = new MediaProtocolVersion(DmapUtil.MPRO_VERSION_2010); private final static MusicSharingVersion musicSharingVersion = new MusicSharingVersion(DmapUtil.MUSIC_SHARING_VERSION_3012); private final String applicationName; private final String hsGid; private final String hsPid; public HomeSharingResource(final IZeroconfManager mDNS, final Integer port, final String applicationName, final String appleUsername, final String applePassword) throws Exception { super(mDNS, port); final NSDictionary propertyList = Util.requestPList(appleUsername, applePassword); hsGid = ((NSString) propertyList.get("sgid")).getContent(); hsPid = ((NSString) propertyList.get("spid")).getContent(); this.applicationName = applicationName; register(); } @Override protected IZeroconfManager.ServiceInfo getServiceInfoToRegister() { final HashMap<String, String> records = new HashMap<>(); records.put("MID", MID_0X); records.put("OSsi", "0x15F"); //OS specific records.put(DATABASE_ID_KEY, DATABASE_ID); records.put("hC", hsPid); records.put("DvTy", "iTunes"); records.put("hQ", "102"); records.put("PrVs", "65538"); records.put("dmv", mediaProtocolVersion.getValue() + ""); records.put(MACHINE_ID_KEY, MACHINE_ID); records.put(TXT_VERSION_KEY, TXT_VERSION); records.put(ITSH_VERSION_KEY, musicSharingVersion.getValue() + ""); records.put(VERSION_KEY, audioProtocolVersion.getValue() + ""); records.put("hG", hsGid); records.put("iCSV", "65540"); records.put(MACHINE_NAME_KEY, applicationName); records.put("DvSv", "3120"); return new IZeroconfManager.ServiceInfo(HOME_SHARING_SERVICE_TYPE, applicationName, port, records); } }