From 7108a17ad542085c9a95a97d8d307ce2bbc9add9 Mon Sep 17 00:00:00 2001 From: sc Date: Mon, 4 Dec 2000 13:24:57 +0000 Subject: New constructor Added experimental DiscoverPeers --- comm/IrdaAddress.cc | 58 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 11 deletions(-) (limited to 'comm/IrdaAddress.cc') diff --git a/comm/IrdaAddress.cc b/comm/IrdaAddress.cc index 4beceb2..9896564 100644 --- a/comm/IrdaAddress.cc +++ b/comm/IrdaAddress.cc @@ -1,34 +1,46 @@ /* - * The Unix Channel + * Ivy League * - * by Michel Beaudouin-Lafon + * IRDA Addresses, * - * Copyright 1990-2000 - * Laboratoire de Recherche en Informatique (LRI) + * Copyright 2000 + * Centre d'Etudes de la Navigation Aerienne (CENA) * - * IRDA Addresses, * by Stephane Chatty * * $Id$ - * $CurLog$ + * */ #include "cplus_bugs.h" #include "IrdaAddress.h" +#include "ivl/List.h" #include #include +#include +#include #ifndef AF_IRDA #define AF_IRDA 23 #endif /* AF_IRDA */ IvlIrdaAddress :: IvlIrdaAddress (const char* service) -: IvlAddress (), - Service (service ? service : "OBEX") +: IvlAddress () +{ + Addr.sir_family = AF_IRDA; + strncpy (Addr.sir_name, service ? service : "OBEX", 25); + Addr.sir_lsap_sel = LSAP_ANY; + Valid = true; +} + + +IvlIrdaAddress :: IvlIrdaAddress (lword addr, const char* service) +: IvlAddress () { Addr.sir_family = AF_IRDA; - strncpy (Addr.sir_name, Service, 25); + strncpy (Addr.sir_name, service ? service : "OBEX", 25); Addr.sir_lsap_sel = LSAP_ANY; + Addr.sir_addr = addr; Valid = true; } @@ -63,7 +75,31 @@ char* IvlIrdaAddress :: StrRepr (char* buf) { if (! buf) - buf = new char [ strlen (Service) + 1 + 5]; - sprintf (buf, "IRDA:%s", (const char*) Service); + buf = new char [ strlen (Addr.sir_name) + 1 + 5]; + sprintf (buf, "IRDA:%s:0x%08x", Addr.sir_name, Addr.sir_addr); return buf; } + +int +IvlIrdaAddress :: DiscoverPeers (int fd, IvlListOf & al) +{ + al.Clear (); + + socklen_t len = 1024; + byte buf[1024]; + struct irda_device_list *l = (struct irda_device_list *) buf; + getsockopt (fd, SOL_IRLMP, IRLMP_ENUMDEVICES, buf, &len); + + + if (len <= 0) { + fprintf (stderr, "no device found\n"); + return 0; + } + + struct irda_device_info* d = l->dev; + for (int i = 0; i < l->len ; ++i, ++d) { + fprintf (stderr, "found %s at [0x%08x, 0x%08x]\n", d->info, d->saddr, d->daddr); + al.Append (new IvlIrdaAddress (d->daddr)); + } + return l->len; +} -- cgit v1.1