loudmouth/lm-internals.h
author Mikael Hallendal <micke@imendio.com>
Sat, 25 Oct 2008 16:21:50 +0200
changeset 545 58954d98a7f9
parent 518 cdd6a0c5b439
child 546 590cf5cd6ea1
permissions -rw-r--r--
Removed the async_connect_waiting and blocking states from LmConnection. As a first step of cleaning up the network code underlying LmConnection I want to make the blocking and non-blocking calls be as similar as possible. The socket should be able to connect in asynchronous manner even if we want to block on the open call since the mainloop iteration will handle the "block" for lm_connection_open_and_block.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
516
4dd3aa6b83e5 Change the tab width to 4 steps in the emacs headers
Mikael Hallendal <micke@imendio.com>
parents: 515
diff changeset
     1
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     2
/*
99
81e9d035de02 2004-10-05 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 96
diff changeset
     3
 * Copyright (C) 2003 Imendio AB
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     4
 *
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public License as
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     7
 * published by the Free Software Foundation; either version 2 of the
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     8
 * License, or (at your option) any later version.
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
     9
 *
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    13
 * Lesser General Public License for more details.
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    14
 *
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    16
 * License along with this program; if not, write to the
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    17
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    18
 * Boston, MA 02111-1307, USA.
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    19
 */
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    20
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    21
/* Private functions that are internal to the library */
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    22
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    23
#ifndef __LM_INTERNALS_H__
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    24
#define __LM_INTERNALS_H__
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    25
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    26
#include <glib.h>
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    27
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    28
#include <sys/types.h>
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    29
429
7a841741e83a Style fixes
Mikael Hallendal <micke@imendio.com>
parents: 414
diff changeset
    30
#include "lm-connection.h"
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    31
#include "lm-message.h"
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    32
#include "lm-message-handler.h"
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    33
#include "lm-message-node.h"
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    34
#include "lm-sock.h"
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    35
#include "lm-old-socket.h"
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    36
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 431
diff changeset
    37
#define LM_MIN_PORT 1
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 431
diff changeset
    38
#define LM_MAX_PORT 65536
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 431
diff changeset
    39
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    40
#ifndef G_OS_WIN32
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    41
typedef int LmOldSocketT;
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    42
#else  /* G_OS_WIN32 */
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    43
typedef SOCKET LmOldSocketT;
140
103227122f45 2006-04-19 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 137
diff changeset
    44
#endif /* G_OS_WIN32 */
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    45
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    46
typedef struct {
518
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    47
    gpointer       func;
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    48
    gpointer       user_data;
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    49
    GDestroyNotify notify;
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    50
} LmCallback;
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
    51
82
a32b54e654e2 2004-03-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 68
diff changeset
    52
typedef struct {
518
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    53
    LmConnection    *connection;
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    54
    LmOldSocket        *socket;
82
a32b54e654e2 2004-03-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 68
diff changeset
    55
518
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    56
    /* struct to save resolved address */
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    57
    struct addrinfo *current_addr;
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    58
    LmOldSocketT         fd;
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    59
    GIOChannel      *io_channel;
82
a32b54e654e2 2004-03-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 68
diff changeset
    60
} LmConnectData;
a32b54e654e2 2004-03-17 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 68
diff changeset
    61
500
915cd386918e Added _lm_connection_get_context as internal function.
Mikael Hallendal <micke@imendio.com>
parents: 476
diff changeset
    62
GMainContext *   _lm_connection_get_context       (LmConnection       *conn);
501
5f71592beac8 Added _lm_connection_get_server that returns the server string.
Mikael Hallendal <micke@imendio.com>
parents: 500
diff changeset
    63
/* Need to free the return value */
5f71592beac8 Added _lm_connection_get_server that returns the server string.
Mikael Hallendal <micke@imendio.com>
parents: 500
diff changeset
    64
gchar *          _lm_connection_get_server        (LmConnection       *conn);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    65
gboolean         _lm_old_socket_failed_with_error (LmConnectData         *data,
518
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
    66
                                                   int                    error);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    67
gboolean         _lm_old_socket_failed            (LmConnectData         *data);
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    68
void             _lm_old_socket_succeeded         (LmConnectData         *data);
196
209bfa124066 Imported LmConnection refactor from old repository.
Mikael Hallendal <micke@imendio.com>
parents: 155
diff changeset
    69
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    70
LmCallback *     _lm_utils_new_callback       (gpointer               func, 
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    71
                                               gpointer               data,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    72
                                               GDestroyNotify         notify);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    73
