Mark X_MS_MediaReceiverRegistrar variables that are supposed to be evented as such.
This commit is contained in:
parent
58b2c604d8
commit
dda5b1c19d
139
upnpdescgen.c
139
upnpdescgen.c
@ -191,79 +191,11 @@ static const struct XMLElt rootDesc[] =
|
|||||||
{"/serviceType", "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1"},
|
{"/serviceType", "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1"},
|
||||||
{"/serviceId", "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar"},
|
{"/serviceId", "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar"},
|
||||||
{"/controlURL", X_MS_MEDIARECEIVERREGISTRAR_CONTROLURL},
|
{"/controlURL", X_MS_MEDIARECEIVERREGISTRAR_CONTROLURL},
|
||||||
{"/eventSubURL", ""},
|
{"/eventSubURL", X_MS_MEDIARECEIVERREGISTRAR_EVENTURL},
|
||||||
{"/SCPDURL", X_MS_MEDIARECEIVERREGISTRAR_PATH},
|
{"/SCPDURL", X_MS_MEDIARECEIVERREGISTRAR_PATH},
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct argument AddPortMappingArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 1, 11},
|
|
||||||
{NULL, 1, 12},
|
|
||||||
{NULL, 1, 14},
|
|
||||||
{NULL, 1, 13},
|
|
||||||
{NULL, 1, 15},
|
|
||||||
{NULL, 1, 9},
|
|
||||||
{NULL, 1, 16},
|
|
||||||
{NULL, 1, 10},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument DeletePortMappingArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 1, 11},
|
|
||||||
{NULL, 1, 12},
|
|
||||||
{NULL, 1, 14},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument SetConnectionTypeArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 1, 0},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetConnectionTypeInfoArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 0},
|
|
||||||
{NULL, 2, 1},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetNATRSIPStatusArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 5},
|
|
||||||
{NULL, 2, 6},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetGenericPortMappingEntryArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 1, 8},
|
|
||||||
{NULL, 2, 11},
|
|
||||||
{NULL, 2, 12},
|
|
||||||
{NULL, 2, 14},
|
|
||||||
{NULL, 2, 13},
|
|
||||||
{NULL, 2, 15},
|
|
||||||
{NULL, 2, 9},
|
|
||||||
{NULL, 2, 16},
|
|
||||||
{NULL, 2, 10},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetSpecificPortMappingEntryArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 1, 11},
|
|
||||||
{NULL, 1, 12},
|
|
||||||
{NULL, 1, 14},
|
|
||||||
{NULL, 2, 13},
|
|
||||||
{NULL, 2, 15},
|
|
||||||
{NULL, 2, 9},
|
|
||||||
{NULL, 2, 16},
|
|
||||||
{NULL, 2, 10},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* For ConnectionManager */
|
/* For ConnectionManager */
|
||||||
static const struct argument GetProtocolInfoArgs[] =
|
static const struct argument GetProtocolInfoArgs[] =
|
||||||
{
|
{
|
||||||
@ -321,9 +253,9 @@ static const struct action ConnectionManagerActions[] =
|
|||||||
|
|
||||||
static const struct stateVar ConnectionManagerVars[] =
|
static const struct stateVar ConnectionManagerVars[] =
|
||||||
{
|
{
|
||||||
{"SourceProtocolInfo", 1<<7, 0, 0, 44}, /* required */
|
{"SourceProtocolInfo", 0|EVENTED, 0, 0, 44}, /* required */
|
||||||
{"SinkProtocolInfo", 1<<7, 0, 0, 48}, /* required */
|
{"SinkProtocolInfo", 0|EVENTED, 0, 0, 48}, /* required */
|
||||||
{"CurrentConnectionIDs", 1<<7, 0, 0, 46}, /* required */
|
{"CurrentConnectionIDs", 0|EVENTED, 0, 0, 46}, /* required */
|
||||||
{"A_ARG_TYPE_ConnectionStatus", 0, 0, 27}, /* required */
|
{"A_ARG_TYPE_ConnectionStatus", 0, 0, 27}, /* required */
|
||||||
{"A_ARG_TYPE_ConnectionManager", 0, 0}, /* required */
|
{"A_ARG_TYPE_ConnectionManager", 0, 0}, /* required */
|
||||||
{"A_ARG_TYPE_Direction", 0, 0, 33}, /* required */
|
{"A_ARG_TYPE_Direction", 0, 0, 33}, /* required */
|
||||||
@ -405,7 +337,7 @@ static const struct action ContentDirectoryActions[] =
|
|||||||
|
|
||||||
static const struct stateVar ContentDirectoryVars[] =
|
static const struct stateVar ContentDirectoryVars[] =
|
||||||
{
|
{
|
||||||
{"TransferIDs", 1<<7, 0, 0, 48}, /* 0 */
|
{"TransferIDs", 0|EVENTED, 0, 0, 48}, /* 0 */
|
||||||
{"A_ARG_TYPE_ObjectID", 0, 0},
|
{"A_ARG_TYPE_ObjectID", 0, 0},
|
||||||
{"A_ARG_TYPE_Result", 0, 0},
|
{"A_ARG_TYPE_Result", 0, 0},
|
||||||
{"A_ARG_TYPE_SearchCriteria", 0, 0},
|
{"A_ARG_TYPE_SearchCriteria", 0, 0},
|
||||||
@ -416,17 +348,9 @@ static const struct stateVar ContentDirectoryVars[] =
|
|||||||
{"A_ARG_TYPE_Index", 3, 0},
|
{"A_ARG_TYPE_Index", 3, 0},
|
||||||
{"A_ARG_TYPE_Count", 3, 0},
|
{"A_ARG_TYPE_Count", 3, 0},
|
||||||
{"A_ARG_TYPE_UpdateID", 3, 0},
|
{"A_ARG_TYPE_UpdateID", 3, 0},
|
||||||
//JM{"A_ARG_TYPE_TransferID", 3, 0}, /* 10 */
|
|
||||||
//JM{"A_ARG_TYPE_TransferStatus", 0, 0, 39},
|
|
||||||
/* Allowed Values : COMPLETED / ERROR / IN_PROGRESS / STOPPED */
|
|
||||||
//JM{"A_ARG_TYPE_TransferLength", 0, 0},
|
|
||||||
//JM{"A_ARG_TYPE_TransferTotal", 0, 0},
|
|
||||||
//JM{"A_ARG_TYPE_TagValueList", 0, 0},
|
|
||||||
//JM{"A_ARG_TYPE_URI", 5, 0}, /* 15 */
|
|
||||||
{"SearchCapabilities", 0, 0},
|
{"SearchCapabilities", 0, 0},
|
||||||
{"SortCapabilities", 0, 0},
|
{"SortCapabilities", 0, 0},
|
||||||
{"SystemUpdateID", 3|0x80, 0, 0, 255},
|
{"SystemUpdateID", 3|EVENTED, 0, 0, 255},
|
||||||
//{"ContainerUpdateIDs", 0, 0},
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -455,9 +379,6 @@ static const struct action X_MS_MediaReceiverRegistrarActions[] =
|
|||||||
{
|
{
|
||||||
{"IsAuthorized", GetIsAuthorizedArgs}, /* R */
|
{"IsAuthorized", GetIsAuthorizedArgs}, /* R */
|
||||||
{"IsValidated", GetIsValidatedArgs}, /* R */
|
{"IsValidated", GetIsValidatedArgs}, /* R */
|
||||||
#if 0 // Not needed? WMP12 still works. Need to check with 360 and WMP11.
|
|
||||||
{"RegisterDevice", GetRegisterDeviceArgs}, /* R */
|
|
||||||
#endif
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -467,49 +388,13 @@ static const struct stateVar X_MS_MediaReceiverRegistrarVars[] =
|
|||||||
{"A_ARG_TYPE_RegistrationReqMsg", 7, 0},
|
{"A_ARG_TYPE_RegistrationReqMsg", 7, 0},
|
||||||
{"A_ARG_TYPE_RegistrationRespMsg", 7, 0},
|
{"A_ARG_TYPE_RegistrationRespMsg", 7, 0},
|
||||||
{"A_ARG_TYPE_Result", 6, 0},
|
{"A_ARG_TYPE_Result", 6, 0},
|
||||||
{"AuthorizationDeniedUpdateID", 3, 0},
|
{"AuthorizationDeniedUpdateID", 3|EVENTED, 0},
|
||||||
{"AuthorizationGrantedUpdateID", 3, 0},
|
{"AuthorizationGrantedUpdateID", 3|EVENTED, 0},
|
||||||
{"ValidationRevokedUpdateID", 3, 0},
|
{"ValidationRevokedUpdateID", 3|EVENTED, 0},
|
||||||
{"ValidationSucceededUpdateID", 3, 0},
|
{"ValidationSucceededUpdateID", 3|EVENTED, 0},
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* WANCfg.xml */
|
|
||||||
/* See UPnP_IGD_WANCommonInterfaceConfig 1.0.pdf */
|
|
||||||
|
|
||||||
static const struct argument GetCommonLinkPropertiesArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 0},
|
|
||||||
{NULL, 2, 1},
|
|
||||||
{NULL, 2, 2},
|
|
||||||
{NULL, 2, 3},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetTotalBytesSentArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 4},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetTotalBytesReceivedArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 5},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetTotalPacketsSentArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 6},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct argument GetTotalPacketsReceivedArgs[] =
|
|
||||||
{
|
|
||||||
{NULL, 2, 7},
|
|
||||||
{NULL, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct serviceDesc scpdContentDirectory =
|
static const struct serviceDesc scpdContentDirectory =
|
||||||
{ ContentDirectoryActions, ContentDirectoryVars };
|
{ ContentDirectoryActions, ContentDirectoryVars };
|
||||||
|
|
||||||
@ -777,7 +662,7 @@ genServiceDesc(int * len, const struct serviceDesc * s)
|
|||||||
{
|
{
|
||||||
str = strcat_str(str, len, &tmplen,
|
str = strcat_str(str, len, &tmplen,
|
||||||
"<stateVariable sendEvents=\"");
|
"<stateVariable sendEvents=\"");
|
||||||
str = strcat_str(str, len, &tmplen, (vars[i].itype & 0x80)?"yes":"no");
|
str = strcat_str(str, len, &tmplen, (vars[i].itype & EVENTED)?"yes":"no");
|
||||||
str = strcat_str(str, len, &tmplen, "\"><name>");
|
str = strcat_str(str, len, &tmplen, "\"><name>");
|
||||||
str = strcat_str(str, len, &tmplen, vars[i].name);
|
str = strcat_str(str, len, &tmplen, vars[i].name);
|
||||||
str = strcat_str(str, len, &tmplen, "</name><dataType>");
|
str = strcat_str(str, len, &tmplen, "</name><dataType>");
|
||||||
@ -851,7 +736,7 @@ genEventVars(int * len, const struct serviceDesc * s, const char * servns)
|
|||||||
snprintf(buf, sizeof(buf), "<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\" xmlns:s=\"%s\">", servns);
|
snprintf(buf, sizeof(buf), "<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\" xmlns:s=\"%s\">", servns);
|
||||||
str = strcat_str(str, len, &tmplen, buf);
|
str = strcat_str(str, len, &tmplen, buf);
|
||||||
while(v->name) {
|
while(v->name) {
|
||||||
if(v->itype & 0x80) {
|
if(v->itype & EVENTED) {
|
||||||
snprintf(buf, sizeof(buf), "<e:property><%s>", v->name);
|
snprintf(buf, sizeof(buf), "<e:property><%s>", v->name);
|
||||||
str = strcat_str(str, len, &tmplen, buf);
|
str = strcat_str(str, len, &tmplen, buf);
|
||||||
//printf("<e:property><s:%s>", v->name);
|
//printf("<e:property><s:%s>", v->name);
|
||||||
|
@ -57,6 +57,7 @@ struct argument {
|
|||||||
unsigned char relatedVar; /* index of the related variable */
|
unsigned char relatedVar; /* index of the related variable */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define EVENTED 1<<7
|
||||||
struct stateVar {
|
struct stateVar {
|
||||||
const char * name;
|
const char * name;
|
||||||
unsigned char itype; /* MSB: sendEvent flag, 7 LSB: index in upnptypes */
|
unsigned char itype; /* MSB: sendEvent flag, 7 LSB: index in upnptypes */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user