loudmouth/lm-blocking-resolver.c
author Mikael Berthe <mikael@lilotux.net>
Mon, 25 Jan 2016 18:35:10 +0100
changeset 685 dfa02c1c7fda
parent 677 a6a41aec40f2
child 690 7ccf2113ec5f
permissions -rw-r--r--
Bumped version to 1.5.2
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 -*- */
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     2
/*
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     3
 * Copyright (C) 2008 Imendio AB
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     4
 *
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public License as
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     7
 * published by the Free Software Foundation; either version 2 of the
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     8
 * License, or (at your option) any later version.
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
     9
 *
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    13
 * Lesser General Public License for more details.
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    14
 *
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    16
 * License along with this program; if not, write to the
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    17
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    18
 * Boston, MA 02111-1307, USA.
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    19
 */
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    20
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    21
#include <config.h>
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    22
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    23
#include <string.h>
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    24
#include <sys/types.h>
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    25
#include <netdb.h>
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    26
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    27
/* Needed on Mac OS X */
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    28
#if HAVE_ARPA_NAMESER_COMPAT_H
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    29
#include <arpa/nameser_compat.h>
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    30
#endif
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    31
677
a6a41aec40f2 include netinet/in.h in resolver
Christoph Moench-Tegeder <cmt@burggraben.net>
parents: 624
diff changeset
    32
#include <netinet/in.h>
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    33
#include <arpa/nameser.h>
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    34
#include <resolv.h>
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    35
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    36
#include "lm-marshal.h"
462
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
    37
#include "lm-misc.h"
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
    38
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    39
#include "lm-blocking-resolver.h"
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    40
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    41
#define SRV_LEN 8192
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
    42
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    43
#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), LM_TYPE_BLOCKING_RESOLVER, LmBlockingResolverPriv))
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    44
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    45
typedef struct LmBlockingResolverPriv LmBlockingResolverPriv;
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    46
struct LmBlockingResolverPriv {
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
    GSource *idle_source;
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    48
};
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    49
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    50
static void     blocking_resolver_finalize    (GObject       *object);
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    51
static void     blocking_resolver_lookup      (LmResolver    *resolver);
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    52
static void     blocking_resolver_cancel      (LmResolver    *resolver);
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    53
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    54
G_DEFINE_TYPE (LmBlockingResolver, lm_blocking_resolver, LM_TYPE_RESOLVER)
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    55
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    56
static void
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    57
lm_blocking_resolver_class_init (LmBlockingResolverClass *class)
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    58
{
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
    59
    GObjectClass    *object_class   = G_OBJECT_CLASS (class);
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
    60
    LmResolverClass *resolver_class = LM_RESOLVER_CLASS (class);
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    61
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
    62
    object_class->finalize = blocking_resolver_finalize;
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    63
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
    64
    resolver_class->lookup = blocking_resolver_lookup;
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
    65
    resolver_class->cancel = blocking_resolver_cancel;
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
    66
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
    67
    g_type_class_add_private (object_class,
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
    68
                              sizeof (LmBlockingResolverPriv));
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    69
}
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    70
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    71
static void
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    72
lm_blocking_resolver_init (LmBlockingResolver *blocking_resolver)
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    73
{
624
a94013a4555d Fix some gcc warnings
Mikael Berthe <mikael@lilotux.net>
parents: 587
diff changeset
    74
    (void) GET_PRIV (blocking_resolver);
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    75
}
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    76
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    77
static void
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    78
blocking_resolver_finalize (GObject *object)
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    79
{
624
a94013a4555d Fix some gcc warnings
Mikael Berthe <mikael@lilotux.net>
parents: 587
diff changeset
    80
    (void) GET_PRIV (object);
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    81
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
    82
    /* Ensure we don't have an idle around */
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
    83
    blocking_resolver_cancel (LM_RESOLVER (object));
460
4d978afca525 More work on the blocking resolver
Mikael Hallendal <micke@imendio.com>
parents: 459
diff changeset
    84
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
    85
    (G_OBJECT_CLASS (lm_blocking_resolver_parent_class)->finalize) (object);
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    86
}
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
    87
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
    88