void             _lm_utils_free_callback      (LmCallback            *cb);
86
cb65c1ec57a7 2004-08-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 84
diff changeset
    74
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    75
gchar *          _lm_utils_generate_id        (void);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    76
gchar *          
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    77
_lm_utils_hostname_to_punycode                (const gchar           *hostname);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    78
const gchar *    _lm_message_type_to_string   (LmMessageType          type);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    79
const gchar * 
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    80
_lm_message_sub_type_to_string                (LmMessageSubType       type);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    81
LmMessage *      _lm_message_new_from_node    (LmMessageNode         *node);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    82
void            
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    83
_lm_message_node_add_child_node               (LmMessageNode         *node,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    84
                                               LmMessageNode         *child);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    85
LmMessageNode *  _lm_message_node_new         (const gchar           *name);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    86
void             _lm_debug_init               (void);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    87
gboolean         _lm_proxy_connect_cb         (GIOChannel            *source,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    88
                                               GIOCondition           condition,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    89
                                               gpointer               data);
66
577d5059b718 2004-01-15 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 57
diff changeset
    90
LmHandlerResult    
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    91
_lm_message_handler_handle_message            (LmMessageHandler      *handler,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    92
                                               LmConnection          *conn,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    93
                                               LmMessage             *messag);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    94
gboolean         _lm_sock_library_init        (void);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    95
void             _lm_sock_library_shutdown    (void);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    96
void             _lm_sock_set_blocking        (LmOldSocketT              sock,
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
    97
                                               gboolean               block);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    98
void             _lm_sock_shutdown            (LmOldSocketT              sock);
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
    99
void             _lm_sock_close               (LmOldSocketT              sock);
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
   100
LmOldSocketT         _lm_sock_makesocket         (int                    af,
518
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
   101
                                                  int                    type,
cdd6a0c5b439 Went over all of the files and made sure they all were indented the same way.
Mikael Hallendal <micke@imendio.com>
parents: 516
diff changeset
   102
                                                  int                    protocol);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
   103
int              _lm_sock_connect             (LmOldSocketT              sock,
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   104
                                               const struct sockaddr *name,
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   105
                                               int                    namelen);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   106
gboolean         _lm_sock_is_blocking_error   (int                    err);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   107
gboolean         _lm_sock_is_blocking_success (int                    err);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   108
int              _lm_sock_get_last_error      (void);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
   109
void             _lm_sock_get_error           (LmOldSocketT              sock, 
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   110
                                               void                  *error, 
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   111
                                               socklen_t             *len);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   112
const gchar *    _lm_sock_get_error_str       (int                    err);
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   113
const gchar * 
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   114
_lm_sock_addrinfo_get_error_str               (int                    err);
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
   115
gchar       *    _lm_sock_get_local_host      (LmOldSocketT              sock);
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
   116
292
bb7269466be2 Use TCP keepalives on Linux if available; if not, fallback to manual keepalives.
Senko Rasic <senko.rasic@collabora.co.uk>
parents: 256
diff changeset
   117
#ifdef USE_TCP_KEEPALIVES
431
04577a6b7ff7 Renamed LmSocket to LmOldSocket to make room for a new socket abstraction layer.
Mikael Hallendal <micke@imendio.com>
parents: 429
diff changeset
   118
gboolean         _lm_sock_set_keepalive       (LmOldSocketT              sock,
414
76bb882301ad Fixed header file style in internal header file
Mikael Hallendal <micke@imendio.com>
parents: 407
diff changeset
   119
                                               int                    delay);
292
bb7269466be2 Use TCP keepalives on Linux if available; if not, fallback to manual keepalives.
Senko Rasic <senko.rasic@collabora.co.uk>
parents: 256
diff changeset
   120
#endif /* USE_TCP_KEEPALIVES */
bb7269466be2 Use TCP keepalives on Linux if available; if not, fallback to manual keepalives.
Senko Rasic <senko.rasic@collabora.co.uk>
parents: 256
diff changeset
   121
1
50e230cf7818 Initial revision
hallski <hallski>
parents:
diff changeset
   122
#endif /* __LM_INTERNALS_H__ */