• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/samba-3.5.8/libcli/nbt/

Lines Matching refs:req

36 static int nbt_name_request_destructor(struct nbt_name_request *req)
38 if (req->state == NBT_REQUEST_SEND) {
39 DLIST_REMOVE(req->nbtsock->send_queue, req);
41 if (req->state == NBT_REQUEST_WAIT) {
42 req->nbtsock->num_pending--;
44 if (req->name_trn_id != 0 && !req->is_reply) {
45 idr_remove(req->nbtsock->idr, req->name_trn_id);
46 req->name_trn_id = 0;
48 if (req->te) {
49 talloc_free(req->te);
50 req->te = NULL;
52 if (req->nbtsock->send_queue == NULL) {
53 EVENT_FD_NOT_WRITEABLE(req->nbtsock->fde);
55 if (req->nbtsock->num_pending == 0 &&
56 req->nbtsock->incoming.handler == NULL) {
57 EVENT_FD_NOT_READABLE(req->nbtsock->fde);
68 struct nbt_name_request *req = nbtsock->send_queue;
72 while ((req = nbtsock->send_queue)) {
75 len = req->encoded.length;
76 status = socket_sendto(nbtsock->sock, &req->encoded, &len,
77 req->dest);
85 DLIST_REMOVE(nbtsock->send_queue, req);
86 req->state = NBT_REQUEST_WAIT;
87 if (req->is_reply) {
88 talloc_free(req);
100 DLIST_REMOVE(nbtsock->send_queue, req);
101 nbt_name_request_destructor(req);
102 req->status = status;
103 req->state = NBT_REQUEST_ERROR;
105 if (req->async.fn) {
106 req->async.fn(req);
107 } else if (req->is_reply) {
108 talloc_free(req);
120 struct nbt_name_request *req = talloc_get_type(private_data,
123 if (req->num_retries != 0) {
124 req->num_retries--;
125 req->te = event_add_timed(req->nbtsock->event_ctx, req,
126 timeval_add(&t, req->timeout, 0),
127 nbt_name_socket_timeout, req);
128 if (req->state != NBT_REQUEST_SEND) {
129 req->state = NBT_REQUEST_SEND;
130 DLIST_ADD_END(req->nbtsock->send_queue, req,
133 EVENT_FD_WRITEABLE(req->nbtsock->fde);
137 nbt_name_request_destructor(req);
138 if (req->num_replies == 0) {
139 req->state = NBT_REQUEST_TIMEOUT;
140 req->status = NT_STATUS_IO_TIMEOUT;
142 req->state = NBT_REQUEST_DONE;
143 req->status = NT_STATUS_OK;
145 if (req->async.fn) {
146 req->async.fn(req);
147 } else if (req->is_reply) {
148 talloc_free(req);
166 struct nbt_name_request *req;
221 req = (struct nbt_name_request *)idr_find(nbtsock->idr,
223 if (req == NULL) {
234 talloc_steal(req, packet);
235 talloc_steal(req, src);
237 nbt_name_socket_handle_response_packet(req, packet, src);
240 void nbt_name_socket_handle_response_packet(struct nbt_name_request *req,
248 if (req->received_wack || packet->ancount < 1) {
249 nbt_name_request_destructor(req);
250 req->status = NT_STATUS_INVALID_NETWORK_RESPONSE;
251 req->state = NBT_REQUEST_ERROR;
254 talloc_free(req->te);
257 req->num_retries = 0;
258 req->received_wack = true;
275 req->timeout = ttl;
276 req->te = event_add_timed(req->nbtsock->event_ctx, req,
277 timeval_current_ofs(req->timeout, 0),
278 nbt_name_socket_timeout, req);
283 req->replies = talloc_realloc(req, req->replies, struct nbt_name_reply, req->num_replies+1);
284 if (req->replies == NULL) {
285 nbt_name_request_destructor(req);
286 req->state = NBT_REQUEST_ERROR;
287 req->status = NT_STATUS_NO_MEMORY;
291 talloc_steal(req, src);
292 req->replies[req->num_replies].dest = src;
293 talloc_steal(req, packet);
294 req->replies[req->num_replies].packet = packet;
295 req->num_replies++;
298 if (req->allow_multiple_replies &&
299 req->num_replies < NBT_MAX_REPLIES) {
303 nbt_name_request_destructor(req);
304 req->state = NBT_REQUEST_DONE;
305 req->status = NT_STATUS_OK;
308 if (req->async.fn) {
309 req->async.fn(req);
383 struct nbt_name_request *req;
387 req = talloc_zero(nbtsock, struct nbt_name_request);
388 if (req == NULL) goto failed;
390 req->nbtsock = nbtsock;
391 req->allow_multiple_replies = allow_multiple_replies;
392 req->state = NBT_REQUEST_SEND;
393 req->is_reply = false;
394 req->timeout = timeout;
395 req->num_retries = retries;
396 req->dest = dest;
397 if (talloc_reference(req, dest) == NULL) goto failed;
401 id = idr_get_new_random(req->nbtsock->idr, req, UINT16_MAX);
403 if (idr_find(req->nbtsock->idr, request->name_trn_id)) goto failed;
404 id = idr_get_new_above(req->nbtsock->idr, req, request->name_trn_id,
410 req->name_trn_id = id;
412 req->te = event_add_timed(nbtsock->event_ctx, req,
413 timeval_current_ofs(req->timeout, 0),
414 nbt_name_socket_timeout, req);
416 talloc_set_destructor(req, nbt_name_request_destructor);
418 ndr_err = ndr_push_struct_blob(&req->encoded, req,
419 req->nbtsock->iconv_convenience,
424 DLIST_ADD_END(nbtsock->send_queue, req, struct nbt_name_request *);
428 req->dest->addr, req->dest->port));
434 return req;
437 talloc_free(req);
449 struct nbt_name_request *req;
452 req = talloc_zero(nbtsock, struct nbt_name_request);
453 NT_STATUS_HAVE_NO_MEMORY(req);
455 req->nbtsock = nbtsock;
456 req->dest = dest;
457 if (talloc_reference(req, dest) == NULL) goto failed;
458 req->state = NBT_REQUEST_SEND;
459 req->is_reply = true;
461 talloc_set_destructor(req, nbt_name_request_destructor);
467 ndr_err = ndr_push_struct_blob(&req->encoded, req,
468 req->nbtsock->iconv_convenience,
472 talloc_free(req);
476 DLIST_ADD_END(nbtsock->send_queue, req, struct nbt_name_request *);
483 talloc_free(req);
490 NTSTATUS nbt_name_request_recv(struct nbt_name_request *req)
492 if (!req) return NT_STATUS_NO_MEMORY;
494 while (req->state < NBT_REQUEST_DONE) {
495 if (event_loop_once(req->nbtsock->event_ctx) != 0) {
496 req->state = NBT_REQUEST_ERROR;
497 req->status = NT_STATUS_UNEXPECTED_NETWORK_ERROR;
501 return req->status;