1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-13 00:57:33 -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:
Simon Tatham
2018-10-05 07:24:16 +01:00
parent b798230844
commit 884a7df94b
20 changed files with 222 additions and 209 deletions

42
proxy.c
View File

@ -73,14 +73,14 @@ void proxy_activate (ProxySocket *p)
* unfreezing the actual underlying socket.
*/
if (!p->freeze)
sk_set_frozen(&p->sockvt, 0);
sk_set_frozen(&p->sock, 0);
}
/* basic proxy socket functions */
static Plug *sk_proxy_plug (Socket *s, Plug *p)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
Plug *ret = ps->plug;
if (p)
ps->plug = p;
@ -89,7 +89,7 @@ static Plug *sk_proxy_plug (Socket *s, Plug *p)
static void sk_proxy_close (Socket *s)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
sk_close(ps->sub_socket);
sk_addr_free(ps->remote_addr);
@ -98,7 +98,7 @@ static void sk_proxy_close (Socket *s)
static int sk_proxy_write (Socket *s, const void *data, int len)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
if (ps->state != PROXY_STATE_ACTIVE) {
bufchain_add(&ps->pending_output_data, data, len);
@ -109,7 +109,7 @@ static int sk_proxy_write (Socket *s, const void *data, int len)
static int sk_proxy_write_oob (Socket *s, const void *data, int len)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
if (ps->state != PROXY_STATE_ACTIVE) {
bufchain_clear(&ps->pending_output_data);
@ -122,7 +122,7 @@ static int sk_proxy_write_oob (Socket *s, const void *data, int len)
static void sk_proxy_write_eof (Socket *s)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
if (ps->state != PROXY_STATE_ACTIVE) {
ps->pending_eof = 1;
@ -133,7 +133,7 @@ static void sk_proxy_write_eof (Socket *s)
static void sk_proxy_flush (Socket *s)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
if (ps->state != PROXY_STATE_ACTIVE) {
ps->pending_flush = 1;
@ -144,7 +144,7 @@ static void sk_proxy_flush (Socket *s)
static void sk_proxy_set_frozen (Socket *s, int is_frozen)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
if (ps->state != PROXY_STATE_ACTIVE) {
ps->freeze = is_frozen;
@ -183,7 +183,7 @@ static void sk_proxy_set_frozen (Socket *s, int is_frozen)
static const char * sk_proxy_socket_error (Socket *s)
{
ProxySocket *ps = FROMFIELD(s, ProxySocket, sockvt);
ProxySocket *ps = FROMFIELD(s, ProxySocket, sock);
if (ps->error != NULL || ps->sub_socket == NULL) {
return ps->error;
}
@ -195,7 +195,7 @@ static const char * sk_proxy_socket_error (Socket *s)
static void plug_proxy_log(Plug *plug, int type, SockAddr *addr, int port,
const char *error_msg, int error_code)
{
ProxySocket *ps = FROMFIELD(plug, ProxySocket, plugvt);
ProxySocket *ps = FROMFIELD(plug, ProxySocket, plugimpl);
plug_log(ps->plug, type, addr, port, error_msg, error_code);
}
@ -203,7 +203,7 @@ static void plug_proxy_log(Plug *plug, int type, SockAddr *addr, int port,
static void plug_proxy_closing (Plug *p, const char *error_msg,
int error_code, int calling_back)
{
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugvt);
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugimpl);
if (ps->state != PROXY_STATE_ACTIVE) {
ps->closing_error_msg = error_msg;
@ -217,7 +217,7 @@ static void plug_proxy_closing (Plug *p, const char *error_msg,
static void plug_proxy_receive (Plug *p, int urgent, char *data, int len)
{
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugvt);
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugimpl);
if (ps->state != PROXY_STATE_ACTIVE) {
/* we will lose the urgentness of this data, but since most,
@ -236,7 +236,7 @@ static void plug_proxy_receive (Plug *p, int urgent, char *data, int len)
static void plug_proxy_sent (Plug *p, int bufsize)
{
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugvt);
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugimpl);
if (ps->state != PROXY_STATE_ACTIVE) {
ps->sent_bufsize = bufsize;
@ -249,7 +249,7 @@ static void plug_proxy_sent (Plug *p, int bufsize)
static int plug_proxy_accepting(Plug *p,
accept_fn_t constructor, accept_ctx_t ctx)
{
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugvt);
ProxySocket *ps = FROMFIELD(p, ProxySocket, plugimpl);
if (ps->state != PROXY_STATE_ACTIVE) {
ps->accepting_constructor = constructor;
@ -438,8 +438,8 @@ Socket *new_connection(SockAddr *addr, const char *hostname,
return sret;
ret = snew(ProxySocket);
ret->sockvt = &ProxySocket_sockvt;
ret->plugvt = &ProxySocket_plugvt;
ret->sock.vt = &ProxySocket_sockvt;
ret->plugimpl.vt = &ProxySocket_plugvt;
ret->conf = conf_copy(conf);
ret->plug = plug;
ret->remote_addr = addr; /* will need to be freed on close */
@ -473,7 +473,7 @@ Socket *new_connection(SockAddr *addr, const char *hostname,
proxy_type = "Telnet";
} else {
ret->error = "Proxy error: Unknown proxy method";
return &ret->sockvt;
return &ret->sock;
}
{
@ -501,7 +501,7 @@ Socket *new_connection(SockAddr *addr, const char *hostname,
if (sk_addr_error(proxy_addr) != NULL) {
ret->error = "Proxy error: Unable to resolve proxy host name";
sk_addr_free(proxy_addr);
return &ret->sockvt;
return &ret->sock;
}
sfree(proxy_canonical_name);
@ -521,15 +521,15 @@ Socket *new_connection(SockAddr *addr, const char *hostname,
ret->sub_socket = sk_new(proxy_addr,
conf_get_int(conf, CONF_proxy_port),
privport, oobinline,
nodelay, keepalive, &ret->plugvt);
nodelay, keepalive, &ret->plugimpl);
if (sk_socket_error(ret->sub_socket) != NULL)
return &ret->sockvt;
return &ret->sock;
/* start the proxy negotiation process... */
sk_set_frozen(ret->sub_socket, 0);
ret->negotiate(ret, PROXY_CHANGE_NEW);
return &ret->sockvt;
return &ret->sock;
}
/* no proxy, so just return the direct socket */