1/* $NetBSD$ */ 2 3/*++ 4/* NAME 5/* tok822_resolve 3 6/* SUMMARY 7/* address resolving, client interface 8/* SYNOPSIS 9/* #include <tok822.h> 10/* 11/* void tok822_resolve(addr, reply) 12/* TOK822 *addr; 13/* RESOLVE_REPLY *reply; 14/* 15/* void tok822_resolve_from(sender, addr, reply) 16/* const char *sender; 17/* TOK822 *addr; 18/* RESOLVE_REPLY *reply; 19/* DESCRIPTION 20/* tok822_resolve() takes an address token tree and finds out the 21/* transport to deliver via, the next-hop host on that transport, 22/* and the recipient relative to that host. 23/* 24/* tok822_resolve_from() allows the caller to specify sender context 25/* that will be used to look up sender-dependent relayhost information. 26/* SEE ALSO 27/* resolve_clnt(3) basic resolver client interface 28/* LICENSE 29/* .ad 30/* .fi 31/* The Secure Mailer license must be distributed with this software. 32/* AUTHOR(S) 33/* Wietse Venema 34/* IBM T.J. Watson Research 35/* P.O. Box 704 36/* Yorktown Heights, NY 10598, USA 37/*--*/ 38 39/* System library. */ 40 41#include <sys_defs.h> 42 43/* Utility library. */ 44 45#include <vstring.h> 46#include <msg.h> 47 48/* Global library. */ 49 50#include "resolve_clnt.h" 51#include "tok822.h" 52 53/* tok822_resolve - address rewriting interface */ 54 55void tok822_resolve_from(const char *sender, TOK822 *addr, 56 RESOLVE_REPLY *reply) 57{ 58 VSTRING *intern_form = vstring_alloc(100); 59 60 if (addr->type != TOK822_ADDR) 61 msg_panic("tok822_resolve: non-address token type: %d", addr->type); 62 63 /* 64 * Internalize the token tree and ship it to the resolve service. 65 * Shipping string forms is much simpler than shipping parse trees. 66 */ 67 tok822_internalize(intern_form, addr->head, TOK822_STR_DEFL); 68 resolve_clnt_query_from(sender, vstring_str(intern_form), reply); 69 if (msg_verbose) 70 msg_info("tok822_resolve: from=%s addr=%s -> chan=%s, host=%s, rcpt=%s", 71 sender, 72 vstring_str(intern_form), vstring_str(reply->transport), 73 vstring_str(reply->nexthop), vstring_str(reply->recipient)); 74 75 vstring_free(intern_form); 76} 77