void cg_upnpav_content_copy(CgUpnpAvContent* destContent, CgUpnpAvContent* srcContent) { CgXmlAttribute* attr; CgUpnpAvContent* destNode; CgUpnpAvContent* srcNode; cg_xml_node_setname(destContent, cg_xml_node_getname(srcContent)); cg_xml_node_setvalue(destContent, cg_xml_node_getvalue(srcContent)); for (attr = cg_xml_node_getattributes(srcContent); attr; attr = cg_xml_attribute_next(attr)) cg_xml_node_setattribute(destContent, cg_xml_attribute_getname(attr), cg_xml_attribute_getvalue(attr)); for (srcNode = cg_xml_node_getchildnodes(srcContent); srcNode; srcNode = cg_xml_node_next(srcNode)) { if (cg_upnpav_content_gettype(srcNode) != CG_UPNPAV_CONTENT_NONE) continue; if (cg_streq(cg_xml_node_getname(srcNode), CG_UPNPAV_RESOURCE_NAME)) { destNode = cg_upnpav_resource_new(); cg_upnpav_resource_copy(destNode, srcNode); } else { destNode = cg_upnpav_content_new(); cg_xml_node_setname(destNode, cg_xml_node_getname(srcNode)); cg_xml_node_setvalue(destNode, cg_xml_node_getvalue(srcNode)); for (attr = cg_xml_node_getattributes(srcNode); attr; attr = cg_xml_attribute_next(attr)) cg_xml_node_setattribute(destNode, cg_xml_attribute_getname(attr), cg_xml_attribute_getvalue(attr)); } cg_xml_node_addchildnode(destContent, destNode); } }
CgUpnpAvServer *cg_upnpav_dms_new() { CgUpnpAvServer *dms; dms = (CgUpnpAvServer *)malloc(sizeof(CgUpnpAvServer)); dms->dev = cg_upnp_device_new(); if (!dms->dev) { free(dms); return NULL; } if (cg_upnp_device_parsedescription(dms->dev, CG_UPNPAV_DMS_DEVICE_DESCRIPTION, cg_strlen(CG_UPNPAV_DMS_DEVICE_DESCRIPTION)) == FALSE) { cg_upnp_device_delete(dms->dev); free(dms); return NULL; } if (cg_upnpav_dms_conmgr_init(dms) == FALSE) { cg_upnp_device_delete(dms->dev); free(dms); return NULL; } if (cg_upnpav_dms_condir_init(dms) == FALSE) { cg_upnp_device_delete(dms->dev); free(dms); return NULL; } if (cg_upnpav_dms_medrec_init(dms) == FALSE) { cg_upnp_device_delete(dms->dev); free(dms); return NULL; } dms->rootContent = cg_upnpav_content_new(); cg_upnpav_content_settype(dms->rootContent, CG_UPNPAV_CONTENT_CONTAINER); cg_upnpav_content_settitle(dms->rootContent, CG_UPNPAV_ROOT_CONTENT_TITLE); cg_upnpav_content_setid(dms->rootContent, CG_UPNPAV_ROOT_CONTENT_ID); cg_upnpav_content_setparentid(dms->rootContent, CG_UPNPAV_ROOT_CONTENT_PARENTID); if (!dms->rootContent) { cg_upnpav_dms_delete(dms); return NULL; } dms->mutex = cg_mutex_new(); if (!dms->mutex) { cg_upnpav_dms_delete(dms); return NULL; } dms->networkInterfaceList = cg_net_interfacelist_new(); if (!dms->networkInterfaceList) { cg_upnpav_dms_delete(dms); return NULL; } cg_upnp_device_setactionlistener(dms->dev, cg_upnpav_dms_actionreceived); cg_upnp_device_setquerylistener(dms->dev, cg_upnpav_dms_queryreceived); cg_upnp_device_sethttplistener(dms->dev, cg_upnpav_dms_device_httprequestrecieved); cg_upnpav_dms_setactionlistener(dms, NULL); cg_upnpav_dms_setquerylistener(dms, NULL); cg_upnpav_dms_sethttplistener(dms, NULL); cg_upnp_device_setuserdata(dms->dev, dms); cg_upnp_device_updateudn(dms->dev); dms->protocolInfoList = cg_upnpav_protocolinfolist_new(); return dms; }