Ejemplo n.º 1
0
static long gettoken (token *t, char *p) {

	unsigned j;

	sbuff_reset(&t->s);

	j = 0;

	/* read a meta */
	if (!p[j]) {
		t->m = EXIT;
		return j;
	}

	if (p[j] == '*') {
		t->m = WILD_MANY;
	} else if (p[j] == '?') {
		t->m = WILD_ONCE;
	} else {
		sbuff_push(&t->s, p[j]); 
		t->m = EXACT;
	}
	j++;

	/* read a sub string */
	while (p[j]) {
		if (p[j] == '*' || p[j] == '?') {
			if (t->s.len && sbuff_head(&t->s) == '\\') {
				sbuff_xchg(&t->s, p[j]);
				j += 1;
			} else {
				break;
			}
		} else {
			sbuff_push(&t->s, p[j++]);
		}
	}
	return j;
}
Ejemplo n.º 2
0
static void reply(struct netdevice* dev, mac target, uint32_t ip, int broadcast) {
    sbuff * buf = raw_sbuff_alloc(sizeof(struct ethernet_frame) + sizeof(struct arp_packet));
    add_ref(buf);
    sbuff_push(buf, sizeof(struct ethernet_frame));

    struct arp_packet * arp = (struct arp_packet*)buf->head;
    arp->htype = ntos(1);
    arp->ptype = ntos(0x0800);
    arp->hlen = 6;
    arp->plen = 4;
    arp->operation = ntos(2);
    memcpy(arp->senderMac, dev->mac, 6);
    arp->senderIp = ntol(dev->ip);
    memcpy(arp->targetMac, target, 6);
    arp->targetIp = ntol(ip);

    ethernet_send(buf, 0x0806, broadcast ? BROADCAST_MAC : target, dev);
    release_ref(buf, sbuff_free);
}