예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
파일: pbap.c 프로젝트: ghent360/bluez
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, &param->order);
	g_obex_apparam_get_uint8(apparam, SEARCHATTRIB_TAG,
						&param->searchattrib);
	g_obex_apparam_get_uint8(apparam, FORMAT_TAG, &param->format);
	g_obex_apparam_get_uint16(apparam, MAXLISTCOUNT_TAG,
						&param->maxlistcount);
	g_obex_apparam_get_uint16(apparam, LISTSTARTOFFSET_TAG,
						&param->liststartoffset);
	g_obex_apparam_get_uint64(apparam, FILTER_TAG, &param->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);
}
예제 #6
0
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);
}