static gboolean
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
    89
blocking_resolver_lookup_host (LmBlockingResolver *resolver)
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
    90
{
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
    91
    gchar           *host;
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
    92
    struct addrinfo  req;
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
    93
    struct addrinfo *ans;
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
    94
    int              err;
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
    95
    gboolean         retval = TRUE;
462
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
    96
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
    97
    g_object_get (resolver, "host", &host, NULL);
462
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
    98
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
    99
    /* Lookup */
462
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
   100
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
    memset (&req, 0, sizeof(req));
587
7c793095138e Fixed Retry Behavior, Fixed Crash on IPv6 Addresses, Log and Exit On No Host
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 586
diff changeset
   102
    req.ai_family   = PF_UNSPEC;
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
   103
    req.ai_socktype = SOCK_STREAM;
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
   104
    req.ai_protocol = IPPROTO_TCP;
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   105
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
   106
    err = getaddrinfo (host, NULL, &req, &ans);
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   107
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
   108
    if (err != 0) {
547
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   109
        _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_FAILED,
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   110
                                 NULL);
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   111
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   112
        retval = FALSE;
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
   113
    }
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   114
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
   115
    if (ans == NULL) {
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
   116
        /* Couldn't find any results */
585
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   117
        g_object_ref (resolver);
547
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   118
        _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_FAILED,
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   119
                                 NULL);
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   120
585
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   121
        g_object_unref (resolver);
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   122
        retval = FALSE;
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
   123
    }
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   124
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
   125
    /* FIXME: How to set and iterate the results */
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
   126
    /*priv->results    = ans;
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
   127
      priv->cur_result = ans; */
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   128
585
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   129
    if (retval) {
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   130
        g_object_ref (resolver);
477
09fe238533b9 Put a ref on the resolver while calling the callback.
Mikael Hallendal <micke@imendio.com>
parents: 473
diff changeset
   131
585
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   132
        _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK,
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   133
                                 ans);
467
943afa7cfac5 The blocking dns resolver now works as expected.
Mikael Hallendal <micke@imendio.com>
parents: 464
diff changeset
   134
585
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   135
        g_object_unref (resolver);
bccdb423a8e9 Fixed Resolver Memory Management Issues (by creating less severe issues)
Jayson Vantuyl <jvantuyl@engineyard.com>
parents: 584
diff changeset
   136
    }
477
09fe238533b9 Put a ref on the resolver while calling the callback.
Mikael Hallendal <micke@imendio.com>
parents: 473
diff changeset
   137
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
   138
    g_free (host);
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   139
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   140
    return retval;
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   141
}
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   142
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   143
static gboolean
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   144
blocking_resolver_lookup_service (LmBlockingResolver *resolver)
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   145
{
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
   146
    gchar *domain;
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
   147
    gchar *service;
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
   148
    gchar *protocol;
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
   149
    gchar *srv;
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
   150
    gchar *new_server = NULL;
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
   151
    guint  new_port = 0;
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
   152
    gboolean  result;
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
   153
    unsigned char    srv_ans[SRV_LEN];
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
   154
    int              len;
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   155
    gboolean         retval = TRUE;
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   156
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
   157
    g_object_get (resolver,
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
   158
                  "domain", &domain,
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
   159
                  "service", &service,
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
   160
                  "protocol", &protocol,
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
   161
                  NULL);
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   162
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
   163
    srv = _lm_resolver_create_srv_string (domain, service, protocol);
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   164
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
   165
    res_init ();
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   166
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
   167
    len = res_query (srv, C_IN, T_SRV, srv_ans, SRV_LEN);
462
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
   168
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   169
    result = _lm_resolver_parse_srv_response (srv_ans, len,
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
   170
                                              &new_server, &new_port);
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
   171
    if (result == FALSE) {
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   172
        retval = FALSE;
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
   173
    }
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   174
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   175
    g_object_set (resolver,
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
   176
                  "host", new_server,
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
   177
                  "port", new_port,
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
   178
                  NULL);
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   179
547
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   180
    g_object_ref (resolver);
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   181
    _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK, NULL);
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   182
    g_object_unref (resolver);
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   183
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
   184
    /* Lookup the new server and the new port */
