Server callback macros
#include <xpa.h> xpa_class, xpa_name, xpa_method, xpa_cmdfd, xpa_datafd, xpa_sendian, xpa_cendian
Server routines have access to information about the \s-1XPA\s0 being called via the following macros (each of which takes the xpa handle as an argument):
macro explanation ------ ----------- xpa_class class of this xpa xpa_name name of this xpa xpa_method method string (inet or local connect info) xpa_cmdfd fd of command socket xpa_datafd fd of data socket xpa_sendian endian\-ness of server ("little" or "big") xpa_cendian endian\-ness of client ("little" or "big"
The argument to these macros is the call_data pointer that is passed to the server procedure. This pointer should be type case to \s-1XPA\s0 in the server routine:
XPA xpa = (XPA)call_data;
The most important of these macros is xpa_datafd(). A server routine that sets \*(L"fillbuf=false\*(R" in receive_mode or send_mode can use this macro to perform I/O directly to/from the client, rather than using buf.
The xpa_cendian and xpa_sendian macros can be used together to determine if the data transferred from the client is byte swapped with respect to the server. Values for these macros are: \*(L"little\*(R", \*(L"big\*(R", or \*(L"?\*(R". In order to do a proper conversion, you still need to know the format of the data (i.e., byte swapping is dependent on the size of the data element being converted).
See xpa(7) for a list of \s-1XPA\s0 help pages