Just to answer myself in case anyone stumbles across this in the future. I was on the right track, but I think there are null characters before the text payload which was tricking printf. In the end I managed to work it out and came up with this: char *temp = (char*)data+4; Which skips the 1st few bytes of the payload.....no idea what they are, but skipping 4 bytes takes you straight to the start of the text part that you send with notify. > -----Original Message----- > From: ceph-users [mailto:ceph-users-bounces@xxxxxxxxxxxxxx] On Behalf Of Nick Fisk > Sent: 17 August 2016 21:49 > To: 'ceph-users' <ceph-users@xxxxxxxxxxxxxx> > Subject: Reading payload from rados_watchcb2_t callback > > Hi All, > > I'm writing a small piece of code to call fsfreeze/unfreeze that can be invoked by a RADOS notify. I have the basic watch/notify > functionality working but I need to be able to determine if the notify message is to freeze or unfreeze, or maybe something > completely unrelated. > > I'm looking at the rados_watchcb2_t callback and can see that the data payload is returned as a void pointer. This is where it all starts > to go a little pear shaped for my basic C skills. I think I have to cast the pointer to a (char *) but I still can't seem to get anything useful > from it. > > I've been following some of the tests in the Ceph source and they seem to use some sort of typedef called a bufferlist, is this what I > need to try and look into? > > Does anyone have any pointers (excuse the pun) as to how I would read the text part of the payload from it? > > void watch_notify2_cb(void *arg, uint64_t notify_id, uint64_t cookie, uint64_t notifier_gid, void *data, size_t data_len) > > Many Thanks, > Nick > > _______________________________________________ > ceph-users mailing list > ceph-users@xxxxxxxxxxxxxx > http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com _______________________________________________ ceph-users mailing list ceph-users@xxxxxxxxxxxxxx http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com