Lines Matching refs:dst
87 static void ctrl_close_pipe(struct wpa_ctrl_dst *dst);
93 static void global_close_pipe(struct wpa_global_dst *dst);
116 struct wpa_ctrl_dst *dst, *next; in ctrl_flush_broken_pipes() local
118 dst = priv->ctrl_dst; in ctrl_flush_broken_pipes()
120 while (dst) { in ctrl_flush_broken_pipes()
121 next = dst->next; in ctrl_flush_broken_pipes()
122 if (ctrl_broken_pipe(dst->pipe, dst->used)) { in ctrl_flush_broken_pipes()
124 dst); in ctrl_flush_broken_pipes()
125 ctrl_close_pipe(dst); in ctrl_flush_broken_pipes()
127 dst = next; in ctrl_flush_broken_pipes()
134 struct wpa_ctrl_dst *dst; in ctrl_open_pipe() local
138 dst = os_zalloc(sizeof(*dst)); in ctrl_open_pipe()
139 if (dst == NULL) in ctrl_open_pipe()
141 wpa_printf(MSG_DEBUG, "CTRL: Open pipe %p", dst); in ctrl_open_pipe()
143 dst->priv = priv; in ctrl_open_pipe()
144 dst->debug_level = MSG_INFO; in ctrl_open_pipe()
145 dst->pipe = INVALID_HANDLE_VALUE; in ctrl_open_pipe()
147 dst->overlap.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL); in ctrl_open_pipe()
148 if (dst->overlap.hEvent == NULL) { in ctrl_open_pipe()
154 eloop_register_event(dst->overlap.hEvent, in ctrl_open_pipe()
155 sizeof(dst->overlap.hEvent), in ctrl_open_pipe()
156 wpa_supplicant_ctrl_iface_receive, dst, NULL); in ctrl_open_pipe()
167 dst->pipe = CreateNamedPipe(name, in ctrl_open_pipe()
175 if (dst->pipe == INVALID_HANDLE_VALUE) { in ctrl_open_pipe()
181 if (ConnectNamedPipe(dst->pipe, &dst->overlap)) { in ctrl_open_pipe()
184 CloseHandle(dst->pipe); in ctrl_open_pipe()
185 os_free(dst); in ctrl_open_pipe()
198 if (SetEvent(dst->overlap.hEvent)) in ctrl_open_pipe()
204 CloseHandle(dst->pipe); in ctrl_open_pipe()
205 os_free(dst); in ctrl_open_pipe()
209 dst->next = priv->ctrl_dst; in ctrl_open_pipe()
210 if (dst->next) in ctrl_open_pipe()
211 dst->next->prev = dst; in ctrl_open_pipe()
212 priv->ctrl_dst = dst; in ctrl_open_pipe()
217 ctrl_close_pipe(dst); in ctrl_open_pipe()
222 static void ctrl_close_pipe(struct wpa_ctrl_dst *dst) in ctrl_close_pipe() argument
224 wpa_printf(MSG_DEBUG, "CTRL: close pipe %p", dst); in ctrl_close_pipe()
226 if (dst->overlap.hEvent) { in ctrl_close_pipe()
227 eloop_unregister_event(dst->overlap.hEvent, in ctrl_close_pipe()
228 sizeof(dst->overlap.hEvent)); in ctrl_close_pipe()
229 CloseHandle(dst->overlap.hEvent); in ctrl_close_pipe()
232 if (dst->pipe != INVALID_HANDLE_VALUE) { in ctrl_close_pipe()
239 CloseHandle(dst->pipe); in ctrl_close_pipe()
242 if (dst->prev) in ctrl_close_pipe()
243 dst->prev->next = dst->next; in ctrl_close_pipe()
245 dst->priv->ctrl_dst = dst->next; in ctrl_close_pipe()
246 if (dst->next) in ctrl_close_pipe()
247 dst->next->prev = dst->prev; in ctrl_close_pipe()
249 os_free(dst->rsp_buf); in ctrl_close_pipe()
250 os_free(dst); in ctrl_close_pipe()
257 struct wpa_ctrl_dst *dst = (struct wpa_ctrl_dst *) overlap; in ctrl_iface_write_completed() local
259 "err=%d bytes=%d", dst, (int) err, (int) bytes); in ctrl_iface_write_completed()
261 ctrl_close_pipe(dst); in ctrl_iface_write_completed()
265 os_free(dst->rsp_buf); in ctrl_iface_write_completed()
266 dst->rsp_buf = NULL; in ctrl_iface_write_completed()
268 if (!ReadFileEx(dst->pipe, dst->req_buf, sizeof(dst->req_buf), in ctrl_iface_write_completed()
269 &dst->overlap, ctrl_iface_read_completed)) { in ctrl_iface_write_completed()
272 ctrl_close_pipe(dst); in ctrl_iface_write_completed()
275 wpa_printf(MSG_DEBUG, "CTRL: Overlapped read started for %p", dst); in ctrl_iface_write_completed()
279 static void wpa_supplicant_ctrl_iface_rx(struct wpa_ctrl_dst *dst, size_t len) in wpa_supplicant_ctrl_iface_rx() argument
281 struct wpa_supplicant *wpa_s = dst->priv->wpa_s; in wpa_supplicant_ctrl_iface_rx()
285 char *buf = dst->req_buf; in wpa_supplicant_ctrl_iface_rx()
287 dst->used = 1; in wpa_supplicant_ctrl_iface_rx()
293 dst->attached = 1; in wpa_supplicant_ctrl_iface_rx()
298 dst->attached = 0; in wpa_supplicant_ctrl_iface_rx()
303 dst->debug_level = atoi(buf + 6); in wpa_supplicant_ctrl_iface_rx()
321 os_free(dst->rsp_buf); in wpa_supplicant_ctrl_iface_rx()
322 dst->rsp_buf = os_memdup(send_buf, send_len); in wpa_supplicant_ctrl_iface_rx()
323 if (dst->rsp_buf == NULL) { in wpa_supplicant_ctrl_iface_rx()
324 ctrl_close_pipe(dst); in wpa_supplicant_ctrl_iface_rx()
330 if (!WriteFileEx(dst->pipe, dst->rsp_buf, send_len, &dst->overlap, in wpa_supplicant_ctrl_iface_rx()
334 ctrl_close_pipe(dst); in wpa_supplicant_ctrl_iface_rx()
337 dst); in wpa_supplicant_ctrl_iface_rx()
348 struct wpa_ctrl_dst *dst = (struct wpa_ctrl_dst *) overlap; in ctrl_iface_read_completed() local
350 "bytes=%d", dst, (int) err, (int) bytes); in ctrl_iface_read_completed()
352 wpa_supplicant_ctrl_iface_rx(dst, bytes); in ctrl_iface_read_completed()
358 struct wpa_ctrl_dst *dst = eloop_data; in wpa_supplicant_ctrl_iface_receive() local
359 struct ctrl_iface_priv *priv = dst->priv; in wpa_supplicant_ctrl_iface_receive()
363 ResetEvent(dst->overlap.hEvent); in wpa_supplicant_ctrl_iface_receive()
365 if (!GetOverlappedResult(dst->pipe, &dst->overlap, &bytes, FALSE)) { in wpa_supplicant_ctrl_iface_receive()
377 ctrl_iface_write_completed(0, 0, &dst->overlap); in wpa_supplicant_ctrl_iface_receive()
482 struct wpa_ctrl_dst *dst, *next; in wpa_supplicant_ctrl_iface_send() local
489 dst = priv->ctrl_dst; in wpa_supplicant_ctrl_iface_send()
490 if (dst == NULL) in wpa_supplicant_ctrl_iface_send()
504 while (dst) { in wpa_supplicant_ctrl_iface_send()
505 next = dst->next; in wpa_supplicant_ctrl_iface_send()
506 if (dst->attached && level >= dst->debug_level) { in wpa_supplicant_ctrl_iface_send()
508 dst); in wpa_supplicant_ctrl_iface_send()
509 if (!WriteFile(dst->pipe, sbuf, llen + len, &written, in wpa_supplicant_ctrl_iface_send()
513 dst, (int) GetLastError()); in wpa_supplicant_ctrl_iface_send()
514 dst->errors++; in wpa_supplicant_ctrl_iface_send()
515 if (dst->errors > 10) in wpa_supplicant_ctrl_iface_send()
516 ctrl_close_pipe(dst); in wpa_supplicant_ctrl_iface_send()
518 dst->errors = 0; in wpa_supplicant_ctrl_iface_send()
521 dst = next; in wpa_supplicant_ctrl_iface_send()
561 struct wpa_global_dst *dst, *next; in global_flush_broken_pipes() local
563 dst = priv->ctrl_dst; in global_flush_broken_pipes()
565 while (dst) { in global_flush_broken_pipes()
566 next = dst->next; in global_flush_broken_pipes()
567 if (ctrl_broken_pipe(dst->pipe, dst->used)) { in global_flush_broken_pipes()
569 dst); in global_flush_broken_pipes()
570 global_close_pipe(dst); in global_flush_broken_pipes()
572 dst = next; in global_flush_broken_pipes()
579 struct wpa_global_dst *dst; in global_open_pipe() local
582 dst = os_zalloc(sizeof(*dst)); in global_open_pipe()
583 if (dst == NULL) in global_open_pipe()
585 wpa_printf(MSG_DEBUG, "CTRL: Open pipe %p", dst); in global_open_pipe()
587 dst->priv = priv; in global_open_pipe()
588 dst->pipe = INVALID_HANDLE_VALUE; in global_open_pipe()
590 dst->overlap.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL); in global_open_pipe()
591 if (dst->overlap.hEvent == NULL) { in global_open_pipe()
597 eloop_register_event(dst->overlap.hEvent, in global_open_pipe()
598 sizeof(dst->overlap.hEvent), in global_open_pipe()
599 wpa_supplicant_global_iface_receive, dst, NULL); in global_open_pipe()
602 dst->pipe = CreateNamedPipe(NAMED_PIPE_PREFIX, in global_open_pipe()
609 if (dst->pipe == INVALID_HANDLE_VALUE) { in global_open_pipe()
615 if (ConnectNamedPipe(dst->pipe, &dst->overlap)) { in global_open_pipe()
618 CloseHandle(dst->pipe); in global_open_pipe()
619 os_free(dst); in global_open_pipe()
632 if (SetEvent(dst->overlap.hEvent)) in global_open_pipe()
638 CloseHandle(dst->pipe); in global_open_pipe()
639 os_free(dst); in global_open_pipe()
643 dst->next = priv->ctrl_dst; in global_open_pipe()
644 if (dst->next) in global_open_pipe()
645 dst->next->prev = dst; in global_open_pipe()
646 priv->ctrl_dst = dst; in global_open_pipe()
651 global_close_pipe(dst); in global_open_pipe()
656 static void global_close_pipe(struct wpa_global_dst *dst) in global_close_pipe() argument
658 wpa_printf(MSG_DEBUG, "CTRL: close pipe %p", dst); in global_close_pipe()
660 if (dst->overlap.hEvent) { in global_close_pipe()
661 eloop_unregister_event(dst->overlap.hEvent, in global_close_pipe()
662 sizeof(dst->overlap.hEvent)); in global_close_pipe()
663 CloseHandle(dst->overlap.hEvent); in global_close_pipe()
666 if (dst->pipe != INVALID_HANDLE_VALUE) { in global_close_pipe()
673 CloseHandle(dst->pipe); in global_close_pipe()
676 if (dst->prev) in global_close_pipe()
677 dst->prev->next = dst->next; in global_close_pipe()
679 dst->priv->ctrl_dst = dst->next; in global_close_pipe()
680 if (dst->next) in global_close_pipe()
681 dst->next->prev = dst->prev; in global_close_pipe()
683 os_free(dst->rsp_buf); in global_close_pipe()
684 os_free(dst); in global_close_pipe()
691 struct wpa_global_dst *dst = (struct wpa_global_dst *) overlap; in global_iface_write_completed() local
693 "err=%d bytes=%d", dst, (int) err, (int) bytes); in global_iface_write_completed()
695 global_close_pipe(dst); in global_iface_write_completed()
699 os_free(dst->rsp_buf); in global_iface_write_completed()
700 dst->rsp_buf = NULL; in global_iface_write_completed()
702 if (!ReadFileEx(dst->pipe, dst->req_buf, sizeof(dst->req_buf), in global_iface_write_completed()
703 &dst->overlap, global_iface_read_completed)) { in global_iface_write_completed()
706 global_close_pipe(dst); in global_iface_write_completed()
712 wpa_printf(MSG_DEBUG, "CTRL: Overlapped read started for %p", dst); in global_iface_write_completed()
716 static void wpa_supplicant_global_iface_rx(struct wpa_global_dst *dst, in wpa_supplicant_global_iface_rx() argument
719 struct wpa_global *global = dst->priv->global; in wpa_supplicant_global_iface_rx()
722 char *buf = dst->req_buf; in wpa_supplicant_global_iface_rx()
724 dst->used = 1; in wpa_supplicant_global_iface_rx()
738 os_free(dst->rsp_buf); in wpa_supplicant_global_iface_rx()
739 dst->rsp_buf = NULL; in wpa_supplicant_global_iface_rx()
743 os_free(dst->rsp_buf); in wpa_supplicant_global_iface_rx()
744 dst->rsp_buf = os_memdup(send_buf, send_len); in wpa_supplicant_global_iface_rx()
745 if (dst->rsp_buf == NULL) { in wpa_supplicant_global_iface_rx()
746 global_close_pipe(dst); in wpa_supplicant_global_iface_rx()
752 if (!WriteFileEx(dst->pipe, dst->rsp_buf, send_len, &dst->overlap, in wpa_supplicant_global_iface_rx()
756 global_close_pipe(dst); in wpa_supplicant_global_iface_rx()
759 dst); in wpa_supplicant_global_iface_rx()
767 struct wpa_global_dst *dst = (struct wpa_global_dst *) overlap; in global_iface_read_completed() local
769 "bytes=%d", dst, (int) err, (int) bytes); in global_iface_read_completed()
771 wpa_supplicant_global_iface_rx(dst, bytes); in global_iface_read_completed()
778 struct wpa_global_dst *dst = eloop_data; in wpa_supplicant_global_iface_receive() local
779 struct ctrl_iface_global_priv *priv = dst->priv; in wpa_supplicant_global_iface_receive()
783 ResetEvent(dst->overlap.hEvent); in wpa_supplicant_global_iface_receive()
785 if (!GetOverlappedResult(dst->pipe, &dst->overlap, &bytes, FALSE)) { in wpa_supplicant_global_iface_receive()
800 global_iface_write_completed(0, 0, &dst->overlap); in wpa_supplicant_global_iface_receive()