Ejemplo n.º 1
0
/*
 * Allocate a Telnet control block.
 */
static telnet_t *
telnet_alloc(void)
{
    int i;
    telnet_t *tp;

    tp = xalloc(sizeof (telnet_t));
    tp->t_flags = 0;
    tp->t_state = TS_DATA;
    tp->t_nd = NULL;
    tp->t_rawq = nq_alloc(TELNET_RAWQ_SIZE);
    tp->t_canq = nq_alloc(TELNET_CANQ_SIZE);
    tp->t_optq = NULL;
    tp->t_outq = nq_alloc(TELNET_OUTQ_SIZE);
    tp->t_ip = NULL;
    tp->t_rblen = 0;
    tp->t_sblen = 0;
    tp->task = NULL;
    
    for (i = 0; i < OP_SIZE; i++)
    {
	tp->t_optb[i].o_us = OS_NO;
	tp->t_optb[i].o_usq = OQ_EMPTY;
	tp->t_optb[i].o_him = OS_NO;
	tp->t_optb[i].o_himq = OQ_EMPTY;
    }

    return tp;
}
Ejemplo n.º 2
0
/*
 * Process a Subnegotiate Begin.
 */
static void
telnet_sb(telnet_t *tp, u_char opt)
{
    if (tp->t_optq == NULL)
	tp->t_optq = nq_alloc(TELNET_OPTQ_SIZE);

    tp->t_opt = opt;
}
Ejemplo n.º 3
0
/*
 * Initialize the UDP Manager.
 */
udpsvc_t *
udpsvc_init(int port)
{
    int s;
    struct sockaddr_in addr;
    struct udpsvc_t *svc;
    
    s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == -1)
	fatal("udp_init: socket() error = %d.\n", errno);

    enable_reuseaddr(s);

    memset(&addr, 0, sizeof (addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons((u_short)port);
    addr.sin_addr.s_addr = INADDR_ANY;

    if (bind(s, (struct sockaddr *)&addr, sizeof (addr)) == -1)
    {
	if (errno == EADDRINUSE) 
	{
	    (void)fprintf(stderr, "UDP Socket already bound!\n");
	    debug_message("UDP Socket already bound!\n");
	    (void)close(s);
	    return 0;
	} 
	else 
	{
	    fatal("udp_init: bind() error = %d.\n", errno);
	}
    }

    enable_nbio(s);
    svc = xalloc(sizeof(*udpsvc));
    svc->nq = nq_alloc(UDPSVC_RAWQ_SIZE);
    svc->nd = nd_attach(s, udpsvc_read, NULL, NULL, NULL, udpsvc_shutdown,
			svc);
    nd_enable(svc->nd, ND_R);
    return svc;
}