static void *msg_listing_open(const char *name, int oflag, mode_t mode, void *driver_data, size_t *size, int *err) { struct mas_session *mas = driver_data; struct messages_filter filter = { 0, }; /* 1024 is the default when there was no MaxListCount sent */ uint16_t max = 1024; uint16_t offset = 0; /* If MAP client does not specify the subject length, then subject_len = 0 and subject should be sent unaltered. */ uint8_t subject_len = 0; DBG(""); if (oflag != O_RDONLY) { *err = -EBADR; return NULL; } if (!mas->inparams) goto done; g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT, &max); g_obex_apparam_get_uint16(mas->inparams, MAP_AP_STARTOFFSET, &offset); g_obex_apparam_get_uint8(mas->inparams, MAP_AP_SUBJECTLENGTH, &subject_len); g_obex_apparam_get_uint32(mas->inparams, MAP_AP_PARAMETERMASK, &filter.parameter_mask); g_obex_apparam_get_uint8(mas->inparams, MAP_AP_FILTERMESSAGETYPE, &filter.type); filter.period_begin = g_obex_apparam_get_string(mas->inparams, MAP_AP_FILTERPERIODBEGIN); filter.period_end = g_obex_apparam_get_string(mas->inparams, MAP_AP_FILTERPERIODEND); g_obex_apparam_get_uint8(mas->inparams, MAP_AP_FILTERREADSTATUS, &filter.read_status); filter.recipient = g_obex_apparam_get_string(mas->inparams, MAP_AP_FILTERRECIPIENT); filter.originator = g_obex_apparam_get_string(mas->inparams, MAP_AP_FILTERORIGINATOR); g_obex_apparam_get_uint8(mas->inparams, MAP_AP_FILTERPRIORITY, &filter.priority); done: *err = messages_get_messages_listing(mas->backend_data, name, max, offset, subject_len, &filter, get_messages_listing_cb, mas); mas->buffer = g_string_new(""); if (*err < 0) return NULL; else return mas; }
static void *notification_registration_open(const char *name, int oflag, mode_t mode, void *driver_data, size_t *size, int *err) { struct mas_session *mas = driver_data; uint8_t status; DBG(""); if (O_RDONLY) { *err = -EBADR; return NULL; } if (!g_obex_apparam_get_uint8(mas->inparams, MAP_AP_NOTIFICATIONSTATUS, &status)) { *err = -EBADR; return NULL; } mas->notification_status = status; mas->finished = TRUE; *err = 0; return mas; }
static void *message_set_status_open(const char *name, int oflag, mode_t mode, void *driver_data, size_t *size, int *err) { struct mas_session *mas = driver_data; uint8_t indicator; uint8_t value; DBG(""); if (oflag == O_RDONLY) { *err = -EBADR; return NULL; } if (!g_obex_apparam_get_uint8(mas->inparams, MAP_AP_STATUSINDICATOR, &indicator)) { *err = -EBADR; return NULL; } if (!g_obex_apparam_get_uint8(mas->inparams, MAP_AP_STATUSVALUE, &value)) { *err = -EBADR; return NULL; } if (indicator == READ_STATUS_REQ) *err = messages_set_read(mas->backend_data, name, value, set_status_cb, mas); else if (indicator == DELETE_STATUS_REQ) *err = messages_set_delete(mas->backend_data, name, value, set_status_cb, mas); else *err = -EBADR; if (*err < 0) return NULL; return mas; }
static struct apparam_field *parse_aparam(const uint8_t *buffer, uint32_t hlen) { GObexApparam *apparam; struct apparam_field *param; apparam = g_obex_apparam_decode(buffer, hlen); if (apparam == NULL) return NULL; param = g_new0(struct apparam_field, 1); /* * As per spec when client doesn't include MAXLISTCOUNT_TAG then it * should be assume as Maximum value in vcardlisting 65535 */ param->maxlistcount = UINT16_MAX; g_obex_apparam_get_uint8(apparam, ORDER_TAG, ¶m->order); g_obex_apparam_get_uint8(apparam, SEARCHATTRIB_TAG, ¶m->searchattrib); g_obex_apparam_get_uint8(apparam, FORMAT_TAG, ¶m->format); g_obex_apparam_get_uint16(apparam, MAXLISTCOUNT_TAG, ¶m->maxlistcount); g_obex_apparam_get_uint16(apparam, LISTSTARTOFFSET_TAG, ¶m->liststartoffset); g_obex_apparam_get_uint64(apparam, FILTER_TAG, ¶m->filter); param->searchval = g_obex_apparam_get_string(apparam, SEARCHVALUE_TAG); DBG("o %x sa %x sv %s fil %" G_GINT64_MODIFIER "x for %x max %x off %x", param->order, param->searchattrib, param->searchval, param->filter, param->format, param->maxlistcount, param->liststartoffset); g_obex_apparam_free(apparam); return param; }
static void test_apparam_get_uint8(void) { GObexApparam *apparam; guint8 data; gboolean ret; apparam = parse_and_decode(tag_uint8, sizeof(tag_uint8)); ret = g_obex_apparam_get_uint8(apparam, TAG_U8, &data); g_assert(ret == TRUE); g_assert(data == 0x01); g_obex_apparam_free(apparam); }
static void *event_report_open(const char *name, int oflag, mode_t mode, void *driver_data, size_t *size, int *err) { struct mns_session *mns = driver_data; DBG(""); g_obex_apparam_get_uint8(mns->inparams, MAP_AP_MASINSTANCEID, &mns->mas_instance_id); mns->buffer = g_string_new(""); if (err != NULL) *err = 0; return mns; }
static void test_apparam_get_multi(void) { GObexApparam *apparam; char *string; uint8_t data8; uint16_t data16; uint32_t data32; uint64_t data64; gboolean ret; apparam = g_obex_apparam_decode(tag_multi, sizeof(tag_multi)); g_assert(apparam != NULL); ret = g_obex_apparam_get_uint8(apparam, TAG_U8, &data8); g_assert(ret == TRUE); g_assert(data8 == 0x01); ret = g_obex_apparam_get_uint16(apparam, TAG_U16, &data16); g_assert(ret == TRUE); g_assert(data16 == 0x0102); ret = g_obex_apparam_get_uint32(apparam, TAG_U32, &data32); g_assert(ret == TRUE); g_assert(data32 == 0x01020304); ret = g_obex_apparam_get_uint64(apparam, TAG_U64, &data64); g_assert(ret == TRUE); g_assert(data64 == 0x0102030405060708); string = g_obex_apparam_get_string(apparam, TAG_STRING); g_assert(string != NULL); g_assert_cmpstr(string, ==, "ABC"); g_free(string); g_obex_apparam_free(apparam); }