Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Apr 2018 10:15:58 +0000 (UTC)
From:      Vladimir Kondratyev <wulf@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r333109 - head/lib/libsdp
Message-ID:  <201804301015.w3UAFwe1000660@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: wulf
Date: Mon Apr 30 10:15:58 2018
New Revision: 333109
URL: https://svnweb.freebsd.org/changeset/base/333109

Log:
  libsdp: Add method that returns actual source BD_ADDR of SDP session.
  
  Reviewed by:	emax, wblock (docs)
  Differential Revision:	https://reviews.freebsd.org/D13456

Modified:
  head/lib/libsdp/sdp.3
  head/lib/libsdp/sdp.h
  head/lib/libsdp/session.c

Modified: head/lib/libsdp/sdp.3
==============================================================================
--- head/lib/libsdp/sdp.3	Mon Apr 30 09:31:09 2018	(r333108)
+++ head/lib/libsdp/sdp.3	Mon Apr 30 10:15:58 2018	(r333109)
@@ -25,7 +25,7 @@
 .\" $Id: sdp.3,v 1.1 2003/09/07 20:34:19 max Exp $
 .\" $FreeBSD$
 .\"
-.Dd May 27, 2005
+.Dd April 30, 2018
 .Dt SDP 3
 .Os
 .Sh NAME
@@ -45,6 +45,7 @@
 .Nm sdp_open_local ,
 .Nm sdp_close ,
 .Nm sdp_error ,
+.Nm sdp_get_lcaddr ,
 .Nm sdp_search ,
 .Nm sdp_attr2desc ,
 .Nm sdp_uuid2desc
@@ -75,6 +76,8 @@
 .Ft int32_t
 .Fn sdp_error "void *xs"
 .Ft int32_t
+.Fn sdp_get_lcaddr "void *xs" "bdaddr_t *l"
+.Ft int32_t
 .Fo sdp_search
 .Fa "void *xs" "uint32_t plen" "uint16_t const *pp" "uint32_t alen"
 .Fa "uint32_t const *ap" "uint32_t vlen" "sdp_attr_t *vp"
@@ -188,6 +191,22 @@ calling
 function.
 .Pp
 The
+.Fn sdp_get_lcaddr
+function returns the SDP session actual source BD_ADDR.
+The
+.Fa xs
+parameter should point to a valid SDP session object created with
+.Fn sdp_open .
+The
+.Fa l
+parameter should point to a buffer in which the value for the requested BD_ADDR
+is to be returned.
+.Fn sdp_get_lcaddr
+function is useful if the current SDP session has been opened with the
+.Dv NG_HCI_BDADDR_ANY
+value passed as a source address.
+.Pp
+The
 .Fn sdp_search
 function is used to perform SDP Service Search Attribute Request.
 The
@@ -394,9 +413,10 @@ If the new SDP object was created then caller is still
 to check if there was connection error.
 .Pp
 The
+.Fn sdp_get_lcaddr ,
 .Fn sdp_search ,
 .Fn sdp_register_service ,
-.Fn sdp_unregister_service
+.Fn sdp_unregister_service ,
 and
 .Fn sdp_change_service
 functions return non-zero value on error.

Modified: head/lib/libsdp/sdp.h
==============================================================================
--- head/lib/libsdp/sdp.h	Mon Apr 30 09:31:09 2018	(r333108)
+++ head/lib/libsdp/sdp.h	Mon Apr 30 10:15:58 2018	(r333109)
@@ -532,6 +532,7 @@ void *             sdp_open       (bdaddr_t const *l, 
 void *             sdp_open_local (char const *control);
 int32_t            sdp_close      (void *xs);
 int32_t            sdp_error      (void *xs);
+int32_t            sdp_get_lcaddr (void *xs, bdaddr_t *l);
 
 int32_t            sdp_search     (void *xs,
                                    uint32_t plen, uint16_t const *pp,

Modified: head/lib/libsdp/session.c
==============================================================================
--- head/lib/libsdp/session.c	Mon Apr 30 09:31:09 2018	(r333108)
+++ head/lib/libsdp/session.c	Mon Apr 30 10:15:58 2018	(r333109)
@@ -180,3 +180,25 @@ sdp_error(void *xss)
 
 	return ((ss != NULL)? ss->error : EINVAL);
 }
+
+int32_t
+sdp_get_lcaddr(void *xss, bdaddr_t *l)
+{
+	sdp_session_p		ss = (sdp_session_p) xss;
+	struct sockaddr_l2cap	sa;
+	socklen_t		size;
+
+	if (l == NULL || ss == NULL || ss->flags & SDP_SESSION_LOCAL) {
+		ss->error = EINVAL;
+		goto fail;
+	}
+
+	size = sizeof(sa);
+	if (getsockname(ss->s, (struct sockaddr *)&sa, &size) == 0) {
+		bdaddr_copy(l, &sa.l2cap_bdaddr);
+		ss->error = 0;
+	} else
+		ss->error = errno;
+fail:
+	return ((ss->error == 0) ? 0 : -1);
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201804301015.w3UAFwe1000660>