summaryrefslogtreecommitdiff
path: root/legacy/ecore/src/lib/ecore_con/Ecore_Con.h.in
blob: e391473b2b6b86adc92d0c66b7912c0437b22ae7 (plain)
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
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef _ECORE_CON_H
#define _ECORE_CON_H

/**
 * @file Ecore_Con.h
 * @brief Sockets functions.
 *
 * The Ecore Connection Library ( @c Ecore_Con ) provides simple mechanisms
 * for communications between programs using reliable sockets.  It saves
 * the programmer from having to worry about file descripters and waiting
 * for incoming connections.
 *
 * There are two main objects in the @c Ecore_Con library: the @c
 * Ecore_Con_Server and the @c Ecore_Con_Client.
 *
 * The @c Ecore_Con_Server represents a server to connect to.  It is
 * represents a server that can be connected to.  It is used regardless
 * of whether the program is acting as a server or client itself.
 *
 * To create a listening server, call @c ecore_con_server_add().
 *
 * To connect to a server, call @c ecore_Con_server_connect().  Data can
 * then be sent to the server using the @c ecore_con_server_send().
 * 
 * Whenever a client connection is made to an @c Ecore_Con_Server, a
 * @c ECORE_CON_CLIENT_ADD event is emitted.  Any event callbacks that are
 * called receive a @c Ecore_Con_Client object, which represents a
 * connection that that particular client.
 *
 * Functions are described in the following groupings:
 * @li @ref Ecore_Con_Lib_Group
 * @li @ref Ecore_Con_Server_Group
 * @li @ref Ecore_Con_Client_Group
 */

#define HAVE_ECORE_CON_OPENSSL @USE_OPENSSL@

#if HAVE_ECORE_CON_OPENSSL
#include <openssl/ssl.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif
   
#ifndef _ECORE_CON_PRIVATE_H
   typedef void Ecore_Con_Server; /**< A connection handle */
   typedef void Ecore_Con_Client; /**< A connection handle */
   
   typedef enum _Ecore_Con_Type
     {
	  ECORE_CON_LOCAL_USER,
	  ECORE_CON_LOCAL_SYSTEM,
	  ECORE_CON_REMOTE_SYSTEM
#if HAVE_ECORE_CON_OPENSSL 
	  ,ECORE_CON_USE_SSL = 16
#endif
     } Ecore_Con_Type;
   
#endif
   
   typedef struct _Ecore_Con_Event_Client_Add  Ecore_Con_Event_Client_Add;
   typedef struct _Ecore_Con_Event_Client_Del  Ecore_Con_Event_Client_Del;
   typedef struct _Ecore_Con_Event_Server_Add  Ecore_Con_Event_Server_Add;
   typedef struct _Ecore_Con_Event_Server_Del  Ecore_Con_Event_Server_Del;
   typedef struct _Ecore_Con_Event_Client_Data Ecore_Con_Event_Client_Data;
   typedef struct _Ecore_Con_Event_Server_Data Ecore_Con_Event_Server_Data;

   struct _Ecore_Con_Event_Client_Add
     {
	Ecore_Con_Client *client;
     };

   struct _Ecore_Con_Event_Client_Del
     {
	Ecore_Con_Client *client;
     };

   struct _Ecore_Con_Event_Server_Add
     {
	Ecore_Con_Server *server;
     };

   struct _Ecore_Con_Event_Server_Del
     {
	Ecore_Con_Server *server;
     };
   
   struct _Ecore_Con_Event_Client_Data
     {
	Ecore_Con_Client *client;
	void             *data;
	int               size;
     };
   
   struct _Ecore_Con_Event_Server_Data
     {
	Ecore_Con_Server *server;
	void             *data;
	int               size;
     };
   
   extern int ECORE_CON_EVENT_CLIENT_ADD;
   extern int ECORE_CON_EVENT_CLIENT_DEL;
   extern int ECORE_CON_EVENT_SERVER_ADD;
   extern int ECORE_CON_EVENT_SERVER_DEL;
   extern int ECORE_CON_EVENT_CLIENT_DATA;
   extern int ECORE_CON_EVENT_SERVER_DATA;
   
   int               ecore_con_init(void);
   int               ecore_con_shutdown(void);
   
   Ecore_Con_Server *ecore_con_server_add(Ecore_Con_Type type, char *name, int port, const void *data);
   
   Ecore_Con_Server *ecore_con_server_connect(Ecore_Con_Type type, char *name, int port, const void *data);
   void             *ecore_con_server_del(Ecore_Con_Server *svr);
   void             *ecore_con_server_data_get(Ecore_Con_Server *svr);
   int               ecore_con_server_connected_get(Ecore_Con_Server *svr);
   int               ecore_con_server_send(Ecore_Con_Server *svr, void *data, int size);
   
   int               ecore_con_client_send(Ecore_Con_Client *cl, void *data, int size);
   Ecore_Con_Server *ecore_con_client_server_get(Ecore_Con_Client *cl);
   void             *ecore_con_client_del(Ecore_Con_Client *cl);
   void              ecore_con_client_data_set(Ecore_Con_Client *cl, const void *data);
   void             *ecore_con_client_data_get(Ecore_Con_Client *cl);
   
#ifdef __cplusplus
}
#endif

#endif