Ejemplo n.º 1
0
/*
 * 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;
}
Ejemplo n.º 2
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);
}