/** @file ipc_call.h @date 2008-06-30 @author 오재경 freefrug@falinux.com @brief 프로세스간의 명령 전달을 구현한다. @modify @todo @bug @remark @warning */ // // 저작권 에프에이리눅스(주) // 외부공개 금지 // //---------------------------------------------------------------------------- #ifndef _IPC_CALL_H_ #define _IPC_CALL_H_ //#define IPC_UDS_NAME_PREFIX "ipc_uds." #define IPC_CALL_UDS_NAME_FORMAT "/tmp/ipc_%03ld.uds" #define IPC_CALL_PACKET_HEADER_LEN (16) #define IPC_CALL_BUF_LEN (4096-IPC_CALL_PACKET_HEADER_LEN) #define IPC_CALL_TIMEOUT_UNLIMIT 0xffffffff /// /// IPC CALL 에서의 데이타 수신시 호출되는 사용자 이벤트 함수 형태 typedef void (*ipc_call_func_t)(unsigned long src_id, unsigned long msg_type, void *buf, int len ); /// @{ /// @brief IPC CALL에서 사용하는 통신 패킷 typedef struct { unsigned long dst_id; /// 수신지 ID unsigned long src_id; /// 송신지 ID unsigned long msg_type; /// 메시지 형식 ( BIN, XML, ASC ) unsigned long size; /// 전송 메시지의 크기 char buf[IPC_CALL_BUF_LEN]; /// 메시지 버퍼 } ipc_call_packet_t; /// @} #define IPC_CALL_OK 0 #define IPC_CALL_E_AGAIN -1 #define IPC_CALL_E_TIME_OUT -2 #define IPC_CALL_E_BUSY -3 #define IPC_CALL_E_NO_ID -4 #define IPC_CALL_E_EMPTY -5 #define IPC_CALL_GET_GROUP(x) (((x)>>16)&0xFFFF) #define IPC_CALL_GET_PORT(x) (((x)>> 0)&0xFFFF) #define IPC_CALL_METHOD_FABIND 0 #define IPC_CALL_METHOD_UDS 1 #define IPC_CALL_METHOD_UDP 2 #define IPC_CALL_METHOD_NONE -1 #define IPC_CALL_MSG_TYPE_BIN 0 #define IPC_CALL_MSG_TYPE_XML 1 #define IPC_CALL_MSG_TYPE_ASC 2 #define IPC_CALL_LEVEL_DEFAULT 0 #define IPC_CALL_TIMEOUT_DEFAULT 1000 #ifdef __cplusplus extern "C" { #endif /// @{ /// @brief 외부에서 사용할수 있는 객체함수 리스트 int ipc_call_create ( unsigned long id ); /// IPC_CALL 을 생성한다. int ipc_call_free ( unsigned long id ); /// IPC_CALL 을 해제한다. int ipc_call_method ( unsigned long method ); /// IPC_CALL 의 수행 방식을 정한다. int ipc_call_level ( unsigned long level ); /// IPC_CALL 의 시간 초과를 설정한다. int ipc_call_level_default ( unsigned long level ); /// IPC_CALL 의 시간 초과를 설정한다. int ipc_call_timeout ( unsigned long msec ); /// IPC_CALL 의 시간 초과를 설정한다. int ipc_call_timeout_default( unsigned long msec ); /// IPC_CALL 의 시간 초과를 설정한다. // int ipc_call_on_read ( void (*func)( unsigned long msg_type, void *priv ) ); /// IPC_CALL 의 읽기에 대한 이벤트를 지정한다. int ipc_call_on_read ( ipc_call_func_t *func ); int ipc_call_read ( void *buf, int len ); /// IPC_CALL 의 수신된 버퍼의 내용을 BIN 형식으로 읽는다. // int ipc_call_read_xml ( void *buf, int len ); /// IPC_CALL 의 수신된 버퍼의 내용을 XML 형식으로 읽는다. //int ipc_call_read_asc ( void *buf, int len ); /// IPC_CALL 의 수신된 버퍼의 내용을 ASC 형식으로 읽는다. int ipc_call_send ( unsigned long dest, void *buf, int len, unsigned long msg_type ); /// IPC_CALL 의 BIN 형식으로 데이터를 전송한다. int ipc_call_send_xml ( unsigned long dest, char *buf, int len ); /// IPC_CALL 의 XML 형식으로 데이터를 전송한다. int ipc_call_send_asc ( unsigned long dest, char *buf, int len ); /// IPC_CALL 의 ASC 형식으로 데이터를 전송한다. int ipc_call_rpc ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL 의 BIN 형식으로 데이터를 전송하고 수신한다. int ipc_call_rpc_xml ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL 의 XML 형식으로 데이터를 전송하고 수신한다. int ipc_call_rpc_asc ( unsigned long dest, void *tbuf, int tlen , void *rbuf, int rlen ); /// IPC_CALL 의 ASC 형식으로 데이터를 전송하고 수신한다. /// @} #ifdef __cplusplus } #endif #endif