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
25dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h>
26783e066ce311bc293272099934ce957a7b735566Ralf Habacker#include "dbus-internals.h"
27783e066ce311bc293272099934ce957a7b735566Ralf Habacker#include "dbus-server-win.h"
28783e066ce311bc293272099934ce957a7b735566Ralf Habacker#include "dbus-server-socket.h"
29783e066ce311bc293272099934ce957a7b735566Ralf Habacker
30783e066ce311bc293272099934ce957a7b735566Ralf Habacker/**
31783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @defgroup DBusServerWin DBusServer implementations for Windows
32783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @ingroup  DBusInternals
33783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @brief Implementation details of DBusServer on Windows
34783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
35783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @{
36783e066ce311bc293272099934ce957a7b735566Ralf Habacker */
37783e066ce311bc293272099934ce957a7b735566Ralf Habacker
38783e066ce311bc293272099934ce957a7b735566Ralf Habacker/**
39783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Tries to interpret the address entry in a platform-specific
40783e066ce311bc293272099934ce957a7b735566Ralf Habacker * way, creating a platform-specific server type if appropriate.
41783e066ce311bc293272099934ce957a7b735566Ralf Habacker * Sets error if the result is not OK.
42783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
43783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @param entry an address entry
44783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @param server_p location to store a new DBusServer, or #NULL on failure.
45783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @param error location to store rationale for failure on bad address
46783e066ce311bc293272099934ce957a7b735566Ralf Habacker * @returns the outcome
47783e066ce311bc293272099934ce957a7b735566Ralf Habacker *
48783e066ce311bc293272099934ce957a7b735566Ralf Habacker */
49783e066ce311bc293272099934ce957a7b735566Ralf HabackerDBusServerListenResult
50783e066ce311bc293272099934ce957a7b735566Ralf Habacker_dbus_server_listen_platform_specific (DBusAddressEntry *entry,
51783e066ce311bc293272099934ce957a7b735566Ralf Habacker                                       DBusServer      **server_p,
52783e066ce311bc293272099934ce957a7b735566Ralf Habacker                                       DBusError        *error)
53783e066ce311bc293272099934ce957a7b735566Ralf Habacker{
545e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  const char *method;
555e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
56783e066ce311bc293272099934ce957a7b735566Ralf Habacker  *server_p  = NULL;
575e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
585e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  method = dbus_address_entry_get_method (entry);
595e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
605e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  if (strcmp (method, "nonce-tcp") == 0)
615e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld    {
625e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *host;
635e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *port;
645e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *bind;
655e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      const char *family;
665e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
675e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      host = dbus_address_entry_get_value (entry, "host");
685e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      bind = dbus_address_entry_get_value (entry, "bind");
695e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      port = dbus_address_entry_get_value (entry, "port");
705e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      family = dbus_address_entry_get_value (entry, "family");
715e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
725e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      *server_p = _dbus_server_new_for_tcp_socket (host, bind, port,
735e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld                                                   family, error, TRUE);
745e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld
755e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      if (*server_p)
765e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        {
775e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          _DBUS_ASSERT_ERROR_IS_CLEAR(error);
785e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          return DBUS_SERVER_LISTEN_OK;
795e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        }
805e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld      else
815e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        {
825e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          _DBUS_ASSERT_ERROR_IS_SET(error);
835e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld          return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
845e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld        }
855e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld    }
865e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld  else
875e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld    {
88783e066ce311bc293272099934ce957a7b735566Ralf Habacker  _DBUS_ASSERT_ERROR_IS_CLEAR(error);
89783e066ce311bc293272099934ce957a7b735566Ralf Habacker  return DBUS_SERVER_LISTEN_NOT_HANDLED;
90783e066ce311bc293272099934ce957a7b735566Ralf Habacker}
915e2a99c12c7e3531d908ed4fca82caca9cb02825Frank Osterfeld}
92783e066ce311bc293272099934ce957a7b735566Ralf Habacker
93783e066ce311bc293272099934ce957a7b735566Ralf Habacker/** @} */
94783e066ce311bc293272099934ce957a7b735566Ralf Habacker
95