.\"Copyright 2008-2010 IBM Corp.
.TH SCI_Filter_upload 3 "Dec 4, 2009" "1.0.0" "SCI"

.SH NAME
\fBSCI_Filter_upload\fP \- Used in a message filter to uploads messages to another message filter or the parent

.SH SYNTAX
.ft R

.SH C Syntax
.nf
#include <sci.h>
int SCI_Filter_upload(int \fIfilter_id\fP, sci_group_t \fIgroup\fP, int \fInum_bufs\fP, void *\fIbufs\fP[], int \fIsizes\fP[])

.SH INPUT PARAMETERS
.ft R
.TP 1i
filter_id
The message filter id, set to \fBSCI_FILTER_NULL\fP means send to the parent directly (IN).
.TP 1i
group
The group information of current message segment (IN).
.TP 1i
num_bufs
The number of buffers of current message segment (IN).
.TP 1i
bufs
The array of buffer locations of current message segment (IN).
.TP 1i
sizes
The array of buffer sizes of current message segment (IN).

.SH DESCRIPTION
.ft R
This subroutine is used to upload messages to another message filter or the parent. 
Set \fIfilter_id\fP to \fBSCI_FILTER_NULL\fP means send the message to the parent
directly, otherwise message filters can be used in a cascaded style.
.sp
This is a non-blocking call. The caller cannot assume that message transfer has completed
upon the return of the function. Instead, the handler function defined in \fIsci_info_t\fP
should be used to ensure the message arrival in the destination sides.
.sp
For more information, please refer to SCI's online documents.

.SH EXAMPLE
.ft R
.nf
        {
                char msg[256];
                int sizes[1];
                void *bufs[1];
                ...
                bufs[0] = msg;
                sizes[0] = strlen(msg) + 1;
                SCI_Filter_upload(SCI_FILTER_NULL, SCI_GROUP_ALL, 1, bufs, sizes);
        }
.fi

.SH ERRORS
.ft R
All SCI routines return an error value.
.sp
.TP 1i
SCI_ERR_UNINTIALIZED
Uninitialized SCI execution environment
.TP 1i
SCI_ERR_INVALID_CALLER
Can only be called in the filter
.TP 1i
SCI_ERR_NO_MEM
Out of memory

.SH SEE ALSO
.ft R
.nf
\fBSCI_Filter_bcast\fP(3)
