亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mbus.c

?? MPEG-4編解碼的實現(包括MPEG4視音頻編解碼)
?? C
?? 第 1 頁 / 共 3 頁
字號:

#define mbus_qmsgf(m, dest, reliable, cmnd, format, var) \
{ \
char buffer[MBUS_BUF_SIZE]; \
mbus_validate(m); \
snprintf(buffer, MBUS_BUF_SIZE, format, var); \
mbus_qmsg(m, dest, cmnd, buffer, reliable); \
}

#if 0
void mbus_qmsgf(struct mbus *m, const char *dest, int reliable, const char *cmnd, const char *format, ...)
{
	/* This is a wrapper around mbus_qmsg() which does a printf() style format into  */
	/* a buffer. Saves the caller from having to a a malloc(), write the args string */
	/* and then do a free(), and also saves worring about overflowing the buffer, so */
	/* removing a common source of bugs!                                             */
	char	buffer[MBUS_BUF_SIZE];
	va_list	ap;

	mbus_validate(m);
	va_start(ap, format);
#ifdef WIN32
        _vsnprintf(buffer, MBUS_BUF_SIZE, format, ap);
#else
        vsnprintf(buffer, MBUS_BUF_SIZE, format, ap);
#endif
	va_end(ap);
	mbus_qmsg(m, dest, cmnd, buffer, reliable);
}
#endif

int mbus_recv(struct mbus *m, void *data, struct timeval *timeout)
{
	char			*auth, *ver, *src, *dst, *ack, *r, *cmd, *param, *npos;
	char	 		 buffer[MBUS_BUF_SIZE];
	int	 		 buffer_len, seq, a, rx, ts, authlen, loop_count;
	char	 		 ackbuf[MBUS_ACK_BUF_SIZE];
	char	 		 digest[16];
	unsigned char		 initVec[8] = {0,0,0,0,0,0,0,0};
	struct timeval		 t;
	struct mbus_parser	*mp, *mp2;

	mbus_validate(m);

	rx = FALSE;
	loop_count = 0;
	while (loop_count++ < 10) {
		memset(buffer, 0, MBUS_BUF_SIZE);
                ASSERT(m->s != NULL);
		udp_fd_zero();
		udp_fd_set(m->s);
		t.tv_sec  = timeout->tv_sec;
		t.tv_usec = timeout->tv_usec;
                if ((udp_select(&t) > 0) && udp_fd_isset(m->s)) {
			buffer_len = udp_recv(m->s, buffer, MBUS_BUF_SIZE);
			if (buffer_len > 0) {
				rx = TRUE;
			} else {
				return rx;
			}
		} else {
			return FALSE;
		}

		if (m->encrkey != NULL) {
			/* Decrypt the message... */
			if ((buffer_len % 8) != 0) {
				debug_msg("Encrypted message not a multiple of 8 bytes in length\n");
				continue;
			}
			memcpy(mb_cryptbuf, buffer, buffer_len);
			memset(initVec, 0, 8);
			qfDES_CBC_d(m->encrkey, mb_cryptbuf, buffer_len, initVec);
			memcpy(buffer, mb_cryptbuf, buffer_len);
		}

		/* Sanity check that this is a vaguely sensible format message... Should prevent */
		/* problems if we're fed complete garbage, but won't prevent determined hackers. */
		if (strncmp(buffer + MBUS_AUTH_LEN + 1, "mbus/1.0", 8) != 0) {
			continue;
		}

		mp = mbus_parse_init(buffer);
		/* remove trailing 0 bytes */
		npos = (char *) strchr(buffer,'\0');
		if(npos!=NULL) {
			buffer_len=npos-buffer;
		}
		/* Parse the authentication header */
		if (!mbus_parse_sym(mp, &auth)) {
			debug_msg("Failed to parse authentication header\n");
			mbus_parse_done(mp);
			continue;
		}

		/* Check that the packet authenticates correctly... */
		authlen = strlen(auth);
		hmac_md5(buffer + authlen + 1, buffer_len - authlen - 1, m->hashkey, m->hashkeylen, digest);
		base64encode(digest, 12, ackbuf, 16);
		if ((strlen(auth) != 16) || (strncmp(auth, ackbuf, 16) != 0)) {
			debug_msg("Failed to authenticate message...\n");
			mbus_parse_done(mp);
			continue;
		}

		/* Parse the header */
		if (!mbus_parse_sym(mp, &ver)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed version (1): %s\n",ver);
			continue;
		}
		if (strcmp(ver, "mbus/1.0") != 0) {
			mbus_parse_done(mp);
			debug_msg("Parser failed version (2): %s\n",ver);
			continue;
		}
		if (!mbus_parse_int(mp, &seq)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed seq\n");
			continue;
		}
		if (!mbus_parse_int(mp, &ts)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed ts\n");
			continue;
		}
		if (!mbus_parse_sym(mp, &r)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed reliable\n");
			continue;
		}
		if (!mbus_parse_lst(mp, &src)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed src\n");
			continue;
		}
		if (!mbus_parse_lst(mp, &dst)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed dst\n");
			continue;
		}
		if (!mbus_parse_lst(mp, &ack)) {
			mbus_parse_done(mp);
			debug_msg("Parser failed ack\n");
			continue;
		}

		store_other_addr(m, src);

		/* Check if the message was addressed to us... */
		if (mbus_addr_match(m->addr, dst)) {
			/* ...if so, process any ACKs received... */
			mp2 = mbus_parse_init(ack);
			while (mbus_parse_int(mp2, &a)) {
				if (mbus_waiting_ack(m)) {
					if (m->waiting_ack->seqnum == a) {
						while (m->waiting_ack->num_cmds > 0) {
							m->waiting_ack->num_cmds--;
							xfree(m->waiting_ack->cmd_list[m->waiting_ack->num_cmds]);
							xfree(m->waiting_ack->arg_list[m->waiting_ack->num_cmds]);
						}
						xfree(m->waiting_ack->dest);
						xfree(m->waiting_ack);
						m->waiting_ack = NULL;
					} else {
						debug_msg("Got ACK %d but wanted %d\n", a, m->waiting_ack->seqnum);
					}
				} else {
					debug_msg("Got ACK %d but wasn't expecting it\n", a);
				}
			}
			mbus_parse_done(mp2);
			/* ...if an ACK was requested, send one... */
			if (strcmp(r, "R") == 0) {
				char 		*newsrc = (char *) xmalloc(strlen(src) + 3);
				struct timeval	 t;

				sprintf(newsrc, "(%s)", src);	/* Yes, this is a kludge. */
				gettimeofday(&t, NULL);
				mb_header(++m->seqnum, (int) t.tv_sec, 'U', m->addr, newsrc, seq);
				mb_send(m);
				xfree(newsrc);
			} else if (strcmp(r, "U") == 0) {
				/* Unreliable message.... not need to do anything */
			} else {
				debug_msg("Message with invalid reliability field \"%s\" ignored\n", r);
			}
			/* ...and process the commands contained in the message */
			while (mbus_parse_sym(mp, &cmd)) {
				if (mbus_parse_lst(mp, &param)) {
					char 		*newsrc = (char *) xmalloc(strlen(src) + 3);
					sprintf(newsrc, "(%s)", src);	/* Yes, this is a kludge. */
					/* Finally, we snoop on the message we just passed to the application, */
					/* to do housekeeping of our list of known mbus sources...             */
					if (strcmp(cmd, "mbus.bye") == 0) {
						remove_other_addr(m, newsrc);
					} 
					if (strcmp(cmd, "mbus.hello") == 0) {
						/* Mark this source as activ. We remove dead sources in mbus_heartbeat */
						store_other_addr(m, newsrc);
					}
					m->cmd_handler(newsrc, cmd, param, data);
					xfree(newsrc);
				} else {
					debug_msg("Unable to parse mbus command:\n");
					debug_msg("cmd = %s\n", cmd);
					debug_msg("arg = %s\n", param);
					break;
				}
			}
		}
		mbus_parse_done(mp);
	}
	return rx;
}

