diff options
author | sc | 2000-12-04 13:24:57 +0000 |
---|---|---|
committer | sc | 2000-12-04 13:24:57 +0000 |
commit | 7108a17ad542085c9a95a97d8d307ce2bbc9add9 (patch) | |
tree | d4ba8a48eca871cc6c4f9554a5d3d8a956be586e /comm/IrdaAddress.cc | |
parent | 2455534347596bd4ccf415c9cdf6d2e42a98fb72 (diff) | |
download | ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.zip ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.tar.gz ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.tar.bz2 ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.tar.xz |
New constructor
Added experimental DiscoverPeers
Diffstat (limited to 'comm/IrdaAddress.cc')
-rw-r--r-- | comm/IrdaAddress.cc | 58 |
1 files changed, 47 insertions, 11 deletions
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 <stdio.h> #include <memory.h> +#include <linux/irda.h> +#include <sys/socket.h> #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 <IvlIrdaAddress>& 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; +} |