* Rewrite filter parsing code. Might help with Olive Symphony or other Twonky-based clients that send odd filter requests.
This commit is contained in:
parent
76ab570ed1
commit
f35e0831d1
114
upnpsoap.c
114
upnpsoap.c
@ -232,50 +232,106 @@ GetCurrentConnectionInfo(struct upnphttp * h, const char * action)
|
||||
static u_int32_t
|
||||
set_filter_flags(char * filter)
|
||||
{
|
||||
char *item, *saveptr = NULL;
|
||||
u_int32_t flags = 0;
|
||||
|
||||
if( !filter || (strlen(filter) <= 1) )
|
||||
return 0xFFFFFFFF;
|
||||
if( strstr(filter, "@childCount") )
|
||||
item = strtok_r(filter, ",", &saveptr);
|
||||
while( item != NULL )
|
||||
{
|
||||
if( strcmp(item, "@childCount") == 0 )
|
||||
{
|
||||
flags |= FILTER_CHILDCOUNT;
|
||||
if( strstr(filter, "dc:creator") )
|
||||
}
|
||||
else if( strcmp(item, "dc:creator") == 0 )
|
||||
{
|
||||
flags |= FILTER_DC_CREATOR;
|
||||
if( strstr(filter, "dc:date") )
|
||||
}
|
||||
else if( strcmp(item, "dc:date") == 0 )
|
||||
{
|
||||
flags |= FILTER_DC_DATE;
|
||||
if( strstr(filter, "dc:description") )
|
||||
}
|
||||
else if( strcmp(item, "dc:description") == 0 )
|
||||
{
|
||||
flags |= FILTER_DC_DESCRIPTION;
|
||||
if( strstr(filter, "dlna") )
|
||||
}
|
||||
else if( strcmp(item, "dlna") == 0 )
|
||||
{
|
||||
flags |= FILTER_DLNA_NAMESPACE;
|
||||
if( strstr(filter, "@refID") )
|
||||
}
|
||||
else if( strcmp(item, "@refID") == 0 )
|
||||
{
|
||||
flags |= FILTER_REFID;
|
||||
if( strstr(filter, "res") )
|
||||
flags |= FILTER_RES;
|
||||
if( strstr(filter, "res@bitrate") )
|
||||
flags |= FILTER_RES_BITRATE;
|
||||
if( strstr(filter, "res@duration") )
|
||||
flags |= FILTER_RES_DURATION;
|
||||
if( strstr(filter, "res@nrAudioChannels") )
|
||||
flags |= FILTER_RES_NRAUDIOCHANNELS;
|
||||
if( strstr(filter, "res@resolution") )
|
||||
flags |= FILTER_RES_RESOLUTION;
|
||||
if( strstr(filter, "res@sampleFrequency") )
|
||||
flags |= FILTER_RES_SAMPLEFREQUENCY;
|
||||
if( strstr(filter, "res@size") )
|
||||
flags |= FILTER_RES_SIZE;
|
||||
if( strstr(filter, "upnp:album") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:album") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_ALBUM;
|
||||
if( strstr(filter, "upnp:albumArtURI") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:albumArtURI") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_ALBUMARTURI;
|
||||
if( strstr(filter, "upnp:albumArtURI@dlna:profileID") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:albumArtURI@dlna:profileID") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_ALBUMARTURI_DLNA_PROFILEID;
|
||||
if( strstr(filter, "upnp:artist") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:artist") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_ARTIST;
|
||||
if( strstr(filter, "upnp:genre") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:genre") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_GENRE;
|
||||
if( strstr(filter, "upnp:originalTrackNumber") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:originalTrackNumber") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_ORIGINALTRACKNUMBER;
|
||||
if( strstr(filter, "upnp:searchClass") )
|
||||
}
|
||||
else if( strcmp(item, "upnp:searchClass") == 0 )
|
||||
{
|
||||
flags |= FILTER_UPNP_SEARCHCLASS;
|
||||
}
|
||||
else if( strcmp(item, "res") == 0 )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
}
|
||||
else if( (strcmp(item, "res@bitrate") == 0) ||
|
||||
((strcmp(item, "bitrate") == 0) && (flags & FILTER_RES)) )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
flags |= FILTER_RES_BITRATE;
|
||||
}
|
||||
else if( (strcmp(item, "res@duration") == 0) ||
|
||||
((strcmp(item, "duration") == 0) && (flags & FILTER_RES)) )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
flags |= FILTER_RES_DURATION;
|
||||
}
|
||||
else if( (strcmp(item, "res@nrAudioChannels") == 0) ||
|
||||
((strcmp(item, "nrAudioChannels") == 0) && (flags & FILTER_RES)) )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
flags |= FILTER_RES_NRAUDIOCHANNELS;
|
||||
}
|
||||
else if( (strcmp(item, "res@resolution") == 0) ||
|
||||
((strcmp(item, "resolution") == 0) && (flags & FILTER_RES)) )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
flags |= FILTER_RES_RESOLUTION;
|
||||
}
|
||||
else if( (strcmp(item, "res@sampleFrequency") == 0) ||
|
||||
((strcmp(item, "sampleFrequency") == 0) && (flags & FILTER_RES)) )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
flags |= FILTER_RES_SAMPLEFREQUENCY;
|
||||
}
|
||||
else if( (strcmp(item, "res@size") == 0) ||
|
||||
((strcmp(item, "size") == 0) && (flags & FILTER_RES)) )
|
||||
{
|
||||
flags |= FILTER_RES;
|
||||
flags |= FILTER_RES_SIZE;
|
||||
}
|
||||
item = strtok_r(NULL, ",", &saveptr);
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user