Esempio n. 1
0
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;
}