int SCI_Filter_upload(int filter_id, sci_group_t group, int num_bufs, void *bufs[], int sizes[]) { if (gCtrlBlock->getMyRole() == CtrlBlock::INVALID) return SCI_ERR_UNINTIALIZED; if (gCtrlBlock->getMyRole() == CtrlBlock::BACK_END) { return SCI_ERR_INVALID_CALLER; } try { Filter *filter = NULL; if (filter_id != SCI_FILTER_NULL) { filter = gCtrlBlock->getFilterList()->getFilter(filter_id); } int curFilterID = gCtrlBlock->getFilterProcessor()->getCurFilterID(); Message *msg = new Message(); msg->build(curFilterID, group, num_bufs, (char **)bufs, sizes, Message::DATA); if (filter) { sci_exflag_t exflag = {SCI_NORMAL, NULL}; filter->input(group, msg->getContentBuf(), msg->getContentLen(), &exflag); delete msg; } else { gCtrlBlock->getFilterProcessor()->deliever(msg); } } catch (Exception &e) { return SCI_ERR_EXCEPTION; } catch (std::bad_alloc) { return SCI_ERR_NO_MEM; } return SCI_SUCCESS; }