// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- /* Copyright (C) 2007 The giomm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include "slot_async.h" namespace Gio { #ifdef GLIBMM_EXCEPTIONS_ENABLED Socket::Socket(SocketFamily family, SocketType type, SocketProtocol protocol, const Glib::RefPtr& cancellable) #else Socket::Socket(SocketFamily family, SocketType type, SocketProtocol protocol, std::auto_ptr& error, const Glib::RefPtr& cancellable) #endif //GLIBMM_EXCEPTIONS_ENABLED : _CONSTRUCT("family", int(family), "type", int(type), "protocol", int(protocol)) { #ifdef GLIBMM_EXCEPTIONS_ENABLED init(cancellable); #else init(cancellable, error); #endif //GLIBMM_EXCEPTIONS_ENABLED } #ifdef GLIBMM_EXCEPTIONS_ENABLED Socket::Socket(int fd, const Glib::RefPtr& cancellable) #else Socket::Socket(int fd, std::auto_ptr& error, const Glib::RefPtr& cancellable) #endif //GLIBMM_EXCEPTIONS_ENABLED : _CONSTRUCT("fd", fd) { #ifdef GLIBMM_EXCEPTIONS_ENABLED init(cancellable); #else init(cancellable, error); #endif //GLIBMM_EXCEPTIONS_ENABLED } #ifdef GLIBMM_EXCEPTIONS_ENABLED // static Glib::RefPtr Socket::create(SocketFamily family, SocketType type, SocketProtocol protocol, const Glib::RefPtr& cancellable) #else Glib::RefPtr Socket::create(SocketFamily family, SocketType type, SocketProtocol protocol, std::auto_ptr& error, const Glib::RefPtr& cancellable) #endif //GLIBMM_EXCEPTIONS_ENABLED { #ifdef GLIBMM_EXCEPTIONS_ENABLED return Glib::RefPtr(new Socket(family, type, protocol, cancellable)); #else return Glib::RefPtr(new Socket(family, type, protocol, error, cancellable)); #endif //GLIBMM_EXCEPTIONS_ENABLED } #ifdef GLIBMM_EXCEPTIONS_ENABLED // static Glib::RefPtr Socket::create_from_fd(int fd, const Glib::RefPtr& cancellable) #else Glib::RefPtr Socket::create_from_fd(int fd, std::auto_ptr& error, const Glib::RefPtr& cancellable) #endif //GLIBMM_EXCEPTIONS_ENABLED { #ifdef GLIBMM_EXCEPTIONS_ENABLED return Glib::RefPtr(new Socket(fd, cancellable)); #else return Glib::RefPtr(new Socket(fd, error, cancellable)); #endif //GLIBMM_EXCEPTIONS_ENABLED } #ifdef GLIBMM_EXCEPTIONS_ENABLED void Socket::connect(const Glib::RefPtr& address) #else void Socket::connect(const Glib::RefPtr& address, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; g_socket_connect(gobj(), const_cast(Glib::unwrap(address)), 0, &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED } #ifdef GLIBMM_EXCEPTIONS_ENABLED Glib::RefPtr Socket::accept() #else Glib::RefPtr Socket::accept(std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; Glib::RefPtr retvalue = Glib::wrap(g_socket_accept(gobj(), 0, &(gerror))); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED return retvalue; } #ifdef GLIBMM_EXCEPTIONS_ENABLED gssize Socket::receive(char* buffer, gsize size) #else gssize Socket::receive(char* buffer, gsize size, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; gssize retvalue = g_socket_receive(gobj(), buffer, size, 0, &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED return retvalue; } #ifdef GLIBMM_EXCEPTIONS_ENABLED gssize Socket::send(const gchar* buffer, gsize size) #else gssize Socket::send(const gchar* buffer, gsize size, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; gssize retvalue = g_socket_send(gobj(), buffer, size, 0, &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED return retvalue; } #ifdef GLIBMM_EXCEPTIONS_ENABLED gssize Socket::send_to(const Glib::RefPtr& address, const char* buffer, gsize size) #else gssize Socket::send_to(const Glib::RefPtr& address, const char* buffer, gsize size, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; gssize retvalue = g_socket_send_to(gobj(), const_cast(Glib::unwrap(address)), buffer, size, 0, &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED return retvalue; } #ifdef GLIBMM_EXCEPTIONS_ENABLED void Socket::condition_wait(Glib::IOCondition condition) #else void Socket::condition_wait(Glib::IOCondition condition, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; g_socket_condition_wait(gobj(), ((GIOCondition)(condition)), 0, &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED } #ifdef GLIBMM_EXCEPTIONS_ENABLED gssize Socket::receive_from(Glib::RefPtr& address, char* buffer, gsize size, const Glib::RefPtr& cancellable) #else gssize Socket::receive_from(Glib::RefPtr& address, char* buffer, gsize size, const Glib::RefPtr& cancellable, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; GSocketAddress* caddr = 0; gssize retvalue = g_socket_receive_from(gobj(), &caddr, buffer, size, const_cast(Glib::unwrap(cancellable)), &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED if (caddr) address = Glib::wrap (caddr); return retvalue; } #ifdef GLIBMM_EXCEPTIONS_ENABLED gssize Socket::receive_from(Glib::RefPtr& address, char* buffer, gsize size) #else gssize Socket::receive_from(Glib::RefPtr& address, char* buffer, gsize size, std::auto_ptr& error) #endif //GLIBMM_EXCEPTIONS_ENABLED { GError* gerror = 0; GSocketAddress* caddr = 0; gssize retvalue = g_socket_receive_from(gobj(), &caddr, buffer, size, 0, &(gerror)); #ifdef GLIBMM_EXCEPTIONS_ENABLED if(gerror) ::Glib::Error::throw_exception(gerror); #else if(gerror) error = ::Glib::Error::throw_exception(gerror); #endif //GLIBMM_EXCEPTIONS_ENABLED if (caddr) address = Glib::wrap (caddr); return retvalue; } } // namespace Gio