More preparatory work: remove the <windows.h> include from lots of
[u/mdw/putty] / winnet.c
index 068b9b4..430a47b 100644 (file)
--- a/winnet.c
+++ b/winnet.c
@@ -368,6 +368,26 @@ void sk_getaddr(SockAddr addr, char *buf, int buflen)
 #endif
 }
 
+int sk_addrtype(SockAddr addr)
+{
+    return (addr->family == AF_INET ? ADDRTYPE_IPV4 : ADDRTYPE_IPV6);
+}
+
+void sk_addrcopy(SockAddr addr, char *buf)
+{
+#ifdef IPV6
+    if (addr->family == AF_INET) {
+#endif
+       struct in_addr a;
+       a.s_addr = htonl(addr->address);
+       memcpy(buf, (char*) &a.s_addr, 4);
+#ifdef IPV6
+    } else {
+       memcpy(buf, (char*) addr->ai, 16);
+    }
+#endif
+}
+
 void sk_addr_free(SockAddr addr)
 {
     sfree(addr);
@@ -813,7 +833,10 @@ void try_send(Actual_Socket s)
                s->pending_error = err;
                return;
            } else {
-               fatalbox(winsock_error_string(err));
+               /* We're inside the Windows frontend here, so we know
+                * that the frontend handle is unnecessary. */
+               logevent(NULL, winsock_error_string(err));
+               fatalbox("%s", winsock_error_string(err));
            }
        } else {
            if (s->sending_oob) {
@@ -949,8 +972,12 @@ int select_result(WPARAM wParam, LPARAM lParam)
        ret = recv(s->s, buf, sizeof(buf), MSG_OOB);
        noise_ultralight(ret);
        if (ret <= 0) {
-           fatalbox(ret == 0 ? "Internal networking trouble" :
-                    winsock_error_string(WSAGetLastError()));
+           char *str = (ret == 0 ? "Internal networking trouble" :
+                        winsock_error_string(WSAGetLastError()));
+           /* We're inside the Windows frontend here, so we know
+            * that the frontend handle is unnecessary. */
+           logevent(NULL, str);
+           fatalbox("%s", str);
        } else {
            return plug_receive(s->plug, 2, buf, ret);
        }
@@ -1111,3 +1138,13 @@ SOCKET next_socket(int *state)
     Actual_Socket s = index234(sktree, (*state)++);
     return s ? s->s : INVALID_SOCKET;
 }
+
+int net_service_lookup(char *service)
+{
+    struct servent *se;
+    se = getservbyname(service, NULL);
+    if (se != NULL)
+       return ntohs(se->s_port);
+    else
+       return 0;
+}