1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 /* 3 * Copyright (C) 2000-2003, Ximian, Inc. 4 */ 5 6 #ifndef __SOUP_SOCKET_H__ 7 #define __SOUP_SOCKET_H__ 1 8 9 #include <libsoup/soup-types.h> 10 11 G_BEGIN_DECLS 12 13 #define SOUP_TYPE_SOCKET (soup_socket_get_type ()) 14 #define SOUP_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUP_TYPE_SOCKET, SoupSocket)) 15 #define SOUP_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOUP_TYPE_SOCKET, SoupSocketClass)) 16 #define SOUP_IS_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOUP_TYPE_SOCKET)) 17 #define SOUP_IS_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SOUP_TYPE_SOCKET)) 18 #define SOUP_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_SOCKET, SoupSocketClass)) 19 20 struct _SoupSocket { 21 GObject parent; 22 23 }; 24 25 typedef struct { 26 GObjectClass parent_class; 27 28 /* signals */ 29 void (*readable) (SoupSocket *sock); 30 void (*writable) (SoupSocket *sock); 31 void (*disconnected) (SoupSocket *sock); 32 33 void (*new_connection) (SoupSocket *listener, SoupSocket *new_sock); 34 35 /* Padding for future expansion */ 36 void (*_libsoup_reserved1) (void); 37 void (*_libsoup_reserved2) (void); 38 void (*_libsoup_reserved3) (void); 39 void (*_libsoup_reserved4) (void); 40 } SoupSocketClass; 41 42 #define SOUP_SOCKET_LOCAL_ADDRESS "local-address" 43 #define SOUP_SOCKET_REMOTE_ADDRESS "remote-address" 44 #define SOUP_SOCKET_FLAG_NONBLOCKING "non-blocking" 45 #define SOUP_SOCKET_IS_SERVER "is-server" 46 #define SOUP_SOCKET_SSL_CREDENTIALS "ssl-creds" 47 #define SOUP_SOCKET_SSL_STRICT "ssl-strict" 48 #define SOUP_SOCKET_SSL_FALLBACK "ssl-fallback" 49 #define SOUP_SOCKET_TRUSTED_CERTIFICATE "trusted-certificate" 50 #define SOUP_SOCKET_ASYNC_CONTEXT "async-context" 51 #define SOUP_SOCKET_USE_THREAD_CONTEXT "use-thread-context" 52 #define SOUP_SOCKET_TIMEOUT "timeout" 53 #define SOUP_SOCKET_TLS_CERTIFICATE "tls-certificate" 54 #define SOUP_SOCKET_TLS_ERRORS "tls-errors" 55 56 typedef void (*SoupSocketCallback) (SoupSocket *sock, 57 guint status, 58 gpointer user_data); 59 60 SOUP_AVAILABLE_IN_2_4 61 GType soup_socket_get_type (void); 62 63 SOUP_AVAILABLE_IN_2_4 64 SoupSocket *soup_socket_new (const char *optname1, 65 ...) G_GNUC_NULL_TERMINATED; 66 67 SOUP_AVAILABLE_IN_2_4 68 void soup_socket_connect_async (SoupSocket *sock, 69 GCancellable *cancellable, 70 SoupSocketCallback callback, 71 gpointer user_data); 72 SOUP_AVAILABLE_IN_2_4 73 guint soup_socket_connect_sync (SoupSocket *sock, 74 GCancellable *cancellable); 75 SOUP_AVAILABLE_IN_2_4 76 int soup_socket_get_fd (SoupSocket *sock); 77 78 SOUP_AVAILABLE_IN_2_4 79 gboolean soup_socket_listen (SoupSocket *sock); 80 81 SOUP_AVAILABLE_IN_2_4 82 gboolean soup_socket_start_ssl (SoupSocket *sock, 83 GCancellable *cancellable); 84 SOUP_AVAILABLE_IN_2_4 85 gboolean soup_socket_start_proxy_ssl (SoupSocket *sock, 86 const char *ssl_host, 87 GCancellable *cancellable); 88 SOUP_AVAILABLE_IN_2_4 89 gboolean soup_socket_is_ssl (SoupSocket *sock); 90 91 SOUP_AVAILABLE_IN_2_4 92 void soup_socket_disconnect (SoupSocket *sock); 93 SOUP_AVAILABLE_IN_2_4 94 gboolean soup_socket_is_connected (SoupSocket *sock); 95 96 SOUP_AVAILABLE_IN_2_4 97 SoupAddress *soup_socket_get_local_address (SoupSocket *sock); 98 SOUP_AVAILABLE_IN_2_4 99 SoupAddress *soup_socket_get_remote_address (SoupSocket *sock); 100 101 typedef enum { 102 SOUP_SOCKET_OK, 103 SOUP_SOCKET_WOULD_BLOCK, 104 SOUP_SOCKET_EOF, 105 SOUP_SOCKET_ERROR 106 } SoupSocketIOStatus; 107 108 SOUP_AVAILABLE_IN_2_4 109 SoupSocketIOStatus soup_socket_read (SoupSocket *sock, 110 gpointer buffer, 111 gsize len, 112 gsize *nread, 113 GCancellable *cancellable, 114 GError **error); 115 SOUP_AVAILABLE_IN_2_4 116 SoupSocketIOStatus soup_socket_read_until (SoupSocket *sock, 117 gpointer buffer, 118 gsize len, 119 gconstpointer boundary, 120 gsize boundary_len, 121 gsize *nread, 122 gboolean *got_boundary, 123 GCancellable *cancellable, 124 GError **error); 125 126 SOUP_AVAILABLE_IN_2_4 127 SoupSocketIOStatus soup_socket_write (SoupSocket *sock, 128 gconstpointer buffer, 129 gsize len, 130 gsize *nwrote, 131 GCancellable *cancellable, 132 GError **error); 133 134 G_END_DECLS 135 136 #endif /* __SOUP_SOCKET_H__ */ 137