Example #1
0
	__declspec(dllexport) void ILibWrapper_DestructXMLNodeList(struct ILibXMLNode *node)
	{
		ILibDestructXMLNodeList(node);
	}
void _Callback2(struct UPnPService *sender, int ErrorCode, void *user,
			    char* Result, unsigned int NumberReturned, 
			    unsigned int TotalMatches, unsigned int UpdateID)
{
	PlayListManager_PC state = (PlayListManager_PC)user;
	struct ILibXMLNode* root = NULL;
	int count = (int)NumberReturned;

	state->Error = -ErrorCode;
	if(ErrorCode != 0)
	{
		sem_post(&state->LockObject);
		return;
	}

	ClearMetadata(state);

	if((int)TotalMatches != state->Parent->TrackCount)
	{
		state->Parent->TrackCount = (int)TotalMatches;
		BitArray_ChangeSize(state->Parent->ShuffleArray, state->Parent->TrackCount);

		if(state->Parent->OnTrackCountChanged != NULL)
		{
			state->Parent->OnTrackCountChanged(state->Parent);
		}
	}

	root = ILibParseXML(Result, 0, (int)strlen(Result));
	if(root != NULL)
	{
		BOOL failure = FALSE;
		if(ILibProcessXMLNodeList(root) == 0)
		{
			int i = 0;
			struct ILibXMLNode* item = root->Next;
            ILibXML_BuildNamespaceLookupTable(root);
			while(item != NULL && i < count)
			{
				struct ILibXMLAttribute* attrs = ILibGetXMLAttributes(item);
				if(attrs != NULL)
				{
					state->Objects[i] = CDS_DeserializeDidlToObject(item, attrs, 1, Result, Result + strlen(Result));
					ILibDestructXMLAttributeList(attrs);
				}
				else
				{
					failure = TRUE;
					state->Objects[i] = NULL;
				}
				i++;
				item = item->Peer;
			}
		}

		ILibDestructXMLNodeList(root);

		if(failure == TRUE)
		{
			int i;
			state->Count = 0;
			for(i = 0; i < count; i++)
			{
				if(state->Objects[i] != NULL)
				{
					CDS_ObjRef_Release(state->Objects[i]);
					state->Objects[i] = NULL;
				}
			}
			state->Error = 1;
		}

		state->Count = count;
	}
	else
	{
		state->Error = 2;
	}

	sem_post(&state->LockObject);
}
Example #3
0
struct CdsObject* ResolvePlaySingleURI(void* MSCPToken, char* playSingleUri)
{
	struct CdsObject* result = NULL;
	struct _PlaySingleUri* psUri = NULL;
	struct _BrowseState* state = NULL;
	struct UPnPDevice* device = NULL;
	struct UPnPService* service = NULL;
	char* rawResult = NULL;

	if(MSCPToken == NULL || playSingleUri == NULL)
	{
		return NULL;
	}
	psUri = _ParsePlaySingleUri(playSingleUri);
	if(psUri == NULL)
	{
		return NULL;
	}
	device = MediaServerCP_GetDeviceAtUDN(MSCPToken, psUri->UDN);
	if(device == NULL)
	{
		free(psUri);
		return NULL;
	}
	service = MediaServerCP_GetService_ContentDirectory(device);
	if(service == NULL)
	{
		free(psUri);
		return NULL;
	}

	state = (struct _BrowseState*)malloc(sizeof(struct _BrowseState));
	sem_init(&state->Lock, 0, 1);
	state->Result = NULL;

	sem_wait(&state->Lock);

	MediaServerCP_Invoke_ContentDirectory_Browse(service, &_Callback, state, psUri->ItemID, "BrowseMetadata", "res", 0, 0, "");

	sem_wait(&state->Lock);
	sem_destroy(&state->Lock);

	rawResult = state->Result;

	free(state);
	free(psUri);

	if(rawResult != NULL)
	{
		struct ILibXMLNode* root = ILibParseXML(rawResult, 0, (int)strlen(rawResult));
		if(root != NULL)
		{
			if(ILibProcessXMLNodeList(root) == 0)
			{
				struct ILibXMLNode* item = root->Next;
				if(item != NULL && strncmp(item->Name, "item", 4) == 0)
				{
					struct ILibXMLAttribute* attrs = ILibGetXMLAttributes(item);
					if(attrs != NULL)
					{
						result = CDS_DeserializeDidlToObject(item, attrs, 1, rawResult, rawResult + strlen(rawResult));
						ILibDestructXMLAttributeList(attrs);
					}
				}
			}
			ILibDestructXMLNodeList(root);
		}
		free(rawResult);
	}