547
692c7753f64e Improved the resolvers a bit.
Mikael Hallendal <micke@imendio.com>
parents: 518
diff changeset
   185
   /* blocking_resolver_lookup_host (resolver); */
463
158aebfa7b7c Moved MIN_PORT and MAX_PORT to lm-internals.h and renamed them.
Mikael Hallendal <micke@imendio.com>
parents: 462
diff changeset
   186
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
   187
    g_free (new_server);
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
   188
    g_free (srv);
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
   189
    g_free (domain);
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
   190
    g_free (service);
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
   191
    g_free (protocol);
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   192
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   193
    return retval;
461
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   194
}
f7c5f4b5dadd Added protocol for srv lookups
Mikael Hallendal <micke@imendio.com>
parents: 460
diff changeset
   195
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   196
static gboolean
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   197
blocking_resolver_idle_lookup (LmBlockingResolver *resolver)
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   198
{
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
   199
    LmBlockingResolverPriv *priv = GET_PRIV (resolver);
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
   200
    gint                    type;
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   201
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
   202
    /* Start the DNS querying */
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   203
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
   204
    /* Decide if we are going to lookup a srv or host */
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
   205
    g_object_get (resolver, "type", &type, NULL);
460
4d978afca525 More work on the blocking resolver
Mikael Hallendal <micke@imendio.com>
parents: 459
diff changeset
   206
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
   207
    switch (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
   208
    case LM_RESOLVER_HOST:
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
   209
        blocking_resolver_lookup_host (resolver);
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
   210
        break;
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
   211
    case LM_RESOLVER_SRV:
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
   212
        blocking_resolver_lookup_service (resolver);
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
   213
        break;
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
   214
    };
460
4d978afca525 More work on the blocking resolver
Mikael Hallendal <micke@imendio.com>
parents: 459
diff changeset
   215
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
   216
    /* End of DNS querying */
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
   217
    priv->idle_source = NULL;
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
   218
    return FALSE;
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   219
}
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   220
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   221
static void
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   222
blocking_resolver_lookup (LmResolver *resolver)
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   223
{
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
   224
    LmBlockingResolverPriv *priv;
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
   225
    GMainContext           *context;
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   226
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
   227
    g_return_if_fail (LM_IS_BLOCKING_RESOLVER (resolver));
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   228
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
   229
    priv = GET_PRIV (resolver);
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   230
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
   231
    g_object_get (resolver, "context", &context, NULL);
462
11f85004aa32 Added GMainContext to LmResolver and use lm_misc_add_idle to add an idle in it.
Mikael Hallendal <micke@imendio.com>
parents: 461
diff changeset
   232
581
757d716a8f8a Applied ksmith's DNS patch.
Samuel Tesla <stesla@engineyard.com>
parents: 578
diff changeset
   233
    priv->idle_source = lm_misc_add_idle (context,
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
   234
                                          (GSourceFunc) blocking_resolver_idle_lookup,
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
   235
                                          resolver);
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   236
}
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   237
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   238
static void
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   239
blocking_resolver_cancel (LmResolver *resolver)
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   240
{
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
   241
    LmBlockingResolverPriv *priv;
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   242
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
   243
    g_return_if_fail (LM_IS_BLOCKING_RESOLVER (resolver));
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   244
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
   245
    priv = GET_PRIV (resolver);
459
e6e0a95d108a Implemented the idle "spawn" in LmBlockingResolver.
Mikael Hallendal <micke@imendio.com>
parents: 458
diff changeset
   246
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
   247
    if (priv->idle_source) {
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
   248
        g_source_destroy (priv->idle_source);
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
   249
        priv->idle_source = NULL;
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
   250
    }
458
0cd193ceddaa Added LmBlockingResolver which will handle the case when we do not have libasyncns.
Mikael Hallendal <micke@imendio.com>
parents:
diff changeset
   251
}