#define RZ_HANDLE_WAITING 1
#define RZ_HANDLE_GO      2

struct mbus_rz {
	char		*peer;
	char		*token;
	struct mbus	*m;
	void		*data;
	int		 mode;
	void (*cmd_handler)(char *src, char *cmd, char *args, void *data);
};

static void rz_handler(char *src, char *cmd, char *args, void *data)
{
	struct mbus_rz		*r = (struct mbus_rz *) data;
	struct mbus_parser	*mp;

	if ((r->mode == RZ_HANDLE_WAITING) && (strcmp(cmd, "mbus.waiting") == 0)) {
		char	*t;

		mp = mbus_parse_init(args);
		mbus_parse_str(mp, &t);
		if (strcmp(mbus_decode_str(t), r->token) == 0) {
                        if (r->peer != NULL) xfree(r->peer);
			r->peer = xstrdup(src);
		}
		mbus_parse_done(mp);
	} else if ((r->mode == RZ_HANDLE_GO) && (strcmp(cmd, "mbus.go") == 0)) {
		char	*t;

		mp = mbus_parse_init(args);
		mbus_parse_str(mp, &t);
		if (strcmp(mbus_decode_str(t), r->token) == 0) {
                        if (r->peer != NULL) xfree(r->peer);
			r->peer = xstrdup(src);
		}
		mbus_parse_done(mp);
	} else {
		r->cmd_handler(src, cmd, args, r->data);
	}
}

