qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] slirp: Remove UDP protocol emulation (talk, cuseeme)
@ 2009-07-23  0:53 Ed Swierk
  2009-07-23  6:46 ` [Qemu-devel] " Jan Kiszka
  0 siblings, 1 reply; 2+ messages in thread
From: Ed Swierk @ 2009-07-23  0:53 UTC (permalink / raw)
  To: qemu-devel

The UDP emulation code for talk has been commented out since the
beginning of time, and unless someone who runs CU-SeeMe on qemu with
user-mode networking can vouch that the special magic (a) is necessary
and (b) works, let's get rid of the code.

Signed-off-by: Ed Swierk <eswierk@aristanetworks.com>

---
diff --git a/slirp/misc.h b/slirp/misc.h
index c335394..da68d09 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -36,11 +36,6 @@ void do_wait(int);
 
 #define EMU_NOCONNECT 0x10	/* Don't connect */
 
-/* UDP emulations */
-#define EMU_TALK	0x1
-#define EMU_NTALK	0x2
-#define EMU_CUSEEME	0x3
-
 struct tos_t {
 	u_int16_t lport;
 	u_int16_t fport;
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 5a0e6c1..e977e77 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -2,9 +2,6 @@
  * User definable configuration options
  */
 
-/* Undefine if you don't want talk emulation */
-#undef EMULATE_TALK
-
 /* Define if you want the connection to be probed */
 /* XXX Not working yet, so ignore this for now */
 #undef PROBE_CONN
diff --git a/slirp/udp.c b/slirp/udp.c
index e0a6693..a88b645 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -42,7 +42,6 @@
 #include "ip_icmp.h"
 
 static u_int8_t udp_tos(struct socket *so);
-static void udp_emu(struct socket *so, struct mbuf *m);
 
 void
 udp_init(Slirp *slirp)
@@ -202,9 +201,6 @@ udp_input(register struct mbuf *m, int iphlen)
 	/*
 	 * Now we sendto() the packet.
 	 */
-	if (so->so_emu)
-	   udp_emu(so, m);
-
 	if(sosendto(so,m) == -1) {
 	  m->m_len += iphlen;
 	  m->m_data -= iphlen;
@@ -306,31 +302,9 @@ int udp_output(struct socket *so, struct mbuf *m,
 int
 udp_attach(struct socket *so)
 {
-  struct sockaddr_in addr;
-
   if((so->s = socket(AF_INET,SOCK_DGRAM,0)) != -1) {
-    /*
-     * Here, we bind() the socket.  Although not really needed
-     * (sendto() on an unbound socket will bind it), it's done
-     * here so that emulation of ytalk etc. don't have to do it
-     */
-    addr.sin_family = AF_INET;
-    addr.sin_port = 0;
-    addr.sin_addr.s_addr = INADDR_ANY;
-    if(bind(so->s, (struct sockaddr *)&addr, sizeof(addr))<0) {
-      int lasterrno=errno;
-      closesocket(so->s);
-      so->s=-1;
-#ifdef _WIN32
-      WSASetLastError(lasterrno);
-#else
-      errno=lasterrno;
-#endif
-    } else {
-      /* success, insert in queue */
-      so->so_expire = curtime + SO_EXPIRE;
-      insque(so, &so->slirp->udb);
-    }
+    so->so_expire = curtime + SO_EXPIRE;
+    insque(so, &so->slirp->udb);
   }
   return(so->s);
 }
@@ -344,9 +318,6 @@ udp_detach(struct socket *so)
 
 static const struct tos_t udptos[] = {
 	{0, 53, IPTOS_LOWDELAY, 0},			/* DNS */
-	{517, 517, IPTOS_LOWDELAY, EMU_TALK},	/* talk */
-	{518, 518, IPTOS_LOWDELAY, EMU_NTALK},	/* ntalk */
-	{0, 7648, IPTOS_LOWDELAY, EMU_CUSEEME},	/* Cu-Seeme */
 	{0, 0, 0, 0}
 };
 
@@ -367,239 +338,6 @@ udp_tos(struct socket *so)
 	return 0;
 }
 
-#ifdef EMULATE_TALK
-#include "talkd.h"
-#endif
-
-/*
- * Here, talk/ytalk/ntalk requests must be emulated
- */
-static void
-udp_emu(struct socket *so, struct mbuf *m)
-{
-	struct sockaddr_in addr;
-	socklen_t addrlen = sizeof(addr);
-#ifdef EMULATE_TALK
-	CTL_MSG_OLD *omsg;
-	CTL_MSG *nmsg;
-	char buff[sizeof(CTL_MSG)];
-	u_char type;
-
-struct talk_request {
-	struct talk_request *next;
-	struct socket *udp_so;
-	struct socket *tcp_so;
-} *req;
-
-	static struct talk_request *req_tbl = 0;
-
-#endif
-
-struct cu_header {
-	uint16_t	d_family;		// destination family
-	uint16_t	d_port;			// destination port
-	uint32_t	d_addr;			// destination address
-	uint16_t	s_family;		// source family
-	uint16_t	s_port;			// source port
-	uint32_t	so_addr;		// source address
-	uint32_t	seqn;			// sequence number
-	uint16_t	message;		// message
-	uint16_t	data_type;		// data type
-	uint16_t	pkt_len;		// packet length
-} *cu_head;
-
-	switch(so->so_emu) {
-
-#ifdef EMULATE_TALK
-	 case EMU_TALK:
-	 case EMU_NTALK:
-		/*
-		 * Talk emulation. We always change the ctl_addr to get
-		 * some answers from the daemon. When an ANNOUNCE comes,
-		 * we send LEAVE_INVITE to the local daemons. Also when a
-		 * DELETE comes, we send copies to the local daemons.
-		 */
-		if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)
-			return;
-
-#define	IS_OLD	(so->so_emu == EMU_TALK)
-
-#define COPY_MSG(dest, src) { dest->type = src->type; \
-			      dest->id_num = src->id_num; \
-			      dest->pid = src->pid; \
-			      dest->addr = src->addr; \
-			      dest->ctl_addr = src->ctl_addr; \
-			      memcpy(&dest->l_name, &src->l_name, NAME_SIZE_OLD); \
-			      memcpy(&dest->r_name, &src->r_name, NAME_SIZE_OLD); \
-	         	      memcpy(&dest->r_tty, &src->r_tty, TTY_SIZE); }
-
-#define OTOSIN(ptr, field) ((struct sockaddr_in *)&ptr->field)
-/* old_sockaddr to sockaddr_in */
-
-
-		if (IS_OLD) {  		/* old talk */
-			omsg = mtod(m, CTL_MSG_OLD*);
-			nmsg = (CTL_MSG *) buff;
-			type = omsg->type;
-			OTOSIN(omsg, ctl_addr)->sin_port = addr.sin_port;
-			OTOSIN(omsg, ctl_addr)->sin_addr = our_addr;
-                        pstrcpy(omsg->l_name, NAME_SIZE_OLD, getlogin());
-		} else {		/* new talk */
-			omsg = (CTL_MSG_OLD *) buff;
-			nmsg = mtod(m, CTL_MSG *);
-			type = nmsg->type;
-			OTOSIN(nmsg, ctl_addr)->sin_port = addr.sin_port;
-			OTOSIN(nmsg, ctl_addr)->sin_addr = our_addr;
-                        pstrcpy(nmsg->l_name, NAME_SIZE_OLD, getlogin());
-		}
-
-		if (type == LOOK_UP)
-			return;		/* for LOOK_UP this is enough */
-
-		if (IS_OLD) {		/* make a copy of the message */
-			COPY_MSG(nmsg, omsg);
-			nmsg->vers = 1;
-			nmsg->answer = 0;
-		} else
-			COPY_MSG(omsg, nmsg);
-
-		/*
-		 * If if is an ANNOUNCE message, we go through the
-		 * request table to see if a tcp port has already
-		 * been redirected for this socket. If not, we solisten()
-		 * a new socket and add this entry to the table.
-		 * The port number of the tcp socket and our IP
-		 * are put to the addr field of the message structures.
-		 * Then a LEAVE_INVITE is sent to both local daemon
-		 * ports, 517 and 518. This is why we have two copies
-		 * of the message, one in old talk and one in new talk
-		 * format.
-		 */
-
-		if (type == ANNOUNCE) {
-			int s;
-			u_short temp_port;
-
-			for(req = req_tbl; req; req = req->next)
-				if (so == req->udp_so)
-					break;  	/* found it */
-
-			if (!req) {	/* no entry for so, create new */
-				req = (struct talk_request *)
-					malloc(sizeof(struct talk_request));
-				req->udp_so = so;
-				req->tcp_so = solisten(0,
-					OTOSIN(omsg, addr)->sin_addr.s_addr,
-					OTOSIN(omsg, addr)->sin_port,
-					SS_FACCEPTONCE);
-				req->next = req_tbl;
-				req_tbl = req;
-			}
-
-			/* replace port number in addr field */
-			addrlen = sizeof(addr);
-			getsockname(req->tcp_so->s,
-					(struct sockaddr *) &addr,
-					&addrlen);
-			OTOSIN(omsg, addr)->sin_port = addr.sin_port;
-			OTOSIN(omsg, addr)->sin_addr = our_addr;
-			OTOSIN(nmsg, addr)->sin_port = addr.sin_port;
-			OTOSIN(nmsg, addr)->sin_addr = our_addr;
-
-			/* send LEAVE_INVITEs */
-			temp_port = OTOSIN(omsg, ctl_addr)->sin_port;
-			OTOSIN(omsg, ctl_addr)->sin_port = 0;
-			OTOSIN(nmsg, ctl_addr)->sin_port = 0;
-			omsg->type = nmsg->type = LEAVE_INVITE;
-
-			s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
-			addr.sin_addr = our_addr;
-			addr.sin_family = AF_INET;
-			addr.sin_port = htons(517);
-			sendto(s, (char *)omsg, sizeof(*omsg), 0,
-				(struct sockaddr *)&addr, sizeof(addr));
-			addr.sin_port = htons(518);
-			sendto(s, (char *)nmsg, sizeof(*nmsg), 0,
-				(struct sockaddr *) &addr, sizeof(addr));
-			closesocket(s) ;
-
-			omsg->type = nmsg->type = ANNOUNCE;
-			OTOSIN(omsg, ctl_addr)->sin_port = temp_port;
-			OTOSIN(nmsg, ctl_addr)->sin_port = temp_port;
-		}
-
-		/*
-		 * If it is a DELETE message, we send a copy to the
-		 * local daemons. Then we delete the entry corresponding
-		 * to our socket from the request table.
-		 */
-
-		if (type == DELETE) {
-			struct talk_request *temp_req, *req_next;
-			int s;
-			u_short temp_port;
-
-			temp_port = OTOSIN(omsg, ctl_addr)->sin_port;
-			OTOSIN(omsg, ctl_addr)->sin_port = 0;
-			OTOSIN(nmsg, ctl_addr)->sin_port = 0;
-
-			s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
-			addr.sin_addr = our_addr;
-			addr.sin_family = AF_INET;
-			addr.sin_port = htons(517);
-			sendto(s, (char *)omsg, sizeof(*omsg), 0,
-				(struct sockaddr *)&addr, sizeof(addr));
-			addr.sin_port = htons(518);
-			sendto(s, (char *)nmsg, sizeof(*nmsg), 0,
-				(struct sockaddr *)&addr, sizeof(addr));
-			closesocket(s);
-
-			OTOSIN(omsg, ctl_addr)->sin_port = temp_port;
-			OTOSIN(nmsg, ctl_addr)->sin_port = temp_port;
-
-			/* delete table entry */
-			if (so == req_tbl->udp_so) {
-				temp_req = req_tbl;
-				req_tbl = req_tbl->next;
-				free(temp_req);
-			} else {
-				temp_req = req_tbl;
-				for(req = req_tbl->next; req; req = req_next) {
-					req_next = req->next;
-					if (so == req->udp_so) {
-						temp_req->next = req_next;
-						free(req);
-						break;
-					} else {
-						temp_req = req;
-					}
-				}
-			}
-		}
-
-		return;
-#endif
-
-	case EMU_CUSEEME:
-
-		/*
-		 * Cu-SeeMe emulation.
-		 * Hopefully the packet is more that 16 bytes long. We don't
-		 * do any other tests, just replace the address and port
-		 * fields.
-		 */
-		if (m->m_len >= sizeof (*cu_head)) {
-			if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)
-				return;
-			cu_head = mtod(m, struct cu_header *);
-			cu_head->s_port = addr.sin_port;
-			cu_head->so_addr = our_addr.s_addr;
-		}
-
-		return;
-	}
-}
-
 struct socket *
 udp_listen(Slirp *slirp, u_int32_t haddr, u_int hport, u_int32_t laddr,
            u_int lport, int flags)

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [Qemu-devel] Re: [PATCH] slirp: Remove UDP protocol emulation (talk, cuseeme)
  2009-07-23  0:53 [Qemu-devel] [PATCH] slirp: Remove UDP protocol emulation (talk, cuseeme) Ed Swierk
@ 2009-07-23  6:46 ` Jan Kiszka
  0 siblings, 0 replies; 2+ messages in thread
