Lines Matching defs:fwtcp

47 struct fwtcp {
77 struct fwtcp *next;
81 static struct fwtcp *fwtcp_create(struct fwspec *);
83 /* poll manager callback for fwtcp listening socket */
92 * Linked list of active fwtcp forwarders.
94 struct fwtcp *fwtcp_list = NULL;
107 struct fwtcp *fwtcp;
109 fwtcp = fwtcp_create(fwspec);
110 if (fwtcp == NULL) {
116 /* fwtcp_create has put fwtcp on the linked list */
123 struct fwtcp *fwtcp;
124 struct fwtcp **pprev;
126 for (pprev = &fwtcp_list; (fwtcp = *pprev) != NULL; pprev = &fwtcp->next) {
127 if (fwspec_equal(&fwtcp->fwspec, fwspec)) {
128 *pprev = fwtcp->next;
129 fwtcp->next = NULL;
134 if (fwtcp == NULL) {
141 pollmgr_del_slot(fwtcp->pmhdl.slot);
142 fwtcp->pmhdl.slot = -1;
144 closesocket(fwtcp->sock);
145 fwtcp->sock = INVALID_SOCKET;
147 /* let pending msg_connect be processed before we delete fwtcp */
148 proxy_lwip_post(&fwtcp->msg_delete);
152 struct fwtcp *
155 struct fwtcp *fwtcp;
165 fwtcp = (struct fwtcp *)malloc(sizeof(*fwtcp));
166 if (fwtcp == NULL) {
171 fwtcp->pmhdl.callback = fwtcp_pmgr_listen;
172 fwtcp->pmhdl.data = (void *)fwtcp;
173 fwtcp->pmhdl.slot = -1;
175 fwtcp->sock = lsock;
176 fwtcp->fwspec = *fwspec; /* struct copy */
178 error = sys_mbox_new(&fwtcp->connmbox, 16);
181 free(fwtcp);
187 fwtcp->MSG.type = TCPIP_MSG_CALLBACK_STATIC; \
188 fwtcp->MSG.sem = NULL; \
189 fwtcp->MSG.msg.cb.function = FUNC; \
190 fwtcp->MSG.msg.cb.ctx = (void *)fwtcp; \
198 status = pollmgr_add(&fwtcp->pmhdl, fwtcp->sock, POLLIN);
200 sys_mbox_free(&fwtcp->connmbox);
202 free(fwtcp);
206 fwtcp->next = fwtcp_list;
207 fwtcp_list = fwtcp;
209 return fwtcp;
216 struct fwtcp *fwtcp;
224 fwtcp = (struct fwtcp *)handler->data;
227 LWIP_ASSERT1(fwtcp != NULL);
228 LWIP_ASSERT1(fd == fwtcp->sock);
233 LWIP_ASSERT1(sys_mbox_valid(&fwtcp->connmbox));
236 newsock = accept(fwtcp->sock, (struct sockaddr *)&ss, &sslen);
265 error = sys_mbox_trypost(&fwtcp->connmbox, (void *)pxtcp);
272 proxy_lwip_post(&fwtcp->msg_connect);
280 struct fwtcp *fwtcp = (struct fwtcp *)arg;
284 if (!sys_mbox_valid(&fwtcp->connmbox)) {
289 timo = sys_mbox_tryfetch(&fwtcp->connmbox, (void **)&pxtcp);
297 pxtcp_pcb_connect(pxtcp, &fwtcp->fwspec);
304 struct fwtcp *fwtcp = (struct fwtcp *)arg;
308 timo = sys_mbox_tryfetch(&fwtcp->connmbox, &data);
312 sys_mbox_free(&fwtcp->connmbox);
313 free(fwtcp);