summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsc2000-12-04 13:24:57 +0000
committersc2000-12-04 13:24:57 +0000
commit7108a17ad542085c9a95a97d8d307ce2bbc9add9 (patch)
treed4ba8a48eca871cc6c4f9554a5d3d8a956be586e
parent2455534347596bd4ccf415c9cdf6d2e42a98fb72 (diff)
downloadivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.zip
ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.tar.gz
ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.tar.bz2
ivy-league-7108a17ad542085c9a95a97d8d307ce2bbc9add9.tar.xz
New constructor
Added experimental DiscoverPeers
-rw-r--r--comm/IrdaAddress.cc58
-rw-r--r--comm/IrdaAddress.h15
2 files changed, 55 insertions, 18 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;
+}
diff --git a/comm/IrdaAddress.h b/comm/IrdaAddress.h
index c73b9f1..68b3655 100644
--- a/comm/IrdaAddress.h
+++ b/comm/IrdaAddress.h
@@ -1,16 +1,15 @@
/*
- * The Unix Channel
+ * Ivy League
*
- * by Michel Beaudouin-Lafon
+ * IRDA Addresses,
*
- * Copyright 1990-1997
- * Laboratoire de Recherche en Informatique (LRI)
+ * Copyright 2000
+ * Centre d'Etudes de la Navigation Aerienne (CENA)
*
- * IRDA Addresses,
* by Stephane Chatty
*
* $Id$
- * $CurLog$
+ *
*/
#ifndef IrdaAddress_H_
@@ -19,14 +18,16 @@
#include "cplus_bugs.h"
#include "Address.h"
#include "ivl/String.h"
+template <class ITEM> class IvlListOf;
class IvlIrdaAddress : public IvlAddress {
protected:
- IvlString Service;
struct sockaddr_irda Addr;
public:
+static int DiscoverPeers (int, IvlListOf<IvlIrdaAddress>&);
IvlIrdaAddress (const char* = 0); // service
+ IvlIrdaAddress (lword, const char* = 0); // address, service
~IvlIrdaAddress ();
int Family ();