/* * ----------------------------------------------------------- * 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; }
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; }
int ReliSock::peek( char &c) { while (!rcv_msg.ready) { if (!handle_incoming_packet()) { return FALSE; } } return rcv_msg.buf.peek(c); }
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); }