Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP5:GA
xrdp.27289
xrdp-avahi.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xrdp-avahi.diff of Package xrdp.27289
diff --git a/configure.ac b/configure.ac index 47212ec..b011897 100644 --- a/configure.ac +++ b/configure.ac @@ -9,6 +9,7 @@ AC_PROG_CC AC_C_CONST AC_PROG_LIBTOOL +PKG_CHECK_MODULES(AVAHI, avahi-client >= 0.6.4) PKG_PROG_PKG_CONFIG if test "x$PKG_CONFIG" = "x"; then AC_MSG_ERROR([please install pkg-config]) diff --git a/xrdp/Makefile.am b/xrdp/Makefile.am index a259ef3..2cbb762 100644 --- a/xrdp/Makefile.am +++ b/xrdp/Makefile.am @@ -12,7 +12,9 @@ AM_CPPFLAGS = \ -DXRDP_SOCKET_PATH=\"${socketdir}\" \ -I$(top_builddir) \ -I$(top_srcdir)/common \ - -I$(top_srcdir)/libxrdp + -I$(top_srcdir)/libxrdp \ + $(AVAHI_CFLAGS) + XRDP_EXTRA_LIBS = @@ -46,6 +48,7 @@ xrdp_SOURCES = \ lang.c \ xrdp.c \ xrdp.h \ + xrdp_avahi.c \ xrdp_bitmap.c \ xrdp_cache.c \ xrdp_encoder.c \ @@ -63,7 +66,8 @@ xrdp_SOURCES = \ xrdp_LDADD = \ $(top_builddir)/common/libcommon.la \ $(top_builddir)/libxrdp/libxrdp.la \ - $(XRDP_EXTRA_LIBS) + $(XRDP_EXTRA_LIBS) \ + $(AVAHI_LIBS) xrdpsysconfdir=$(sysconfdir)/xrdp diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h index 82e8a57..ae70874 100644 --- a/xrdp/xrdp.h +++ b/xrdp/xrdp.h @@ -163,6 +163,8 @@ void xrdp_listen_main_loop(struct xrdp_listen* self); int xrdp_listen_test(void); +int +xrdp_listen_get_port(char* port, int port_bytes); /* xrdp_region.c */ struct xrdp_region* @@ -514,3 +516,8 @@ server_add_char_alpha(struct xrdp_mod* mod, int font, int character, int server_session_info(struct xrdp_mod *mod, const char *data, int data_bytes); +/* xrdp_avahi.c */ +int +xrdp_avahi_init(void); +void +xrdp_avahi_fini(void); diff --git a/xrdp/xrdp_avahi.c b/xrdp/xrdp_avahi.c index e69de29..642a333 100644 --- a/xrdp/xrdp_avahi.c +++ b/xrdp/xrdp_avahi.c @@ -0,0 +1,115 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + xrdp: A Remote Desktop Protocol server. + Copyright (C) Novell, Inc. 2008 + + avahi integration + +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <avahi-client/client.h> +#include <avahi-client/publish.h> +#include <avahi-common/thread-watch.h> + +static AvahiClient *client = NULL; +static AvahiThreadedPoll *threaded_poll = NULL; +static AvahiEntryGroup *avahi_group = NULL; + +static const char *_service_name = "RDP service on %s"; + +static void +avahi_client_callback (AvahiClient *c, + AvahiClientState state, + void *userdata) +{ + switch (state) { + case AVAHI_CLIENT_S_RUNNING: + avahi_group = avahi_entry_group_new (c, 0, 0); + if (avahi_group) + { + char hname[512]; + char name[576]; + char port[8]; + /* dummy parameters */ + char address[256]; + struct xrdp_startup_params* startup_param = {(const char[]) {""}, 0, 0, 0, 0, 0, 0, 0}; + + if (gethostname (hname, sizeof (hname))) + break; + + sprintf (name, _service_name, hname); + + xrdp_listen_get_port_address (port, sizeof (port), + address, sizeof (address), + startup_param); + + avahi_entry_group_add_service (avahi_group, + AVAHI_IF_UNSPEC, + AVAHI_PROTO_UNSPEC, + 0, + name, + "_rdp._tcp", + 0, + 0, + atoi (port), + NULL); + + avahi_entry_group_commit (avahi_group); + } + break; + case AVAHI_CLIENT_FAILURE: + case AVAHI_CLIENT_S_COLLISION: + case AVAHI_CLIENT_CONNECTING: + break; + case AVAHI_CLIENT_S_REGISTERING: + if (avahi_group) + avahi_entry_group_reset (avahi_group); + default: + break; + } +} + +int +xrdp_avahi_init (void) +{ + if (!(threaded_poll = avahi_threaded_poll_new ())) + return 1; + + if (!(client = avahi_client_new (avahi_threaded_poll_get (threaded_poll), + 0, + avahi_client_callback, + NULL, + NULL))) + return 1; + + if (avahi_threaded_poll_start (threaded_poll) < 0) + return 1; + + return 0; +} + +void +xrdp_avahi_fini (void) +{ + avahi_threaded_poll_stop (threaded_poll); + if (avahi_group) + avahi_entry_group_free (avahi_group); + avahi_client_free (client); + avahi_threaded_poll_free (threaded_poll); +} diff --git a/xrdp/xrdp_listen.c b/xrdp/xrdp_listen.c index 0fbe61f..ed0af63 100644 --- a/xrdp/xrdp_listen.c +++ b/xrdp/xrdp_listen.c @@ -149,7 +149,7 @@ xrdp_process_run(void *in_val) } /*****************************************************************************/ -static int +int xrdp_listen_get_port_address(char *port, int port_bytes, char *address, int address_bytes, int *tcp_nodelay, int *tcp_keepalive,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor