示例#1
0
const char* stream_addr_ntoa_r(const stream_addr_t* src, char* buf, size_t bytes){
	int __attribute__((unused)) written = 0;

	switch(stream_addr_type(src)){
	case STREAM_ADDR_GUESS:
		abort();

	case STREAM_ADDR_TCP:
	case STREAM_ADDR_UDP:
		written = snprintf(buf, bytes, "%s://%s:%d", stream_addr_type(src) == STREAM_ADDR_UDP ? "udp" : "tcp", inet_ntoa(src->in_addr), ntohs(src->in_port));
		break;
	case STREAM_ADDR_ETHERNET:
		written = snprintf(buf, bytes, "eth://%s", hexdump_address(&src->ether_addr));
		break;
	case STREAM_ADDR_CAPFILE:
		if ( stream_addr_have_flag(src, STREAM_ADDR_LOCAL) ){
			strncpy(buf, src->local_filename, bytes);
		} else {
			strncpy(buf, src->filename, bytes);
		}
		buf[bytes-1] = 0; /* force null-terminator */
		break;
	}

	assert(written < bytes);
	return buf;
}
示例#2
0
void stream_addr_reset(stream_addr_t* addr) {
    if ( stream_addr_type(addr) == STREAM_ADDR_CAPFILE &&
            stream_addr_have_flag(addr, STREAM_ADDR_DUPLICATE) ) {
        free(addr->int_filename);
    }

    memset(addr, 0, sizeof(stream_addr_t));
}
示例#3
0
	void test_prefix_filename(){
    const char* sample = "file://cb:a9:87:65:43:21";
    stream_addr_t addr;
    int ret;

    if ( (ret=stream_addr_aton(&addr, sample, STREAM_ADDR_GUESS, 0)) != 0 ){
      sprintf(msg, "stream_addr_aton() returned %d: %s", ret, strerror(ret));
      CppUnit::Asserter::fail(msg);
    }

    CPPUNIT_ASSERT_EQUAL(STREAM_ADDR_CAPFILE, stream_addr_type(&addr));
    CPPUNIT_ASSERT_EQUAL(std::string("cb:a9:87:65:43:21"), std::string(addr.local_filename));
	}
示例#4
0
	void test_prefix_eth(){
    const char* sample = "eth://cb:a9:87:65:43:21";
    struct ether_addr* expected = ether_aton(sample+6);
    stream_addr_t addr;
    int ret;

    if ( (ret=stream_addr_aton(&addr, sample, STREAM_ADDR_GUESS, 0)) != 0 ){
      sprintf(msg, "stream_addr_aton() returned %d: %s", ret, strerror(ret));
      CppUnit::Asserter::fail(msg);
    }

    CPPUNIT_ASSERT_EQUAL(STREAM_ADDR_ETHERNET, stream_addr_type(&addr));
    CPPUNIT_ASSERT_ETH_ADDR(*expected, addr.ether_addr);
	}
示例#5
0
static int need_fclose(const struct stream_file* st){
	return stream_addr_type(&st->base.addr) == STREAM_ADDR_CAPFILE || stream_addr_have_flag(&st->base.addr, STREAM_ADDR_FCLOSE);
}