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