/* * Limit the flow to only receiving from one remote end point. */ static int udp_connect(struct socket *sock, const struct sockaddr *address, int address_len) { struct sockaddr_in *inaddr= (struct sockaddr_in *)address; struct udp_data *ud= (struct udp_data *)sock->data; if(address->sa_family != AF_INET) { printf("udp_connect: non INET family %d\n", address->sa_family); return -1; } if (sock->state != SS_BOUND) { printf("udp_connect: socket is not in bound state (%d != %d)\n", sock->state, SS_BOUND); return -1; } memcpy(&(sock->raddr), inaddr, sizeof(struct sockaddr_in)); /* build the stack if needed */ if (sock->state != SS_CONNECTED) { if (!build_stack((struct udp_data *)sock->data, (struct sockaddr_in *)&(sock->laddr), (struct sockaddr_in *)&(sock->raddr))) { printf("udp_connect: problem with building stack\n"); return -1; } sock->state = SS_CONNECTED; } else { FlowMan_SAP lsap, rsap; struct sockaddr_in *laddr; struct sockaddr_in *raddr; FlowMan_ConnID cid; /* the stack's already been built, so we just need to swizzle the * packet filters (send() will retarget the stack as needed) */ laddr = (struct sockaddr_in *)&sock->laddr; raddr = (struct sockaddr_in *)&sock->raddr; lsap.tag = FlowMan_PT_UDP; lsap.u.UDP.addr.a = laddr->sin_addr.s_addr; lsap.u.UDP.port = laddr->sin_port; rsap.tag = FlowMan_PT_UDP; rsap.u.UDP.addr.a = raddr->sin_addr.s_addr; rsap.u.UDP.port = raddr->sin_port; cid = UDP$GetConnID(ud->udp); if (!FlowMan$ReAttach(ud->fman, ud->flow, cid, &lsap, &rsap)) { printf("ReAttach failed!\n"); return False; } } return 0; }
void cbVike::Attach(cbStyledTextCtrl *p, cbEditor *editor) { if(!p){ return; } // already attached !!! if(IsAttachedTo(p)){ ReAttach(p, editor); return; } // do not attach ourselves to temporary windows !! if (p->GetExtraStyle() & wxWS_EX_TRANSIENT) return; // create a new event handler for this window wxEvtHandler *h = new VikeEvtBinder(this, p, editor); m_arrHandlers.Add((void*)h); LOGIT(_T("Add wxEvtHandler %p for controller %p in editor %p"), h, p, editor); }