la.sin_port=htons(st->port);
snprintf(sbuf, sizeof(sbuf), "udp:%s-%s",
- saddr_to_string(&la), saddr_to_string(&ca->sin));
+ saddr_to_string(&la), saddr_to_string(&ca->priv.sin));
return sbuf;
}
+static bool_t addr_construct(void *commst, struct comm_addr *ca,
+ const struct sockaddr_in *sin) {
+ struct udp *st=commst;
+ FILLZERO(*ca);
+ ca->comm=&st->ops;
+ ca->priv.sin=*sin;
+ return True;
+}
+
static int udp_beforepoll(void *state, struct pollfd *fds, int *nfds_io,
int *timeout_io)
{
struct comm_addr ca;
FILLZERO(ca);
ca.comm=&st->ops;
- ca.sin=from;
+ ca.priv.sin=from;
if (n->fn(n->state, st->rbuf, &ca)) {
done=True;
break;
if (st->use_proxy) {
sa=buf->start-8;
- memcpy(sa,&dest->sin.sin_addr,4);
+ memcpy(sa,&dest->priv.sin.sin_addr,4);
memset(sa+4,0,4);
- memcpy(sa+6,&dest->sin.sin_port,2);
+ memcpy(sa+6,&dest->priv.sin.sin_port,2);
sendto(st->fd,sa,buf->size+8,0,(struct sockaddr *)&st->proxy,
sizeof(st->proxy));
} else {
sendto(st->fd, buf->start, buf->size, 0,
- (struct sockaddr *)&dest->sin, sizeof(dest->sin));
+ (struct sockaddr *)&dest->priv.sin, sizeof(dest->priv.sin));
}
return True;
st->ops.request_notify=request_notify;
st->ops.release_notify=release_notify;
st->ops.sendmsg=udp_sendmsg;
+ st->ops.addr_construct=addr_construct;
st->ops.addr_to_string=addr_to_string;
st->port=0;
st->use_proxy=False;