	return result;
}
Example #4
0
int main(void)
{
	struct ISTAR_SERIES_INFO series_info;
    //struct ISTAR_IPTV_INFO iptv_info;
	char lpBuffer[1000000];//= NULL;	
	int i;
	int nRet = RSP_FAIL;
	int buf_size = 0;
	struct ILibXMLNode *rootXML = NULL, *xml = NULL;
	struct ISTAR_SERIES_XML_ITEM *lpEntry = NULL;
	
	FILE *fp_r, *fp_w;
	unsigned long file_length;
	
	lpEntry = series_info.list;
	//lpEntry = iptv_info.list;	
	
	fp_r = fopen("Seriese_content.xml", "r");
	//fp_r = fopen("movie_content.xml", "r");
	//fp_r = fopen("Online-Tv .xml", "r");

	// The test result will be saved here
	fp_w = fopen("output.txt", "a+");
	fseek(fp_r, 0, SEEK_END);
	file_length = ftell(fp_r);
	fseek(fp_r, 0, SEEK_SET);
	
	if((buf_size = fread(lpBuffer, 1, file_length, fp_r)) <= 0){
		ERR("No data!!!");
		return -1;
	}
	
	if(lpBuffer && buf_size > 0 && lpEntry)
	{
		//Get the xml_name list
		rootXML = xml = ILibParseXML(lpBuffer, 0, buf_size);

		nRet = RSP_FAIL;
		while(xml != NULL)
		{
			if(xml->NameLength == 8 && memcmp(xml->Name, "catagory", 8) == 0
			|| xml->NameLength == 8 && memcmp(xml->Name, "language", 8) == 0)
			{
				nRet = istar_sub_type_parser(&xml);
				if(nRet)
					continue;
				xml = xml->Next;
				
				while(xml!=NULL && *(xml->Name-1)!='/' && i<ISTAR_ITEM_NUMBER)
				{
					nRet = RSP_FAIL;
					if(xml->EmptyTag){
						if(xml->Next == NULL)
							break;
						else xml = xml->Next;
					}	
					if(xml->NameLength==7 && memcmp(xml->Name, "channel", 7)==0
					|| xml->NameLength==6 && memcmp(xml->Name, "series", 6)==0
					|| xml->NameLength==5 && memcmp(xml->Name, "movie", 5)==0)
					{
						memcpy(lpEntry[i].category, xml_type, ISTAR_CATEGORY_LEN_MAX);
						nRet = istar_series_attr_parser(&xml, &lpEntry[i]);
					}
					if(nRet == RSP_OK)
						i++;
					xml = xml->Next;
				}
				if(xml == NULL || i >= ISTAR_ITEM_NUMBER)
					break;
			}
			xml = xml->Next;
		}
		
		// Destruct XML node list
        ILibDestructXMLNodeList(rootXML);
	}
	for(i=0; i<ISTAR_ITEM_NUMBER; i++){
		fwrite(lpEntry[i].category, 1, ISTAR_CATEGORY_LEN_MAX, fp_w);
		fwrite("\r\n", 1, 2, fp_w);
		fwrite(lpEntry[i].thumbnail, 1, ISTAR_THUMB_URL_MAX, fp_w);
		fwrite("\r\n", 1, 2, fp_w);
		fwrite(lpEntry[i].videourl, 1, ISTAR_VIDEO_URL_MAX, fp_w);
		fwrite("\r\n", 1, 2, fp_w);
		fwrite(lpEntry[i].title, 1, ISTAR_TITLE_LEN_MAX, fp_w);
		fwrite("\r\n", 1, 2, fp_w);

		fwrite(lpEntry[i].type, 1, ISTAR_TYPE_LEN_MAX, fp_w);
		fwrite("\r\n\r\n", 1, 4, fp_w);
	}		
	fclose(fp_r);
	fclose(fp_w);
	
	return nRet;
}
Example #5
0
BOOL _PLMTS_Seek(PlayListManager manager, int trackNumber)
{
    char* format = "<DIDL-Lite xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" xmlns:dlna=\"urn:schemas-dlna-org:metadata-1-0/\">%s</DIDL-Lite>";
    char* fragment = NULL;
    char* xml = NULL;
    BOOL result = FALSE;
    char* metadata = NULL;
    int offset = 0;
    int length = 0;
    PlayListManager_S state = (PlayListManager_S)manager->InternalState;

    metadata = _GetTrackMetadata(state, trackNumber - 1, &offset, &length);

    if(metadata == NULL)
    {
        return FALSE;
    }
    fragment = ILibString_Copy(metadata + offset, length);
    xml = (char*)malloc(strlen(fragment) + strlen(format));
    sprintf(xml, format, fragment);
    free(fragment);
    free(metadata);

    if(xml != NULL)
    {
        struct ILibXMLNode* root = ILibParseXML(xml, 0, (int)strlen(xml));
        if(root != NULL)
        {
            if(ILibProcessXMLNodeList(root) == 0)
            {
                ILibXML_BuildNamespaceLookupTable(root);
                if(root->Next != NULL)
                {
                    struct ILibXMLNode* item = root->Next;
                    struct ILibXMLAttribute* attrs = ILibGetXMLAttributes(item);
                    if(attrs != NULL)
                    {
                        struct CdsObject* cdsItem = CDS_DeserializeDidlToObject(item, attrs, 1, metadata + offset, metadata + offset + length);

                        if(cdsItem != NULL)
                        {
                            if(state->Parent->TrackMetaData != NULL)
                            {
                                CDS_ObjRef_Release(state->Parent->TrackMetaData);
                                state->Parent->TrackMetaData = NULL;
                            }
                            if(state->Parent->TrackURI != NULL)
                            {
                                free(state->Parent->TrackURI);
                                state->Parent->TrackURI = NULL;
                            }
                            state->Parent->TrackNumber = trackNumber;
                            state->Parent->TrackMetaData = cdsItem;
                            state->Parent->TrackNumber = trackNumber;

                            result = TRUE;
                        }
                        ILibDestructXMLAttributeList(attrs);
                    }
                }
            }
            ILibDestructXMLNodeList(root);
        }
        free(xml);
    }

    return result;
}