src/lib/tcp_internal.h
author Tero Marttila <terom@fixme.fi>
Thu, 28 May 2009 01:17:36 +0300
branchnew-lib-errors
changeset 219 cefec18b8268
parent 177 src/tcp_internal.h@a74b55104fb9
permissions -rw-r--r--
some of the lib/transport stuff compiles
219
cefec18b8268 some of the lib/transport stuff compiles
Tero Marttila <terom@fixme.fi>
parents: 177
diff changeset
     1
#ifndef LIBQMSK_TCP_INTERNAL_H
cefec18b8268 some of the lib/transport stuff compiles
Tero Marttila <terom@fixme.fi>
parents: 177
diff changeset
     2
#define LIBQMSK_TCP_INTERNAL_H
177
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
 * @file
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
 * Internal TCP interface for implementations
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
#include "tcp.h"
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
#include "resolve.h"
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
#include "transport_fd.h"
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
#include "transport_internal.h"
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
#include "service_internal.h"
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
#include "error.h"
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
#include <event2/event.h>
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
#include <event2/util.h>
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
 * Create a new socket() using the given addr's family/socktype/protocol and return it.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
 * In case of errors, this returns -err_t
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
 * @param addr the addrinfo to create the socket for
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
 * @param err returned error info
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
 * @return new fd on success, -err_t on error
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
int tcp_sock_create (const struct addrinfo *addr, error_t *err);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
 * Return the socket's current error code via err->extra.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
 * In case getting the socket error code itself fails, this will return normal error code/info.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
 * Otherwise, this will return SUCCESS, with the errno value stored in err->extra.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
err_t tcp_sock_error (evutil_socket_t sock, error_t *err);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
 * TCP transport type
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
extern const struct transport_type tcp_transport_type;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
 * Base TCP transport 
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
 * XXX: currently just the same as transport_fd, but this will probably change
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
struct tcp_transport {
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    /** Base FD-based implementation */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    struct transport_fd base_fd;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
};
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
 * Initialize the tcp_transport state.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
 * This initializes the transport_fd base using the global sock_ctx::ev_base and the given socket.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
void tcp_transport_init (struct tcp_transport *trans, evutil_socket_t sock);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
 * Create a new tcp_transport with the given sock.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
 * For convenience, this will also make the sock nonblocking.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
 * In case of errors, this will the socket.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
 * @param trans_ptr returned tcp_transport
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
 * @param info the transport user settings
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
 * @param sock the unused TCP socket
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
 * @param err returned error info
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
err_t tcp_transport_create (struct tcp_transport **trans_ptr, const struct transport_info *info, evutil_socket_t sock, error_t *err);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
 * The transport as now connected, this sets up the intitial user settings, and invokes the callback.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
 * XXX: this does an 'indirect' call to transport_connected().
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
 * @param err returned error info
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
err_t tcp_transport_connected (struct tcp_transport *trans, error_t *err);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
 * Deinitialize the transport state, terminating the connection and releasing resources.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
void tcp_transport_deinit (struct tcp_transport *trans);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
 * Deinitialize and free the given tcp_transport
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
void tcp_transport_destroy (struct tcp_transport *trans);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
 * TCP client transport type
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
extern const struct transport_type tcp_client_type;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
 * TCP client state
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
struct tcp_client {
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    /** Base transport stuff */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
    struct tcp_transport base_trans;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    /** The resolver lookup result for the async connect process */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    struct resolve_result rr;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
};
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
 * Initialize the tcp_client state
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
void tcp_client_init (struct tcp_client *client);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
 * Attempt to connect asyncronously to the given hostname/service. Once a connection has been established, this will
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
 * call transport_connected(), so you can register transport_methods::_connected if layering on top of TCP.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
 * In case of errors while starting the async connect process, an error code will be returned. If the connect fails
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
 * later on, transport_connected() will be called with the error code.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
 * The sock must have been initialized using sock_tcp_init().
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
 *
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
 * @param client the unconnected TCP client socket to connect with
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
 * @param hostname the hostname to resolve
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
 * @param service the service to connect to
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
 * @param err returned error info for immediate errors
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
err_t tcp_client_connect_async (struct tcp_client *client, const char *hostname, const char *service, error_t *err);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
 * Deinitialize the tcp_client's state, including the tcp_transport state.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
void tcp_client_deinit (struct tcp_client *client);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
 * TCP service type
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
extern const struct service_type tcp_server_type;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
 * TCP service state
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
struct tcp_server {
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
    /** Base service state */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
    struct service base_service;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
    
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    /** The input event with our listen() socket */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    struct event *ev;
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
};
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
 * The listen() backlog
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
#define TCP_SERVER_BACKLOG 5
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
 * Open the listening socket on the given interface/service.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
err_t tcp_server_listen (struct tcp_server *serv, const char *interface, const char *service, error_t *err);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
/**
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
 * Release the tcp_server's state, and cleanup the struct.
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
 */
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
void tcp_server_deinit (struct tcp_server *serv);
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
a74b55104fb9 rename sock_tcp to tcp_{transport,client}, fix irc_net_connect to use log_err/tcp_connect
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
#endif /* TCP_INTERNAL_H */