From: Jan Kiszka @ 2009-07-23  6:46 UTC (permalink / raw)
  To: Ed Swierk; +Cc: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 10941 bytes --]

Ed Swierk wrote:
> The UDP emulation code for talk has been commented out since the
> beginning of time, and unless someone who runs CU-SeeMe on qemu with
> user-mode networking can vouch that the special magic (a) is necessary
> and (b) works, let's get rid of the code.
> 
> Signed-off-by: Ed Swierk <eswierk@aristanetworks.com>
> 

As expressed before, I don't feel like I could comment on the usefulness
of the to-be-removed emulation. But if no one speaks up on this, the
patch has my ack.

Jan

> ---
> diff --git a/slirp/misc.h b/slirp/misc.h
> index c335394..da68d09 100644
> --- a/slirp/misc.h
> +++ b/slirp/misc.h
> @@ -36,11 +36,6 @@ void do_wait(int);
>  
>  #define EMU_NOCONNECT 0x10	/* Don't connect */
>  
> -/* UDP emulations */
> -#define EMU_TALK	0x1
> -#define EMU_NTALK	0x2
> -#define EMU_CUSEEME	0x3
> -
>  struct tos_t {
>  	u_int16_t lport;
>  	u_int16_t fport;
> diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
> index 5a0e6c1..e977e77 100644
> --- a/slirp/slirp_config.h
> +++ b/slirp/slirp_config.h
> @@ -2,9 +2,6 @@
>   * User definable configuration options
>   */
>  
> -/* Undefine if you don't want talk emulation */
> -#undef EMULATE_TALK
> -
>  /* Define if you want the connection to be probed */
>  /* XXX Not working yet, so ignore this for now */
>  #undef PROBE_CONN
> diff --git a/slirp/udp.c b/slirp/udp.c
> index e0a6693..a88b645 100644
> --- a/slirp/udp.c
> +++ b/slirp/udp.c
> @@ -42,7 +42,6 @@
>  #include "ip_icmp.h"
>  
>  static u_int8_t udp_tos(struct socket *so);
> -static void udp_emu(struct socket *so, struct mbuf *m);
>  
>  void
>  udp_init(Slirp *slirp)
> @@ -202,9 +201,6 @@ udp_input(register struct mbuf *m, int iphlen)
>  	/*
>  	 * Now we sendto() the packet.
>  	 */
> -	if (so->so_emu)
> -	   udp_emu(so, m);
> -
>  	if(sosendto(so,m) == -1) {
>  	  m->m_len += iphlen;
>  	  m->m_data -= iphlen;
> @@ -306,31 +302,9 @@ int udp_output(struct socket *so, struct mbuf *m,
>  int
>  udp_attach(struct socket *so)
>  {
> -  struct sockaddr_in addr;
> -
>    if((so->s = socket(AF_INET,SOCK_DGRAM,0)) != -1) {
> -    /*
> -     * Here, we bind() the socket.  Although not really needed
> -     * (sendto() on an unbound socket will bind it), it's done
> -     * here so that emulation of ytalk etc. don't have to do it
> -     */
> -    addr.sin_family = AF_INET;
> -    addr.sin_port = 0;
> -    addr.sin_addr.s_addr = INADDR_ANY;
> -    if(bind(so->s, (struct sockaddr *)&addr, sizeof(addr))<0) {
> -      int lasterrno=errno;
> -      closesocket(so->s);
> -      so->s=-1;
> -#ifdef _WIN32
> -      WSASetLastError(lasterrno);
> -#else
> -      errno=lasterrno;
> -#endif
> -    } else {
> -      /* success, insert in queue */
> -      so->so_expire = curtime + SO_EXPIRE;
> -      insque(so, &so->slirp->udb);
> -    }
> +    so->so_expire = curtime + SO_EXPIRE;
> +    insque(so, &so->slirp->udb);
>    }
>    return(so->s);
>  }
> @@ -344,9 +318,6 @@ udp_detach(struct socket *so)
>  
>  static const struct tos_t udptos[] = {
>  	{0, 53, IPTOS_LOWDELAY, 0},			/* DNS */
> -	{517, 517, IPTOS_LOWDELAY, EMU_TALK},	/* talk */
> -	{518, 518, IPTOS_LOWDELAY, EMU_NTALK},	/* ntalk */
> -	{0, 7648, IPTOS_LOWDELAY, EMU_CUSEEME},	/* Cu-Seeme */
>  	{0, 0, 0, 0}
>  };
>  
> @@ -367,239 +338,6 @@ udp_tos(struct socket *so)
>  	return 0;
>  }
>  
> -#ifdef EMULATE_TALK
> -#include "talkd.h"
> -#endif
> -
> -/*
> - * Here, talk/ytalk/ntalk requests must be emulated
> - */
> -static void
> -udp_emu(struct socket *so, struct mbuf *m)
> -{
> -	struct sockaddr_in addr;
> -	socklen_t addrlen = sizeof(addr);
> -#ifdef EMULATE_TALK
> -	CTL_MSG_OLD *omsg;
> -	CTL_MSG *nmsg;
> -	char buff[sizeof(CTL_MSG)];
> -	u_char type;
> -
> -struct talk_request {
> -	struct talk_request *next;
> -	struct socket *udp_so;
> -	struct socket *tcp_so;
> -} *req;
> -
> -	static struct talk_request *req_tbl = 0;
> -
> -#endif
> -
> -struct cu_header {
> -	uint16_t	d_family;		// destination family
> -	uint16_t	d_port;			// destination port
> -	uint32_t	d_addr;			// destination address
> -	uint16_t	s_family;		// source family
> -	uint16_t	s_port;			// source port
> -	uint32_t	so_addr;		// source address
> -	uint32_t	seqn;			// sequence number
> -	uint16_t	message;		// message
> -	uint16_t	data_type;		// data type
> -	uint16_t	pkt_len;		// packet length
> -} *cu_head;
> -
> -	switch(so->so_emu) {
> -
> -#ifdef EMULATE_TALK
> -	 case EMU_TALK:
> -	 case EMU_NTALK:
> -		/*
> -		 * Talk emulation. We always change the ctl_addr to get
> -		 * some answers from the daemon. When an ANNOUNCE comes,
> -		 * we send LEAVE_INVITE to the local daemons. Also when a
> -		 * DELETE comes, we send copies to the local daemons.
> -		 */
> -		if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)
> -			return;
> -
> -#define	IS_OLD	(so->so_emu == EMU_TALK)
> -
> -#define COPY_MSG(dest, src) { dest->type = src->type; \
> -			      dest->id_num = src->id_num; \
> -			      dest->pid = src->pid; \
> -			      dest->addr = src->addr; \
> -			      dest->ctl_addr = src->ctl_addr; \
> -			      memcpy(&dest->l_name, &src->l_name, NAME_SIZE_OLD); \
> -			      memcpy(&dest->r_name, &src->r_name, NAME_SIZE_OLD); \
> -	         	      memcpy(&dest->r_tty, &src->r_tty, TTY_SIZE); }
> -
> -#define OTOSIN(ptr, field) ((struct sockaddr_in *)&ptr->field)
> -/* old_sockaddr to sockaddr_in */
> -
> -
> -		if (IS_OLD) {  		/* old talk */
> -			omsg = mtod(m, CTL_MSG_OLD*);
> -			nmsg = (CTL_MSG *) buff;
> -			type = omsg->type;
> -			OTOSIN(omsg, ctl_addr)->sin_port = addr.sin_port;
> -			OTOSIN(omsg, ctl_addr)->sin_addr = our_addr;
> -                        pstrcpy(omsg->l_name, NAME_SIZE_OLD, getlogin());
> -		} else {		/* new talk */
> -			omsg = (CTL_MSG_OLD *) buff;
> -			nmsg = mtod(m, CTL_MSG *);
> -			type = nmsg->type;
> -			OTOSIN(nmsg, ctl_addr)->sin_port = addr.sin_port;
> -			OTOSIN(nmsg, ctl_addr)->sin_addr = our_addr;
> -                        pstrcpy(nmsg->l_name, NAME_SIZE_OLD, getlogin());
> -		}
> -
> -		if (type == LOOK_UP)
> -			return;		/* for LOOK_UP this is enough */
> -
> -		if (IS_OLD) {		/* make a copy of the message */
> -			COPY_MSG(nmsg, omsg);
> -			nmsg->vers = 1;
> -			nmsg->answer = 0;
> -		} else
> -			COPY_MSG(omsg, nmsg);
> -
> -		/*
> -		 * If if is an ANNOUNCE message, we go through the
> -		 * request table to see if a tcp port has already
> -		 * been redirected for this socket. If not, we solisten()
> -		 * a new socket and add this entry to the table.
> -		 * The port number of the tcp socket and our IP
> -		 * are put to the addr field of the message structures.
> -		 * Then a LEAVE_INVITE is sent to both local daemon
> -		 * ports, 517 and 518. This is why we have two copies
> -		 * of the message, one in old talk and one in new talk
> -		 * format.
> -		 */
> -
> -		if (type == ANNOUNCE) {
> -			int s;
> -			u_short temp_port;
> -
> -			for(req = req_tbl; req; req = req->next)
> -				if (so == req->udp_so)
> -					break;  	/* found it */
> -
> -			if (!req) {	/* no entry for so, create new */
> -				req = (struct talk_request *)
> -					malloc(sizeof(struct talk_request));
> -				req->udp_so = so;
> -				req->tcp_so = solisten(0,
> -					OTOSIN(omsg, addr)->sin_addr.s_addr,
> -					OTOSIN(omsg, addr)->sin_port,
> -					SS_FACCEPTONCE);
> -				req->next = req_tbl;
> -				req_tbl = req;
> -			}
> -
> -			/* replace port number in addr field */
> -			addrlen = sizeof(addr);
> -			getsockname(req->tcp_so->s,
> -					(struct sockaddr *) &addr,
> -					&addrlen);
> -			OTOSIN(omsg, addr)->sin_port = addr.sin_port;
> -			OTOSIN(omsg, addr)->sin_addr = our_addr;
> -			OTOSIN(nmsg, addr)->sin_port = addr.sin_port;
> -			OTOSIN(nmsg, addr)->sin_addr = our_addr;
> -
> -			/* send LEAVE_INVITEs */
> -			temp_port = OTOSIN(omsg, ctl_addr)->sin_port;
> -			OTOSIN(omsg, ctl_addr)->sin_port = 0;
> -			OTOSIN(nmsg, ctl_addr)->sin_port = 0;
> -			omsg->type = nmsg->type = LEAVE_INVITE;
> -
> -			s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
> -			addr.sin_addr = our_addr;
> -			addr.sin_family = AF_INET;
> -			addr.sin_port = htons(517);
> -			sendto(s, (char *)omsg, sizeof(*omsg), 0,
> -				(struct sockaddr *)&addr, sizeof(addr));
> -			addr.sin_port = htons(518);
> -			sendto(s, (char *)nmsg, sizeof(*nmsg), 0,
> -				(struct sockaddr *) &addr, sizeof(addr));
> -			closesocket(s) ;
> -
> -			omsg->type = nmsg->type = ANNOUNCE;
> -			OTOSIN(omsg, ctl_addr)->sin_port = temp_port;
> -			OTOSIN(nmsg, ctl_addr)->sin_port = temp_port;
> -		}
> -
> -		/*
> -		 * If it is a DELETE message, we send a copy to the
> -		 * local daemons. Then we delete the entry corresponding
> -		 * to our socket from the request table.
> -		 */
> -
> -		if (type == DELETE) {
> -			struct talk_request *temp_req, *req_next;
> -			int s;
> -			u_short temp_port;
> -
> -			temp_port = OTOSIN(omsg, ctl_addr)->sin_port;
> -			OTOSIN(omsg, ctl_addr)->sin_port = 0;
> -			OTOSIN(nmsg, ctl_addr)->sin_port = 0;
> -
> -			s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
> -			addr.sin_addr = our_addr;
> -			addr.sin_family = AF_INET;
> -			addr.sin_port = htons(517);
> -			sendto(s, (char *)omsg, sizeof(*omsg), 0,
> -				(struct sockaddr *)&addr, sizeof(addr));
> -			addr.sin_port = htons(518);
> -			sendto(s, (char *)nmsg, sizeof(*nmsg), 0,
> -				(struct sockaddr *)&addr, sizeof(addr));
> -			closesocket(s);
> -
> -			OTOSIN(omsg, ctl_addr)->sin_port = temp_port;
> -			OTOSIN(nmsg, ctl_addr)->sin_port = temp_port;
> -
> -			/* delete table entry */
> -			if (so == req_tbl->udp_so) {
> -				temp_req = req_tbl;
> -				req_tbl = req_tbl->next;
> -				free(temp_req);
> -			} else {
> -				temp_req = req_tbl;
> -				for(req = req_tbl->next; req; req = req_next) {
> -					req_next = req->next;
> -					if (so == req->udp_so) {
> -						temp_req->next = req_next;
> -						free(req);
> -						break;
> -					} else {
> -						temp_req = req;
> -					}
> -				}
> -			}
> -		}
> -
> -		return;
> -#endif
> -
> -	case EMU_CUSEEME:
> -
> -		/*
> -		 * Cu-SeeMe emulation.
> -		 * Hopefully the packet is more that 16 bytes long. We don't
> -		 * do any other tests, just replace the address and port
> -		 * fields.
> -		 */
> -		if (m->m_len >= sizeof (*cu_head)) {
> -			if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)
> -				return;
> -			cu_head = mtod(m, struct cu_header *);
> -			cu_head->s_port = addr.sin_port;
> -			cu_head->so_addr = our_addr.s_addr;
> -		}
> -
> -		return;
> -	}
> -}
> -
>  struct socket *
>  udp_listen(Slirp *slirp, u_int32_t haddr, u_int hport, u_int32_t laddr,
>             u_int lport, int flags)
> 
> 
> 
> 
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-07-23  6:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-23  0:53 [Qemu-devel] [PATCH] slirp: Remove UDP protocol emulation (talk, cuseeme) Ed Swierk
2009-07-23  6:46 ` [Qemu-devel] " Jan Kiszka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).