示例#1
0
/*
 * -----------------------------------------------------------
 * Function:	IPC_recieve
 * Description:	Processing IPC messages
 * Input:		max_msg_count:	max number processed messages per call
 * Output:		number of processed messages
 * -----------------------------------------------------------
 */
UINT32 CODE_DEFAULT IPC_recieve(UINT32 max_msg_count, IPC_trns_priority_e pri)
{
	UINT32		ix;
	VCHAR		*ipcData;
	HAL_INTERRUPT_SAVE_AREA;

	for (ix=0; ix<max_msg_count; ix++)
	{
#if 0 // defined(UNIX) || defined(WIN32)
		ipcData = NULL; // get message
		ASSERT (FALSE);
#else
		HAL_INTERRUPT_DISABLE;
		ipcData = IPC_trns_fifo_buf_read(IPC_OwnNode, pri);
		HAL_INTERRUPT_RESTORE;
#endif

		if (ipcData)
		{
			//IPC_msg_handler(ipcData);
			handle_incoming_packet(ipcData, IPC_OwnNode, pri);
		}
		else
		{
			break; /* no more messages, queue empty */
		}
	}
	return ix;
}
示例#2
0
int 
ReliSock::get_bytes(void *dta, int max_sz)
{
	int		bytes, length;
    unsigned char * data = 0;

	ignore_next_decode_eom = FALSE;

	while (!rcv_msg.ready) {
		if (!handle_incoming_packet()){
			return FALSE;
		}
	}

	bytes = rcv_msg.buf.get(dta, max_sz);

	if (bytes > 0) {
            if (get_encryption()) {
                unwrap((unsigned char *) dta, bytes, data, length);
                memcpy(dta, data, bytes);
                free(data);
            }
            _bytes_recvd += bytes;
        }
        
	return bytes;
}
示例#3
0
int ReliSock::peek( char &c)
{
	while (!rcv_msg.ready) {
		if (!handle_incoming_packet()) {
			return FALSE;
		}
	}

	return rcv_msg.buf.peek(c);
}
示例#4
0
int ReliSock::get_ptr( void *&ptr, char delim)
{
	while (!rcv_msg.ready){
		if (!handle_incoming_packet()) {
			return FALSE;
		}
	}

	return rcv_msg.buf.get_tmp(ptr, delim);
}