1/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2/* dbus-server-win.c Server implementation for WIN network protocols. 3 * 4 * Copyright (C) 2002, 2003, 2004 Red Hat Inc. 5 * Copyright (C) 2007 Ralf Habacker <ralf.habacker@freenet.de> 6 * 7 * Licensed under the Academic Free License version 2.1 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 * 23 */ 24 25#include <config.h> 26#include "dbus-internals.h" 27#include "dbus-server-win.h" 28#include "dbus-server-socket.h" 29 30/** 31 * @defgroup DBusServerWin DBusServer implementations for Windows 32 * @ingroup DBusInternals 33 * @brief Implementation details of DBusServer on Windows 34 * 35 * @{ 36 */ 37 38/** 39 * Tries to interpret the address entry in a platform-specific 40 * way, creating a platform-specific server type if appropriate. 41 * Sets error if the result is not OK. 42 * 43 * @param entry an address entry 44 * @param server_p location to store a new DBusServer, or #NULL on failure. 45 * @param error location to store rationale for failure on bad address 46 * @returns the outcome 47 * 48 */ 49DBusServerListenResult 50_dbus_server_listen_platform_specific (DBusAddressEntry *entry, 51 DBusServer **server_p, 52 DBusError *error) 53{ 54 const char *method; 55 56 *server_p = NULL; 57 58 method = dbus_address_entry_get_method (entry); 59 60 if (strcmp (method, "nonce-tcp") == 0) 61 { 62 const char *host; 63 const char *port; 64 const char *bind; 65 const char *family; 66 67 host = dbus_address_entry_get_value (entry, "host"); 68 bind = dbus_address_entry_get_value (entry, "bind"); 69 port = dbus_address_entry_get_value (entry, "port"); 70 family = dbus_address_entry_get_value (entry, "family"); 71 72 *server_p = _dbus_server_new_for_tcp_socket (host, bind, port, 73 family, error, TRUE); 74 75 if (*server_p) 76 { 77 _DBUS_ASSERT_ERROR_IS_CLEAR(error); 78 return DBUS_SERVER_LISTEN_OK; 79 } 80 else 81 { 82 _DBUS_ASSERT_ERROR_IS_SET(error); 83 return DBUS_SERVER_LISTEN_DID_NOT_CONNECT; 84 } 85 } 86 else 87 { 88 _DBUS_ASSERT_ERROR_IS_CLEAR(error); 89 return DBUS_SERVER_LISTEN_NOT_HANDLED; 90} 91} 92 93/** @} */ 94 95