mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 03:22:48 -05:00
Make Socket and Plug into structs.
I think that means that _every_ one of my traitoids is now a struct containing a vtable pointer as one of its fields (albeit sometimes the only field), and never just a bare pointer.
This commit is contained in:
@ -43,7 +43,7 @@ typedef struct HandleSocket {
|
||||
|
||||
Plug *plug;
|
||||
|
||||
const SocketVtable *sockvt;
|
||||
Socket sock;
|
||||
} HandleSocket;
|
||||
|
||||
static int handle_gotdata(struct handle *h, void *data, int len)
|
||||
@ -107,7 +107,7 @@ static void handle_sentdata(struct handle *h, int new_backlog)
|
||||
|
||||
static Plug *sk_handle_plug(Socket *s, Plug *p)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
Plug *ret = hs->plug;
|
||||
if (p)
|
||||
hs->plug = p;
|
||||
@ -116,7 +116,7 @@ static Plug *sk_handle_plug(Socket *s, Plug *p)
|
||||
|
||||
static void sk_handle_close(Socket *s)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
|
||||
if (hs->defer_close) {
|
||||
hs->deferred_close = TRUE;
|
||||
@ -136,7 +136,7 @@ static void sk_handle_close(Socket *s)
|
||||
|
||||
static int sk_handle_write(Socket *s, const void *data, int len)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
|
||||
return handle_write(hs->send_h, data, len);
|
||||
}
|
||||
@ -152,14 +152,14 @@ static int sk_handle_write_oob(Socket *s, const void *data, int len)
|
||||
|
||||
static void sk_handle_write_eof(Socket *s)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
|
||||
handle_write_eof(hs->send_h);
|
||||
}
|
||||
|
||||
static void sk_handle_flush(Socket *s)
|
||||
{
|
||||
/* HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt); */
|
||||
/* HandleSocket *hs = FROMFIELD(s, HandleSocket, sock); */
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
@ -191,7 +191,7 @@ static void handle_socket_unfreeze(void *hsv)
|
||||
bufchain_consume(&hs->inputdata, len);
|
||||
hs->defer_close = FALSE;
|
||||
if (hs->deferred_close) {
|
||||
sk_handle_close(&hs->sockvt);
|
||||
sk_handle_close(&hs->sock);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -212,7 +212,7 @@ static void handle_socket_unfreeze(void *hsv)
|
||||
|
||||
static void sk_handle_set_frozen(Socket *s, int is_frozen)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
|
||||
if (is_frozen) {
|
||||
switch (hs->frozen) {
|
||||
@ -267,13 +267,13 @@ static void sk_handle_set_frozen(Socket *s, int is_frozen)
|
||||
|
||||
static const char *sk_handle_socket_error(Socket *s)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
return hs->error;
|
||||
}
|
||||
|
||||
static char *sk_handle_peer_info(Socket *s)
|
||||
{
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sockvt);
|
||||
HandleSocket *hs = FROMFIELD(s, HandleSocket, sock);
|
||||
ULONG pid;
|
||||
static HMODULE kernel32_module;
|
||||
DECL_WINDOWS_FUNCTION(static, BOOL, GetNamedPipeClientProcessId,
|
||||
@ -325,7 +325,7 @@ Socket *make_handle_socket(HANDLE send_H, HANDLE recv_H, HANDLE stderr_H,
|
||||
int flags = (overlapped ? HANDLE_FLAG_OVERLAPPED : 0);
|
||||
|
||||
hs = snew(HandleSocket);
|
||||
hs->sockvt = &HandleSocket_sockvt;
|
||||
hs->sock.vt = &HandleSocket_sockvt;
|
||||
hs->plug = plug;
|
||||
hs->error = NULL;
|
||||
hs->frozen = UNFROZEN;
|
||||
@ -343,5 +343,5 @@ Socket *make_handle_socket(HANDLE send_H, HANDLE recv_H, HANDLE stderr_H,
|
||||
|
||||
hs->defer_close = hs->deferred_close = FALSE;
|
||||
|
||||
return &hs->sockvt;
|
||||
return &hs->sock;
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ struct NetSocket {
|
||||
*/
|
||||
NetSocket *parent, *child;
|
||||
|
||||
const SocketVtable *sockvt;
|
||||
Socket sock;
|
||||
};
|
||||
|
||||
struct SockAddr {
|
||||
@ -910,7 +910,7 @@ SockAddr *sk_addr_dup(SockAddr *addr)
|
||||
|
||||
static Plug *sk_net_plug(Socket *sock, Plug *p)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
Plug *ret = s->plug;
|
||||
if (p)
|
||||
s->plug = p;
|
||||
@ -957,7 +957,7 @@ static Socket *sk_net_accept(accept_ctx_t ctx, Plug *plug)
|
||||
* Create NetSocket structure.
|
||||
*/
|
||||
ret = snew(NetSocket);
|
||||
ret->sockvt = &NetSocket_sockvt;
|
||||
ret->sock.vt = &NetSocket_sockvt;
|
||||
ret->error = NULL;
|
||||
ret->plug = plug;
|
||||
bufchain_init(&ret->output_data);
|
||||
@ -976,7 +976,7 @@ static Socket *sk_net_accept(accept_ctx_t ctx, Plug *plug)
|
||||
if (ret->s == INVALID_SOCKET) {
|
||||
err = p_WSAGetLastError();
|
||||
ret->error = winsock_error_string(err);
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
ret->oobinline = 0;
|
||||
@ -986,12 +986,12 @@ static Socket *sk_net_accept(accept_ctx_t ctx, Plug *plug)
|
||||
errstr = do_select(ret->s, 1);
|
||||
if (errstr) {
|
||||
ret->error = errstr;
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
add234(sktree, ret);
|
||||
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
static DWORD try_connect(NetSocket *sock)
|
||||
@ -1202,7 +1202,7 @@ Socket *sk_new(SockAddr *addr, int port, int privport, int oobinline,
|
||||
* Create NetSocket structure.
|
||||
*/
|
||||
ret = snew(NetSocket);
|
||||
ret->sockvt = &NetSocket_sockvt;
|
||||
ret->sock.vt = &NetSocket_sockvt;
|
||||
ret->error = NULL;
|
||||
ret->plug = plug;
|
||||
bufchain_init(&ret->output_data);
|
||||
@ -1229,7 +1229,7 @@ Socket *sk_new(SockAddr *addr, int port, int privport, int oobinline,
|
||||
err = try_connect(ret);
|
||||
} while (err && sk_nextaddr(ret->addr, &ret->step));
|
||||
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
@ -1253,7 +1253,7 @@ Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
* Create NetSocket structure.
|
||||
*/
|
||||
ret = snew(NetSocket);
|
||||
ret->sockvt = &NetSocket_sockvt;
|
||||
ret->sock.vt = &NetSocket_sockvt;
|
||||
ret->error = NULL;
|
||||
ret->plug = plug;
|
||||
bufchain_init(&ret->output_data);
|
||||
@ -1295,7 +1295,7 @@ Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
if (s == INVALID_SOCKET) {
|
||||
err = p_WSAGetLastError();
|
||||
ret->error = winsock_error_string(err);
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0);
|
||||
@ -1381,14 +1381,14 @@ Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
if (err) {
|
||||
p_closesocket(s);
|
||||
ret->error = winsock_error_string(err);
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
|
||||
if (p_listen(s, SOMAXCONN) == SOCKET_ERROR) {
|
||||
p_closesocket(s);
|
||||
ret->error = winsock_error_string(p_WSAGetLastError());
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
/* Set up a select mechanism. This could be an AsyncSelect on a
|
||||
@ -1397,7 +1397,7 @@ Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
if (errstr) {
|
||||
p_closesocket(s);
|
||||
ret->error = errstr;
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
add234(sktree, ret);
|
||||
@ -1412,7 +1412,7 @@ Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
local_host_only, ADDRTYPE_IPV6);
|
||||
|
||||
if (other) {
|
||||
NetSocket *ns = FROMFIELD(other, NetSocket, sockvt);
|
||||
NetSocket *ns = FROMFIELD(other, NetSocket, sock);
|
||||
if (!ns->error) {
|
||||
ns->parent = ret;
|
||||
ret->child = ns;
|
||||
@ -1423,16 +1423,16 @@ Socket *sk_newlistener(const char *srcaddr, int port, Plug *plug,
|
||||
}
|
||||
#endif
|
||||
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
static void sk_net_close(Socket *sock)
|
||||
{
|
||||
extern char *do_select(SOCKET skt, int startup);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
|
||||
if (s->child)
|
||||
sk_net_close(&s->child->sockvt);
|
||||
sk_net_close(&s->child->sock);
|
||||
|
||||
del234(sktree, s);
|
||||
do_select(s->s, 0);
|
||||
@ -1540,7 +1540,7 @@ void try_send(NetSocket *s)
|
||||
|
||||
static int sk_net_write(Socket *sock, const void *buf, int len)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
|
||||
assert(s->outgoingeof == EOF_NO);
|
||||
|
||||
@ -1560,7 +1560,7 @@ static int sk_net_write(Socket *sock, const void *buf, int len)
|
||||
|
||||
static int sk_net_write_oob(Socket *sock, const void *buf, int len)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
|
||||
assert(s->outgoingeof == EOF_NO);
|
||||
|
||||
@ -1583,7 +1583,7 @@ static int sk_net_write_oob(Socket *sock, const void *buf, int len)
|
||||
|
||||
static void sk_net_write_eof(Socket *sock)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
|
||||
assert(s->outgoingeof == EOF_NO);
|
||||
|
||||
@ -1786,13 +1786,13 @@ const char *sk_addr_error(SockAddr *addr)
|
||||
}
|
||||
static const char *sk_net_socket_error(Socket *sock)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
return s->error;
|
||||
}
|
||||
|
||||
static char *sk_net_peer_info(Socket *sock)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
#ifdef NO_IPV6
|
||||
struct sockaddr_in addr;
|
||||
#else
|
||||
@ -1824,7 +1824,7 @@ static char *sk_net_peer_info(Socket *sock)
|
||||
|
||||
static void sk_net_set_frozen(Socket *sock, int is_frozen)
|
||||
{
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sockvt);
|
||||
NetSocket *s = FROMFIELD(sock, NetSocket, sock);
|
||||
if (s->frozen == is_frozen)
|
||||
return;
|
||||
s->frozen = is_frozen;
|
||||
|
@ -34,12 +34,12 @@ typedef struct NamedPipeServerSocket {
|
||||
Plug *plug;
|
||||
char *error;
|
||||
|
||||
const SocketVtable *sockvt;
|
||||
Socket sock;
|
||||
} NamedPipeServerSocket;
|
||||
|
||||
static Plug *sk_namedpipeserver_plug(Socket *s, Plug *p)
|
||||
{
|
||||
NamedPipeServerSocket *ps = FROMFIELD(s, NamedPipeServerSocket, sockvt);
|
||||
NamedPipeServerSocket *ps = FROMFIELD(s, NamedPipeServerSocket, sock);
|
||||
Plug *ret = ps->plug;
|
||||
if (p)
|
||||
ps->plug = p;
|
||||
@ -48,7 +48,7 @@ static Plug *sk_namedpipeserver_plug(Socket *s, Plug *p)
|
||||
|
||||
static void sk_namedpipeserver_close(Socket *s)
|
||||
{
|
||||
NamedPipeServerSocket *ps = FROMFIELD(s, NamedPipeServerSocket, sockvt);
|
||||
NamedPipeServerSocket *ps = FROMFIELD(s, NamedPipeServerSocket, sock);
|
||||
|
||||
if (ps->callback_handle)
|
||||
handle_free(ps->callback_handle);
|
||||
@ -65,7 +65,7 @@ static void sk_namedpipeserver_close(Socket *s)
|
||||
|
||||
static const char *sk_namedpipeserver_socket_error(Socket *s)
|
||||
{
|
||||
NamedPipeServerSocket *ps = FROMFIELD(s, NamedPipeServerSocket, sockvt);
|
||||
NamedPipeServerSocket *ps = FROMFIELD(s, NamedPipeServerSocket, sock);
|
||||
return ps->error;
|
||||
}
|
||||
|
||||
@ -219,7 +219,7 @@ static const SocketVtable NamedPipeServerSocket_sockvt = {
|
||||
Socket *new_named_pipe_listener(const char *pipename, Plug *plug)
|
||||
{
|
||||
NamedPipeServerSocket *ret = snew(NamedPipeServerSocket);
|
||||
ret->sockvt = &NamedPipeServerSocket_sockvt;
|
||||
ret->sock.vt = &NamedPipeServerSocket_sockvt;
|
||||
ret->plug = plug;
|
||||
ret->error = NULL;
|
||||
ret->psd = NULL;
|
||||
@ -249,7 +249,7 @@ Socket *new_named_pipe_listener(const char *pipename, Plug *plug)
|
||||
named_pipe_accept_loop(ret, FALSE);
|
||||
|
||||
cleanup:
|
||||
return &ret->sockvt;
|
||||
return &ret->sock;
|
||||
}
|
||||
|
||||
#endif /* !defined NO_SECURITY */
|
||||
|
Reference in New Issue
Block a user