예제 #1
0
파일: mas.c 프로젝트: KpuBopy4ka/obexd-map
static void get_messages_listing_cb(void *session, int err,
		uint16_t size, gboolean newmsg,
		const struct messages_message *entry,
		void *user_data)
{
	struct mas_session *mas = user_data;

	if (err < 0 && err != -EAGAIN) {
		obex_object_set_io_flags(mas, G_IO_ERR, err);
		return;
	}

	if (!mas->nth_call) {
		g_string_append(mas->buffer, ML_BODY_BEGIN);
		mas->nth_call = TRUE;
	}

	if (!entry) {
		g_string_append(mas->buffer, ML_BODY_END);
		mas->finished = TRUE;

		goto proceed;
	}

	g_string_append(mas->buffer, "<msg");

	g_string_append_escaped_printf(mas->buffer, " handle=\"%s\"",
								entry->handle);

	if (entry->mask & PMASK_SUBJECT)
		g_string_append_escaped_printf(mas->buffer, " subject=\"%s\"",
				entry->subject);

	if (entry->mask & PMASK_DATETIME)
		g_string_append_escaped_printf(mas->buffer, " datetime=\"%s\"",
				entry->datetime);

	if (entry->mask & PMASK_SENDER_NAME)
		g_string_append_escaped_printf(mas->buffer,
						" sender_name=\"%s\"",
						entry->sender_name);

	if (entry->mask & PMASK_SENDER_ADDRESSING)
		g_string_append_escaped_printf(mas->buffer,
						" sender_addressing=\"%s\"",
						entry->sender_addressing);

	if (entry->mask & PMASK_REPLYTO_ADDRESSING)
		g_string_append_escaped_printf(mas->buffer,
						" replyto_addressing=\"%s\"",
						entry->replyto_addressing);

	if (entry->mask & PMASK_RECIPIENT_NAME)
		g_string_append_escaped_printf(mas->buffer,
						" recipient_name=\"%s\"",
						entry->recipient_name);

	if (entry->mask & PMASK_RECIPIENT_ADDRESSING)
		g_string_append_escaped_printf(mas->buffer,
						" recipient_addressing=\"%s\"",
						entry->recipient_addressing);

	if (entry->mask & PMASK_TYPE)
		g_string_append_escaped_printf(mas->buffer, " type=\"%s\"",
				entry->type);

	if (entry->mask & PMASK_RECEPTION_STATUS)
		g_string_append_escaped_printf(mas->buffer,
						" reception_status=\"%s\"",
						entry->reception_status);

	if (entry->mask & PMASK_SIZE)
		g_string_append_escaped_printf(mas->buffer, " size=\"%s\"",
				entry->size);

	if (entry->mask & PMASK_ATTACHMENT_SIZE)
		g_string_append_escaped_printf(mas->buffer,
						" attachment_size=\"%s\"",
						entry->attachment_size);

	if (entry->mask & PMASK_TEXT)
		g_string_append_escaped_printf(mas->buffer, " text=\"%s\"",
				yesorno(entry->text));

	if (entry->mask & PMASK_READ)
		g_string_append_escaped_printf(mas->buffer, " read=\"%s\"",
				yesorno(entry->read));

	if (entry->mask & PMASK_SENT)
		g_string_append_escaped_printf(mas->buffer, " sent=\"%s\"",
				yesorno(entry->sent));

	if (entry->mask & PMASK_PROTECTED)
		g_string_append_escaped_printf(mas->buffer, " protected=\"%s\"",
				yesorno(entry->protect));

	if (entry->mask & PMASK_PRIORITY)
		g_string_append_escaped_printf(mas->buffer, " priority=\"%s\"",
				yesorno(entry->priority));

	g_string_append(mas->buffer, "/>\n");

proceed:
	if (err != -EAGAIN)
		obex_object_set_io_flags(mas, G_IO_IN, 0);
}
예제 #2
0
파일: stackq.c 프로젝트: hisaos/fragments
void main(void) {

	int x = 0;			/* 変数x*/
	int i_index;			/* 配列初期化用のカウンタ*/
	int i_stop;			/* 数値入力時の取り消し判断用フラグ*/
	int i_temp;			/* pop, enqの返り値を退避しておく変数*/
	int i_com;			/* コマンド入力用変数*/
	int i_st_val[STACK_SIZE];	/* スタック用配列*/
	int i_qu_val[QUEUE_SIZE];	/* 待ち行列用配列*/
	int i_sp = STACK_SIZE;		/* スタックポインタ*/
	int i_tail = 0;			/* 待ち行列の最後尾を管理する*/
	int i_flag = -1;		/* 操作終了管理フラグ*/
	char c_buf[10];			/* コマンド入力用バッファ*/

	/* スタックと待ち行列の配列に0を代入して、初期化する。*/
	for(i_index = 0; i_index <= STACK_SIZE; i_index++)
		i_st_val[i_index] = 0;
	for(i_index = 0; i_index <= QUEUE_SIZE; i_index++)
		i_qu_val[i_index] = 0;

	while(i_flag) {			/* i_flagは終了を要求されるまでずっと-1*/

	i_stop = 0;

	printf("コマンド(1:PUSH 2:POP 3:ENQ 4:DEQ 5:Quit):");
	fgets(c_buf, sizeof(c_buf), stdin);

	/* 数値型に変換できないもの=文字を入力されたとき,ここではじく。*/
	if(atoi(c_buf) == 0) {
		printf("不正な入力です: %s\n", c_buf);
		continue;
		}
	/* 数字を入力されたとき,ここでそれを切り出す。*/
	sscanf(c_buf, "%d", &i_com);

	/* 数字によって処理が分岐。*/
	switch(i_com) {

	case 1:				/* pushが選択された時*/
		if(i_sp == 0)
			printf("スタックが一杯です。\n");
		else {
			printf("何をpushしますか?:");
			i_temp = digitin(&i_stop);
			/* digitinの処理で、取り消しフラグが立った場合,代入しない*/
			if(i_stop == 1)
				break;
			else
				push(&i_sp, i_temp, i_st_val);
		}
		break;
	case 2:				/* popが選択された時*/

	if(i_sp == STACK_SIZE)
		printf("スタックは空です。\n");
	else {
		i_temp = pop(&i_sp, i_st_val);

		printf("この値をxに格納しますか?(yes=0,no=1):");
		if(yesorno() == 1)
			x = i_temp;

		printf("この値をpushまたはenqしますか?(yes=0,no=1):");
		if(yesorno() == 1) {
			if(pushorenq() == 1)
				enq(&i_tail, i_temp, i_qu_val);
			else
				push(&i_sp, i_temp, i_st_val);
		}
	}

		break;
	case 3:				/* enqが選択された時*/
		if(i_tail == QUEUE_SIZE)
			printf("待ち行列が一杯です。\n");
		else {
			printf("何をenqしますか?:");
			i_temp = digitin(&i_stop);
			
			/* digitinの処理で、取り消しフラグが立った場合,代入しない*/
			if(i_stop == 1)
				break;
			else
				enq(&i_tail, i_temp, i_qu_val);
		}
		break;
	case 4:				/* deqが選択された時*/

	if(i_tail == 0)
		printf("待ち行列は空です。\n");
	else {
		i_temp = deq(&i_tail, i_qu_val);

		printf("この値をxに格納しますか?(yes=0,no=1):");
		if(yesorno() == 1)
			x = i_temp;

		printf("この値をpushまたはenqしますか?(yes=0,no=1):");
		if(yesorno() == 1) {
			if(pushorenq() == 1)
				enq(&i_tail, i_temp, i_qu_val);
			else
				push(&i_sp, i_temp, i_st_val);
		}
	}
		break;
	case 5:				/* 終了が要求されたとき*/
		printf("終了しました。\n");
		i_flag++;
		exit(0);
	default:
	/*1-5にない数字の場合,ここではじかれる。*/
		printf("不正な入力です: %d\n", i_com);
		}

	if(status(x, i_sp, i_tail, i_st_val, i_qu_val) == 0)	/* 関数statusが正常に処理を終了したら0を返す。*/
		printf("準備完了\n");
	else {
		printf("異常終了\n");				/* 関数statusが0を返せなかったとき、異常終了とする。*/
		exit(0);
		}
	}
}
예제 #3
0
static void get_messages_listing_cb(void *session, int err, uint16_t size,
					gboolean newmsg,
					const struct messages_message *entry,
					void *user_data)
{
	struct mas_session *mas = user_data;
	uint16_t max = 1024;
	gchar *mse_time;

	if (err < 0 && err != -EAGAIN) {
		obex_object_set_io_flags(mas, G_IO_ERR, err);
		return;
	}

	if (mas->inparams)
		g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT,
									&max);

	if (max == 0) {
		if (!entry)
			mas->finished = TRUE;

		goto proceed;
	}

	if (!mas->nth_call) {
		g_string_append(mas->buffer, ML_BODY_BEGIN);
		mas->nth_call = TRUE;
	}

	if (!entry) {
		g_string_append(mas->buffer, ML_BODY_END);
		mas->finished = TRUE;

		goto proceed;
	}

	g_string_append(mas->buffer, "<msg");

	g_string_append_escaped_printf(mas->buffer, " handle=\"%s\"",
								entry->handle);

	if (entry->mask & PMASK_SUBJECT)
		g_string_append_escaped_printf(mas->buffer, " subject=\"%s\"",
				entry->subject);

	if (entry->mask & PMASK_DATETIME)
		g_string_append_escaped_printf(mas->buffer, " datetime=\"%s\"",
				entry->datetime);

	if (entry->mask & PMASK_SENDER_NAME)
		g_string_append_escaped_printf(mas->buffer,
						" sender_name=\"%s\"",
						entry->sender_name);

	if (entry->mask & PMASK_SENDER_ADDRESSING)
		g_string_append_escaped_printf(mas->buffer,
						" sender_addressing=\"%s\"",
						entry->sender_addressing);

	if (entry->mask & PMASK_REPLYTO_ADDRESSING)
		g_string_append_escaped_printf(mas->buffer,
						" replyto_addressing=\"%s\"",
						entry->replyto_addressing);

	if (entry->mask & PMASK_RECIPIENT_NAME)
		g_string_append_escaped_printf(mas->buffer,
						" recipient_name=\"%s\"",
						entry->recipient_name);

	if (entry->mask & PMASK_RECIPIENT_ADDRESSING)
		g_string_append_escaped_printf(mas->buffer,
						" recipient_addressing=\"%s\"",
						entry->recipient_addressing);

	if (entry->mask & PMASK_TYPE)
		g_string_append_escaped_printf(mas->buffer, " type=\"%s\"",
				entry->type);

	if (entry->mask & PMASK_RECEPTION_STATUS)
		g_string_append_escaped_printf(mas->buffer,
						" reception_status=\"%s\"",
						entry->reception_status);

	if (entry->mask & PMASK_SIZE)
		g_string_append_escaped_printf(mas->buffer, " size=\"%s\"",
				entry->size);

	if (entry->mask & PMASK_ATTACHMENT_SIZE)
		g_string_append_escaped_printf(mas->buffer,
						" attachment_size=\"%s\"",
						entry->attachment_size);

	if (entry->mask & PMASK_TEXT)
		g_string_append_escaped_printf(mas->buffer, " text=\"%s\"",
				yesorno(entry->text));

	if (entry->mask & PMASK_READ)
		g_string_append_escaped_printf(mas->buffer, " read=\"%s\"",
				yesorno(entry->read));

	if (entry->mask & PMASK_SENT)
		g_string_append_escaped_printf(mas->buffer, " sent=\"%s\"",
				yesorno(entry->sent));

	if (entry->mask & PMASK_PROTECTED)
		g_string_append_escaped_printf(mas->buffer, " protected=\"%s\"",
				yesorno(entry->protect));

	if (entry->mask & PMASK_PRIORITY)
		g_string_append_escaped_printf(mas->buffer, " priority=\"%s\"",
				yesorno(entry->priority));

	g_string_append(mas->buffer, "/>\n");

proceed:
	if (!entry) {
		mas->outparams = g_obex_apparam_set_uint16(mas->outparams,
						MAP_AP_MESSAGESLISTINGSIZE,
						size);
		mas->outparams = g_obex_apparam_set_uint8(mas->outparams,
						MAP_AP_NEWMESSAGE,
						newmsg ? 1 : 0);
		/* Response to report the local time of MSE */
		mse_time = get_mse_timestamp();
		if (mse_time) {
			g_obex_apparam_set_string(mas->outparams,
						MAP_AP_MSETIME, mse_time);
			g_free(mse_time);
		}
	}

	if (err != -EAGAIN)
		obex_object_set_io_flags(mas, G_IO_IN, 0);
}