loudmouth/lm-asyncns-resolver.c
changeset 477 09fe238533b9
parent 475 001da49d7fd1
child 478 acce45e212a6
equal deleted inserted replaced
476:08d36982e998 477:09fe238533b9
   107 	}
   107 	}
   108 
   108 
   109         priv->resolv_query = NULL;
   109         priv->resolv_query = NULL;
   110 }
   110 }
   111 
   111 
   112 static gboolean
   112 static void
   113 asyncns_resolver_done (LmResolver *resolver)
   113 asyncns_resolver_done (LmResolver *resolver)
   114 {
   114 {
   115         LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
   115         LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
   116         struct addrinfo	      *ans;
   116         struct addrinfo	      *ans;
   117 	int 		       err;
   117 	int 		       err;
   118 	gboolean               result = FALSE;
       
   119 
   118 
   120         err = asyncns_getaddrinfo_done (priv->asyncns_ctx, priv->resolv_query, &ans);
   119         err = asyncns_getaddrinfo_done (priv->asyncns_ctx, priv->resolv_query, &ans);
   121         priv->resolv_query = NULL;
   120         priv->resolv_query = NULL;
   122         /* Signal that we are done */
   121         /* Signal that we are done */
       
   122 
       
   123         g_object_ref (resolver);
   123 
   124 
   124         if (err) {
   125         if (err) {
   125                 _lm_resolver_set_result (resolver,
   126                 _lm_resolver_set_result (resolver,
   126                                          LM_RESOLVER_RESULT_FAILED, 
   127                                          LM_RESOLVER_RESULT_FAILED, 
   127                                          NULL);
   128                                          NULL);
   131                                          ans);
   132                                          ans);
   132         }
   133         }
   133 
   134 
   134         asyncns_resolver_cleanup (resolver);
   135         asyncns_resolver_cleanup (resolver);
   135 
   136 
   136 	return result;
   137         g_object_unref (resolver);
   137 }
   138 }
   138 
   139 
   139 typedef gboolean  (* LmAsyncnsResolverCallback) (LmResolver *resolver);
   140 typedef gboolean  (* LmAsyncnsResolverCallback) (LmResolver *resolver);
   140 
   141 
   141 static gboolean
   142 static gboolean
   221 	asyncns_setuserdata (priv->asyncns_ctx,
   222 	asyncns_setuserdata (priv->asyncns_ctx,
   222                              priv->resolv_query,
   223                              priv->resolv_query,
   223 			     (gpointer) asyncns_resolver_done);
   224 			     (gpointer) asyncns_resolver_done);
   224 }
   225 }
   225 
   226 
   226 static gboolean
   227 static void
   227 asyncns_resolver_srv_done (LmResolver *resolver)
   228 asyncns_resolver_srv_done (LmResolver *resolver)
   228 {
   229 {
   229         LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
   230         LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
   230         unsigned char         *srv_ans;
   231         unsigned char         *srv_ans;
   231 	int 		       srv_len;
   232 	int 		       srv_len;
   267         asyncns_resolver_cleanup (resolver);
   268         asyncns_resolver_cleanup (resolver);
   268 
   269 
   269         if (result == TRUE) {
   270         if (result == TRUE) {
   270                 asyncns_resolver_lookup_host (resolver);
   271                 asyncns_resolver_lookup_host (resolver);
   271         }
   272         }
   272 
       
   273         return FALSE;
       
   274 }
   273 }
   275 
   274 
   276 static void
   275 static void
   277 asyncns_resolver_lookup_service (LmResolver *resolver)
   276 asyncns_resolver_lookup_service (LmResolver *resolver)
   278 {
   277 {