summaryrefslogtreecommitdiff
path: root/examples/mrp_client
diff options
context:
space:
mode:
authorAndrew Elder <aelder@audioscience.com>2013-05-31 10:34:09 -0400
committerAndrew Elder <aelder@audioscience.com>2013-06-06 12:08:46 -0400
commit9dd6254a264279cc92cb2cd5cd8a368653138e26 (patch)
tree6b99bc75f1a03a8140aee6085ab72956d35918a3 /examples/mrp_client
parent996958d6f2719b14aebeddb3fe3a23afd8dca4d2 (diff)
downloadOpen-AVB-9dd6254a264279cc92cb2cd5cd8a368653138e26.tar.gz
mrp: client notification string updated to always include the registrar and applicant states
Diffstat (limited to 'examples/mrp_client')
-rwxr-xr-xexamples/mrp_client/mrpdhelper.c47
1 files changed, 34 insertions, 13 deletions
diff --git a/examples/mrp_client/mrpdhelper.c b/examples/mrp_client/mrpdhelper.c
index 66783319..0c32774f 100755
--- a/examples/mrp_client/mrpdhelper.c
+++ b/examples/mrp_client/mrpdhelper.c
@@ -72,6 +72,15 @@ struct app_state_to_enum {
static int parse_app_state(char *sz, struct mrpdhelper_notify *n)
{
int i;
+ char *r;
+
+ r = strstr(sz, "R=");
+ if (r)
+ r = strchr(r, ' ');
+ if (!r)
+ return -1;
+
+ sz = r + 1;
/* loop over mrp_app_state_mapping struct */
for (i=0; i < 12; i++) {
@@ -88,6 +97,15 @@ static int parse_app_state(char *sz, struct mrpdhelper_notify *n)
static int parse_state(char *sz, struct mrpdhelper_notify *n)
{
+ char *r;
+
+ r = strstr(sz, "R=");
+ if (r)
+ r = strchr(r, ' ');
+ if (!r)
+ return -1;
+ sz = r + 4;
+
if (strncmp(sz, "IN", 2) == 0) {
n->state = mrpdhelper_state_in;
} else if (strncmp(sz, "LV", 3) == 0) {
@@ -133,7 +151,7 @@ static int parse_registrar(char *sz, struct mrpdhelper_notify *n, char **rpos)
static int parse_mvrp(char *sz, size_t len, struct mrpdhelper_notify *n)
{
/* format
- VIN VJO 1234 R=112233445566
+ VJO 1234 R=112233445566
len = 28
*/
if (len < 28)
@@ -142,13 +160,17 @@ static int parse_mvrp(char *sz, size_t len, struct mrpdhelper_notify *n)
if (parse_notification(&sz[1], n) < 0)
return -1;
- if (parse_state(&sz[5], n) < 0)
+ n->attrib = mrpdhelper_attribtype_mvrp;
+ if (sscanf(&sz[4], "%04x ", &n->u.v.vid) != 1)
return -1;
- n->attrib = mrpdhelper_attribtype_mvrp;
- if (sscanf(&sz[8], "%04x ", &n->u.v.vid) != 1)
+ if (parse_registrar(sz, n, NULL) < 0)
return -1;
- return parse_registrar(sz, n, NULL);
+
+ if (parse_app_state(sz, n) < 0)
+ return -1;
+
+ return parse_state(sz, n);
}
static int parse_msrp_string(char *sz, size_t len, struct mrpdhelper_notify *n)
@@ -209,7 +231,13 @@ static int parse_msrp(char *sz, size_t len, struct mrpdhelper_notify *n)
if (parse_msrp_string(&sz[4], len - 4, n) < 0)
return -1;
- return parse_registrar(sz, n, NULL);
+ if (parse_registrar(sz, n, NULL) < 0)
+ return -1;
+
+ if (parse_app_state(sz, n) < 0)
+ return -1;
+
+ return parse_state(sz, n);
}
@@ -231,13 +259,6 @@ static int parse_msrp_query(char *sz, size_t len, struct mrpdhelper_notify *n)
static int parse_mmrp(char *sz, size_t len, struct mrpdhelper_notify *n)
{
- /* format
- MIN MJO M=112233445566 R=112233445566
- len = 38
- */
- if (len < 38)
- return -1;
-
if (parse_notification(&sz[1], n) < 0)
return -1;