00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __AWHANDLER_DNS__
00024 #define __AWHANDLER_DNS__
00025
00026 #include "sysnet.h"
00027 #include "monitor.h"
00028 #include "wire.h"
00029
00031
00032
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00100 typedef struct {
00101
00102 aw_event_sig_t
00103 service,
00104 noservice,
00105 triptime;
00106
00107 u_int32_t
00108 statefull;
00109
00110
00111
00112 } aw_dnshandler_events_t;
00113
00117 typedef enum {
00118
00119 AW_DNSHANDLER_IDLE,
00120 AW_DNSHANDLER_WAIT_READ,
00121 AW_DNSHANDLER_DONE_READ
00122
00123 } aw_dnshandler_state_cd_t;
00124
00125
00129 typedef struct {
00130
00131 aw_dnshandler_state_cd_t
00132 state_cd;
00133
00134 aw_event_t
00135 *current_event;
00136
00137 int32_t
00138 sfd;
00139
00140
00141 aw_timestamp_t
00142 starttime;
00143
00144
00145 u_int32_t
00146 tries;
00147
00148
00149 int32_t
00150 service;
00151
00152 } aw_dnshandler_state_t;
00153
00157 typedef struct {
00158
00159 aw_handler_t
00160 handler_header;
00161
00162 aw_dnshandler_state_t
00163 state;
00164
00165 aw_dnshandler_events_t
00166 events;
00167
00168 struct sockaddr_in
00169 whereto_addr;
00170
00171
00172 aw_address_t
00173 timeout_event_id;
00174
00175
00176 aw_alarm_sched_t
00177 timeout_sched;
00178
00179
00180
00181 u_int32_t
00182 maxretries;
00183
00184 byte_t
00185 *host;
00186
00187 } aw_dnshandler_t ;
00188
00201 aw_dnshandler_t *aw_create_dnshandler(const aw_dnshandler_events_t *events,
00202 const byte_t *hostname,
00203 aw_timestamp_t timeout,
00204 u_int32_t maxretries,
00205 int32_t (*regevent)(aw_handler_t *h, aw_address_t *eventid, u_int32_t index),
00206 int32_t (*regmaskevent)(aw_handler_t *h, aw_address_t *eventid, u_int32_t index),
00207 const aw_alarm_sched_t *sched,
00208 aw_logger_t *logger
00209 );
00210
00215 void aw_free_dnshandler(aw_dnshandler_t *p);
00216
00220 aw_handler_t *aw_wire_dnshandler(aw_wire_mkhandler_args_t *args);
00221
00222
00223 #endif