ipc_call.h
4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
@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