2 * virnetsocket.h: generic network socket handling
4 * Copyright (C) 2006-2011 Red Hat, Inc.
5 * Copyright (C) 2006 Daniel P. Berrange
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library. If not, see
19 * <http://www.gnu.org/licenses/>.
24 #include "virsocketaddr.h"
25 #include "vircommand.h"
26 #include "virnettlscontext.h"
27 #include "virobject.h"
29 # include "virnetsaslcontext.h"
34 typedef struct _virNetSocket virNetSocket
;
36 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetSocket
, virObjectUnref
);
38 typedef void (*virNetSocketIOFunc
)(virNetSocket
*sock
,
43 int virNetSocketCheckProtocols(bool *hasIPv4
,
46 int virNetSocketNewListenTCP(const char *nodename
,
49 virNetSocket
***addrs
,
52 int virNetSocketNewListenUNIX(const char *path
,
58 int virNetSocketNewListenFD(int fd
,
62 int virNetSocketNewConnectTCP(const char *nodename
,
67 int virNetSocketNewConnectUNIX(const char *path
,
68 const char *spawnDaemonPath
,
71 int virNetSocketNewConnectCommand(virCommand
*cmd
,
72 virNetSocket
**retsock
);
74 int virNetSocketNewConnectSSH(const char *nodename
,
84 int virNetSocketNewConnectLibSSH2(const char *host
,
89 const char *knownHosts
,
90 const char *knownHostsVerify
,
91 const char *authMethods
,
93 virConnectAuthPtr auth
,
95 virNetSocket
**retsock
);
97 int virNetSocketNewConnectLibssh(const char *host
,
100 const char *username
,
102 const char *knownHosts
,
103 const char *knownHostsVerify
,
104 const char *authMethods
,
106 virConnectAuthPtr auth
,
108 virNetSocket
**retsock
);
110 int virNetSocketNewConnectExternal(const char **cmdargv
,
111 virNetSocket
**addr
);
113 int virNetSocketNewConnectSockFD(int sockfd
,
114 virNetSocket
**retsock
);
116 virNetSocket
*virNetSocketNewPostExecRestart(virJSONValue
*object
);
118 virJSONValue
*virNetSocketPreExecRestart(virNetSocket
*sock
);
120 int virNetSocketGetFD(virNetSocket
*sock
);
121 int virNetSocketDupFD(virNetSocket
*sock
, bool cloexec
);
123 bool virNetSocketIsLocal(virNetSocket
*sock
);
125 bool virNetSocketHasPassFD(virNetSocket
*sock
);
127 char *virNetSocketGetPath(virNetSocket
*sock
);
128 int virNetSocketGetPort(virNetSocket
*sock
);
130 int virNetSocketGetUNIXIdentity(virNetSocket
*sock
,
134 unsigned long long *timestamp
)
136 int virNetSocketGetSELinuxContext(virNetSocket
*sock
,
140 int virNetSocketSetBlocking(virNetSocket
*sock
,
143 void virNetSocketSetQuietEOF(virNetSocket
*sock
);
145 ssize_t
virNetSocketRead(virNetSocket
*sock
, char *buf
, size_t len
);
146 ssize_t
virNetSocketWrite(virNetSocket
*sock
, const char *buf
, size_t len
);
148 int virNetSocketSendFD(virNetSocket
*sock
, int fd
);
149 int virNetSocketRecvFD(virNetSocket
*sock
, int *fd
);
151 void virNetSocketSetTLSSession(virNetSocket
*sock
,
152 virNetTLSSession
*sess
);
155 void virNetSocketSetSASLSession(virNetSocket
*sock
,
156 virNetSASLSession
*sess
);
158 bool virNetSocketHasCachedData(virNetSocket
*sock
);
159 bool virNetSocketHasPendingData(virNetSocket
*sock
);
161 const char *virNetSocketLocalAddrStringSASL(virNetSocket
*sock
);
162 const char *virNetSocketRemoteAddrStringSASL(virNetSocket
*sock
);
163 const char *virNetSocketRemoteAddrStringURI(virNetSocket
*sock
);
165 int virNetSocketListen(virNetSocket
*sock
, int backlog
);
166 int virNetSocketAccept(virNetSocket
*sock
,
167 virNetSocket
**clientsock
);
169 int virNetSocketAddIOCallback(virNetSocket
*sock
,
171 virNetSocketIOFunc func
,
175 void virNetSocketUpdateIOCallback(virNetSocket
*sock
,
178 void virNetSocketRemoveIOCallback(virNetSocket
*sock
);
180 void virNetSocketClose(virNetSocket
*sock
);