char *mbus_rendezvous_waiting(struct mbus *m, char *addr, char *token, void *data)
{
	/* Loop, sending mbus.waiting(token) to "addr", until we get mbus.go(token) */
	/* back from our peer. Any other mbus commands received whilst waiting are  */
	/* processed in the normal manner, as if mbus_recv() had been called.       */
	char		*token_e, *peer;
	struct timeval	 timeout;
	struct mbus_rz	*r;

	mbus_validate(m);

	r = (struct mbus_rz *) xmalloc(sizeof(struct mbus_rz));
	r->peer        = NULL;
	r->token       = token;
	r->m           = m;
	r->data        = data;
	r->mode        = RZ_HANDLE_GO;
	r->cmd_handler = m->cmd_handler;
	m->cmd_handler = rz_handler;
	token_e        = mbus_encode_str(token);
	while (r->peer == NULL) {
		timeout.tv_sec  = 0;
		timeout.tv_usec = 100000;
		mbus_heartbeat(m, 1);
		mbus_qmsgf(m, addr, FALSE, "mbus.waiting", "%s", token_e);
		mbus_send(m);
		mbus_recv(m, r, &timeout);
		mbus_retransmit(m);
	}
	m->cmd_handler = r->cmd_handler;
	peer = r->peer;
	xfree(r);
	xfree(token_e);
	return peer;
}

