diff udpopt.c @ 3:5a977ccbc7a9 default tip

Empty changelog
author darius
date Sat, 06 Dec 1997 05:41:29 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/udpopt.c	Sat Dec 06 05:41:29 1997 +0000
@@ -0,0 +1,227 @@
+/* $Id: udpopt.c,v 1.1.1.1 1997/12/06 05:41:31 darius Exp $ */
+
+/*
+ * udpopt.c - present UDP control window
+ */
+#include "copyright.h"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include "Wlib.h"
+#include "defs.h"
+#include "struct.h"
+#include "data.h"
+#include "proto.h"
+
+#define UDPBORDER	2
+#define UDPLEN		35
+
+/* Set up the UDP control window */
+void
+udpwindow()
+{
+    register int i;
+
+    for (i = 0; i < UDP_NUMOPTS; i++)
+	udprefresh(i);
+
+    /* Map window */
+    W_MapWindow(udpWin);
+}
+
+/*
+ * Refresh item i
+ */
+void
+udprefresh(i)
+    int     i;
+{
+    char    buf[BUFSIZ];
+
+    switch (i) {
+    case UDP_CURRENT:
+	sprintf(buf, "UDP channel is %s", (commMode == COMM_TCP) ?
+		"CLOSED" : "OPEN");
+	break;
+    case UDP_STATUS:
+	strcpy(buf, "> Status: ");
+	switch (commStatus) {
+	case STAT_CONNECTED:
+	    strcat(buf, "Connected");
+	    break;
+	case STAT_SWITCH_UDP:
+	    strcat(buf, "Requesting switch to UDP");
+	    break;
+	case STAT_SWITCH_TCP:
+	    strcat(buf, "Requesting switch to TCP");
+	    break;
+	case STAT_VERIFY_UDP:
+	    strcat(buf, "Verifying UDP connection");
+	    break;
+	default:
+	    fprintf(stderr, "netrek: UDP error: bad commStatus (%d)\n",
+		    commStatus);
+	}
+	break;
+    case UDP_DROPPED:
+	sprintf(buf, "> UDP trans dropped: %d (%d%% | %d%%)", udpDropped,
+		udpDropped * 100 / udpTotal,	/* (udpTotal always > 0) */
+		udpRecentDropped * 100 / UDP_RECENT_INTR);
+	break;
+    case UDP_SEQUENCE:
+	sprintf(buf, "Sequence checking is %s", (udpSequenceChk) ?
+		"ON" : "OFF");
+	break;
+    case UDP_DEBUG:
+	sprintf(buf, "Debugging info is ");
+	switch (udpDebug) {
+	case 0:
+	    strcat(buf, "OFF");
+	    break;
+	case 1:
+	    strcat(buf, "ON (connect msgs only)");
+	    break;
+	case 2:
+	    strcat(buf, "ON (verbose output)");
+	    break;
+	}
+	break;
+    case UDP_SEND:
+	sprintf(buf, "Sending with ");
+	switch (udpClientSend) {
+	case 0:
+	    strcat(buf, "TCP only");
+	    break;
+	case 1:
+	    strcat(buf, "simple UDP");
+	    break;
+	case 2:
+	    strcat(buf, "enforced UDP (state only)");
+	    break;
+	case 3:
+	    strcat(buf, "enforced UDP (state & weap)");
+	    break;
+	}
+	break;
+    case UDP_RECV:
+	sprintf(buf, "Receiving with ");
+	switch (udpClientRecv) {
+	case MODE_TCP:
+	    strcat(buf, "TCP only");
+	    break;
+	case MODE_SIMPLE:
+	    strcat(buf, "simple UDP");
+	    break;
+	case MODE_FAT:
+	    strcat(buf, "fat UDP");
+	    break;
+#ifdef DOUBLE_UDP
+	case MODE_DOUBLE:
+	    strcat(buf, "double UDP");
+	    break;
+#endif				/* DOUBLE_UDP */
+	}
+	break;
+    case UDP_FORCE_RESET:
+	sprintf(buf, "Force reset to TCP");
+	break;
+    case UDP_UPDATE_ALL:
+	sprintf(buf, "Request full update (=)");
+	break;
+#ifdef GATEWAY
+    case UDP_GW:
+	sprintf(buf, "gw: %s %d/%d/%d", gw_mach, gw_serv_port, gw_port,
+		gw_local_port);
+	break;
+#endif
+    case UDP_DONE:
+	strcpy(buf, "Done");
+	break;
+    default:
+	fprintf(stderr, "netrek: UDP error: bad udprefresh(%d) call\n", i);
+    }
+
+    W_WriteText(udpWin, 0, i, textColor, buf, strlen(buf), 0);
+}
+
+void
+udpaction(data)
+    W_Event *data;
+{
+    register int i;
+
+    switch (data->y) {
+    case UDP_CURRENT:
+	if (commMode == COMM_TCP)
+	    sendUdpReq(COMM_UDP);
+	else
+	    sendUdpReq(COMM_TCP);
+	break;
+
+    case UDP_STATUS:
+    case UDP_DROPPED:
+	W_Beep();
+	break;
+    case UDP_SEQUENCE:
+	udpSequenceChk = !udpSequenceChk;
+	udprefresh(UDP_SEQUENCE);
+	break;
+    case UDP_SEND:
+	udpClientSend++;
+	if (udpClientSend > 3)
+	    udpClientSend = 0;
+	udprefresh(UDP_SEND);
+	break;
+    case UDP_RECV:
+	udpClientRecv++;
+#ifdef DOUBLE_UDP
+	if (udpClientRecv > MODE_DOUBLE)
+	    udpClientRecv = 0;
+#else
+	if (udpClientRecv >= MODE_DOUBLE)
+	    udpClientRecv = 0;
+#endif
+	udprefresh(UDP_RECV);
+	sendUdpReq(COMM_MODE + udpClientRecv);
+	break;
+    case UDP_DEBUG:
+	udpDebug++;
+	if (udpDebug > 2)
+	    udpDebug = 0;
+	udprefresh(UDP_DEBUG);
+	break;
+    case UDP_FORCE_RESET:
+	/* clobber UDP */
+	UDPDIAG(("*** FORCE RESET REQUESTED\n"));
+	sendUdpReq(COMM_TCP);
+	commMode = commModeReq = COMM_TCP;
+	commStatus = STAT_CONNECTED;
+	commSwitchTimeout = 0;
+	udpClientSend = udpClientRecv = udpSequenceChk = udpTotal = 1;
+	udpDebug = udpDropped = udpRecentDropped = 0;
+	if (udpSock >= 0)
+	    closeUdpConn();
+	for (i = 0; i < UDP_NUMOPTS; i++)
+	    udprefresh(i);
+	break;
+    case UDP_UPDATE_ALL:
+	sendUdpReq(COMM_UPDATE);
+	break;
+#ifdef GATEWAY
+    case UDP_GW:
+	W_Beep();
+	break;
+#endif
+    case UDP_DONE:
+	udpdone();
+	break;
+    }
+}
+
+void
+udpdone()
+{
+    /* Unmap window */
+    W_UnmapWindow(udpWin);
+}