dbus-server-win.c revision 5e2a99c12c7e3531d908ed4fca82caca9cb02825
1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2783e066ce311bc293272099934ce957a7b735566Ralf Habacker/* dbus-server-win.c Server implementation for WIN network protocols.
3783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
4783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Copyright (C) 2002, 2003, 2004  Red Hat Inc.
5783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Copyright (C) 2007 Ralf Habacker <ralf.habacker@freenet.de>
6783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
7783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Licensed under the Academic Free License version 2.1
8783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
9783e066ce311bc293272099934ce957a7b735566Ralf Habacker * This program is free software; you can redistribute it and/or modify
10783e066ce311bc293272099934ce957a7b735566Ralf Habacker * it under the terms of the GNU General Public License as published by
11783e066ce311bc293272099934ce957a7b735566Ralf Habacker * the Free Software Foundation; either version 2 of the License, or
12783e066ce311bc293272099934ce957a7b735566Ralf Habacker * (at your option) any later version.
13783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
14783e066ce311bc293272099934ce957a7b735566Ralf Habacker * This program is distributed in the hope that it will be useful,
15783e066ce311bc293272099934ce957a7b735566Ralf Habacker * but WITHOUT ANY WARRANTY; without even the implied warranty of
16783e066ce311bc293272099934ce957a7b735566Ralf Habacker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17783e066ce311bc293272099934ce957a7b735566Ralf Habacker * GNU General Public License for more details.
18783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
19783e066ce311bc293272099934ce957a7b735566Ralf Habacker * You should have received a copy of the GNU General Public License
20783e066ce311bc293272099934ce957a7b735566Ralf Habacker * along with this program; if not, write to the Free Software
215baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
23783e066ce311bc293272099934ce957a7b735566Ralf Habacker */
24783e066ce311bc293272099934ce957a7b735566Ralf Habacker
25783e066ce311bc293272099934ce957a7b735566Ralf Habacker#include "dbus-internals.h"
26783e066ce311bc293272099934ce957a7b735566Ralf Habacker#include "dbus-server-win.h"
27783e066ce311bc293272099934ce957a7b735566Ralf Habacker#include "dbus-server-socket.h"
28783e066ce311bc293272099934ce957a7b735566Ralf Habacker
29783e066ce311bc293272099934ce957a7b735566Ralf Habacker/**
30783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @defgroup DBusServerWin DBusServer implementations for Windows
31783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @ingroup  DBusInternals
32783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @brief Implementation details of DBusServer on Windows
33783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
34783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @{
35783e066ce311bc293272099934ce957a7b735566Ralf Habacker */
36783e066ce311bc293272099934ce957a7b735566Ralf Habacker
37783e066ce311bc293272099934ce957a7b735566Ralf Habacker/**
38783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Tries to interpret the address entry in a platform-specific
39783e066ce311bc293272099934ce957a7b735566Ralf Habacker * way, creating a platform-specific server type if appropriate.
40783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Sets error if the result is not OK.
41783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
42783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @param entry an address entry
43783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @param server_p location to store a new DBusServer, or #NULL on failure.
44783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @param error location to store rationale for failure on bad address
45783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @returns the outcome
46783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
47783e066ce311bc293272099934ce957a7b735566Ralf Habacker */
48783e066ce311bc293272099934ce957a7b735566Ralf HabackerDBusServerListenResult
49783e066ce311bc293272099934ce957a7b735566Ralf Habacker_dbus_server_listen_platform_specific (DBusAddressEntry *entry,
50783e066ce311bc293272099934ce957a7b735566Ralf Habacker                                       DBusServer      **server_p,
51783e066ce311bc293272099934ce957a7b735566Ralf Habacker                                       DBusError        *error)
52783e066ce311bc293272099934ce957a7b735566Ralf Habacker{
535e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  const char *method;
545e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
55783e066ce311bc293272099934ce957a7b735566Ralf Habacker  *server_p  = NULL;
565e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
575e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  method = dbus_address_entry_get_method (entry);
585e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
595e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  if (strcmp (method, "nonce-tcp") == 0)
605e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld    {
615e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *host;
625e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *port;
635e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *bind;
645e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *family;
655e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
665e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      host = dbus_address_entry_get_value (entry, "host");
675e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      bind = dbus_address_entry_get_value (entry, "bind");
685e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      port = dbus_address_entry_get_value (entry, "port");
695e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      family = dbus_address_entry_get_value (entry, "family");
705e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
715e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      *server_p = _dbus_server_new_for_tcp_socket (host, bind, port,
725e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld                                                   family, error, TRUE);
735e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
745e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      if (*server_p)
755e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        {
765e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          _DBUS_ASSERT_ERROR_IS_CLEAR(error);
775e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          return DBUS_SERVER_LISTEN_OK;
785e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        }
795e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      else
805e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        {
815e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          _DBUS_ASSERT_ERROR_IS_SET(error);
825e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
835e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        }
845e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld    }
855e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  else
865e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld    {
87783e066ce311bc293272099934ce957a7b735566Ralf Habacker  _DBUS_ASSERT_ERROR_IS_CLEAR(error);
88783e066ce311bc293272099934ce957a7b735566Ralf Habacker  return DBUS_SERVER_LISTEN_NOT_HANDLED;
89783e066ce311bc293272099934ce957a7b735566Ralf Habacker}
905e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld}
91783e066ce311bc293272099934ce957a7b735566Ralf Habacker
92783e066ce311bc293272099934ce957a7b735566Ralf Habacker/** @} */
93783e066ce311bc293272099934ce957a7b735566Ralf Habacker
94