char *mbus_rendezvous_go(struct mbus *m, char *token, void *data)
{
	/* Wait until we receive mbus.waiting(token), then send mbus.go(token) back to   */
	/* the sender of that message. Whilst waiting, other mbus commands are processed */
	/* in the normal manner as if mbus_recv() had been called.                       */
	char		*token_e, *peer;
	struct timeval	 timeout;
	struct mbus_rz	*r;

	mbus_validate(m);

	r = (struct mbus_rz *) xmalloc(sizeof(struct mbus_rz));
	r->peer        = NULL;
	r->token       = token;
	r->m           = m;
	r->data        = data;
	r->mode        = RZ_HANDLE_WAITING;
	r->cmd_handler = m->cmd_handler;
	m->cmd_handler = rz_handler;
	token_e        = mbus_encode_str(token);
	while (r->peer == NULL) {
		timeout.tv_sec  = 0;
		timeout.tv_usec = 100000;
		mbus_heartbeat(m, 1);
		mbus_send(m);
		mbus_recv(m, r, &timeout);
		mbus_retransmit(m);
	}

	mbus_qmsgf(m, r->peer, TRUE, "mbus.go", "%s", token_e);
	do {
		mbus_heartbeat(m, 1);
		mbus_retransmit(m);
		mbus_send(m);
		timeout.tv_sec  = 0;
		timeout.tv_usec = 100000;
		mbus_recv(m, r, &timeout);
	} while (!mbus_sent_all(m));

	m->cmd_handler = r->cmd_handler;
	peer = r->peer;
	xfree(r);
	xfree(token_e);
	return peer;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
风流少妇一区二区| 91精品国产欧美一区二区成人| 亚洲综合精品久久| 一区二区三区四区高清精品免费观看| 亚洲一区在线观看网站| 日韩精品一卡二卡三卡四卡无卡| 久久 天天综合| 99久久精品免费观看| 欧美日本一区二区| 国产日产亚洲精品系列| 亚洲第一搞黄网站| 韩国欧美国产1区| av资源站一区| av在线不卡免费看| 69堂精品视频| 中文字幕亚洲欧美在线不卡| 国产精品美女久久久久高潮 | 国产成人免费xxxxxxxx| 国产一区二区调教| 欧美性色黄大片手机版| 国产喂奶挤奶一区二区三区| 婷婷综合另类小说色区| 国产91精品免费| 欧美一级爆毛片| 亚洲日本一区二区| 国产高清一区日本| 日韩视频免费观看高清在线视频| 亚洲天堂a在线| 国产精品一级片| 337p亚洲精品色噜噜噜| 亚洲日本中文字幕区| 国产激情一区二区三区桃花岛亚洲| 精品视频资源站| 亚洲精选一二三| eeuss鲁片一区二区三区在线观看| 日韩欧美一区二区三区在线| 亚洲国产视频直播| 97se狠狠狠综合亚洲狠狠| 久久久精品国产99久久精品芒果 | 亚洲电影一级黄| 99精品在线观看视频| 国产喷白浆一区二区三区| 青青国产91久久久久久| 色综合婷婷久久| 亚洲欧美另类图片小说| 欧美三级日本三级少妇99| 日韩不卡一二三区| 日韩欧美一区在线| 国产寡妇亲子伦一区二区| 国产精品福利在线播放| 欧美自拍丝袜亚洲| 日韩一区欧美二区| 精品国产99国产精品| 国产91在线|亚洲| 亚洲日本护士毛茸茸| 欧美日韩一区二区电影| 久久精品国产久精国产| 国产日韩欧美精品电影三级在线| 99久久国产免费看| 无码av免费一区二区三区试看| 精品精品欲导航| 成人黄页毛片网站| 一区二区成人在线视频| 日韩午夜激情视频| 不卡的av电影| 日精品一区二区三区| 久久精品视频一区二区三区| 91蜜桃婷婷狠狠久久综合9色| 婷婷亚洲久悠悠色悠在线播放| 久久夜色精品国产噜噜av| 成人18视频日本| 日韩国产在线观看一区| 国产精品丝袜91| 欧美日韩国产不卡| 成人动漫中文字幕| 日韩电影免费在线看| 中文字幕第一页久久| 欧美日韩免费在线视频| 国产精品一色哟哟哟| 亚洲大片在线观看| 欧美国产97人人爽人人喊| 欧美日韩国产乱码电影| av资源站一区| 国模少妇一区二区三区| 亚洲成年人影院| 中文字幕精品一区二区精品绿巨人 | 亚洲女性喷水在线观看一区| 欧美一区二区三区免费观看视频| 99精品视频在线观看| 蜜臀av一区二区在线免费观看| 国产精品福利av| 久久久青草青青国产亚洲免观| 欧美视频中文字幕| 国产精华液一区二区三区| 婷婷综合在线观看| 亚洲在线视频网站| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 午夜伊人狠狠久久| 国产精品高潮呻吟| 久久久久久一二三区| 欧美一区2区视频在线观看| 欧美午夜精品一区二区三区| 成人深夜视频在线观看| 国产真实乱对白精彩久久| 青青草97国产精品免费观看| 天天综合色天天综合| 一区二区三区日韩在线观看| 中文字幕日韩欧美一区二区三区| 久久久久久日产精品| 精品国产乱码久久久久久久久 | 理论电影国产精品| 视频一区国产视频| 亚洲一本大道在线| 国产成人一区在线| 国产一区二区在线观看免费| 激情综合色综合久久| 九色|91porny| 国产毛片精品视频| 国产一本一道久久香蕉| 国产在线精品一区二区不卡了 | 国产蜜臀97一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 久久久久9999亚洲精品| 日本一区二区三区久久久久久久久不 | 国产夫妻精品视频| 国产精选一区二区三区| 国产精品综合一区二区| 国产不卡视频一区二区三区| 成人免费视频网站在线观看| 北岛玲一区二区三区四区| 91美女在线视频| 欧美日韩一本到| 日韩一二三区视频| 久久久www成人免费无遮挡大片| 国产亚洲欧美激情| 中文字幕在线不卡| 亚洲超碰精品一区二区| 久久精品国产第一区二区三区| 国产乱码精品一区二区三区五月婷 | 麻豆传媒一区二区三区| 国产一区二区在线视频| 91在线一区二区| 欧美日韩国产系列| 久久综合成人精品亚洲另类欧美| 欧美国产在线观看| 亚洲综合清纯丝袜自拍| 免费欧美高清视频| 不卡的av电影在线观看| 欧美老人xxxx18| 国产天堂亚洲国产碰碰| 一区二区三区高清| 国内精品免费**视频| 91丨porny丨首页| 91精品国产日韩91久久久久久| 国产亚洲欧美日韩在线一区| 亚洲综合av网| 高清成人免费视频| 欧美日韩成人一区| 久久精品免费在线观看| 亚洲动漫第一页| 国产91露脸合集magnet | 国产调教视频一区| 香港成人在线视频| 成人性生交大片免费看视频在线| 欧美日韩三级一区二区| 亚洲国产精品二十页| 喷水一区二区三区| 色综合久久88色综合天天免费| 久久婷婷综合激情| 香蕉成人啪国产精品视频综合网| 成人午夜在线免费| 日韩欧美国产高清| 一区二区三区国产精华| 懂色av一区二区三区免费看| 91精品婷婷国产综合久久| 亚洲精品高清视频在线观看| 懂色av中文一区二区三区| 日韩三级在线免费观看| 亚洲高清免费视频| 97国产精品videossex| 欧美激情一区二区在线| 久久超碰97中文字幕| 欧美喷潮久久久xxxxx| 亚洲免费成人av| caoporm超碰国产精品| 久久先锋影音av| 国内外成人在线| 亚洲精品在线免费观看视频| 日本aⅴ精品一区二区三区| 欧美性感一类影片在线播放| 亚洲另类春色校园小说| 成人免费av网站| 国产精品福利一区二区三区| 成人免费视频视频| 中文字幕电影一区| 东方aⅴ免费观看久久av| 国产女人18水真多18精品一级做| 国产精品 欧美精品| 国产亚洲欧洲997久久综合| 国产精品综合在线视频|