static void show_tstamp_types_and_exit(const char *device, pcap_t *pd) { int n_tstamp_types; int *tstamp_types = 0; const char *tstamp_type_name; int i; n_tstamp_types = pcap_list_tstamp_types(pd, &tstamp_types); if (n_tstamp_types < 0) error("%s", pcap_geterr(pd)); if (n_tstamp_types == 0) { fprintf(stderr, "Time stamp type cannot be set for %s\n", device); exit(0); } fprintf(stderr, "Time stamp types for %s (use option -j to set):\n", device); for (i = 0; i < n_tstamp_types; i++) { tstamp_type_name = pcap_tstamp_type_val_to_name(tstamp_types[i]); if (tstamp_type_name != NULL) { (void) fprintf(stderr, " %s (%s)\n", tstamp_type_name, pcap_tstamp_type_val_to_description(tstamp_types[i])); } else { (void) fprintf(stderr, " %d\n", tstamp_types[i]); } } pcap_free_tstamp_types(tstamp_types); exit(0); }
static void print_timestamp_types(const char *dev) { int i, ntstypes; char junk[PCAP_ERRBUF_SIZE]; int *tstypes; pcap_t *handle; handle = pcap_create(dev, junk); if(!handle) return; ntstypes = pcap_list_tstamp_types(handle, &tstypes); if(ntstypes > 0) printf(" Timestamp types:%s", options.verbose > 1 ? "\n" : " "); if(options.verbose > 1) for(i = 0; i < ntstypes; ++i) printf(" %-20s %s\n", pcap_tstamp_type_val_to_name(tstypes[i]), pcap_tstamp_type_val_to_description(tstypes[i])); else for(i = 0; i < ntstypes; ++i) printf("%s%s", pcap_tstamp_type_val_to_name(tstypes[i]) , i + 1 > ntstypes ? ", " : "\n"); pcap_free_tstamp_types(tstypes); pcap_close(handle); }
inline std::vector<timestamp_t> get_timestamp_types(pcap_t *source) { int *timestamp_t_types = nullptr; const auto num_timestamp_t_types = pcap_list_tstamp_types(source, ×tamp_t_types); std::vector<timestamp_t> timestamp_ts; for (auto k = 0; k < num_timestamp_t_types; ++k) { timestamp_ts.push_back(static_cast<timestamp_t>(timestamp_t_types[k])); } pcap_free_tstamp_types(timestamp_t_types); if (num_timestamp_t_types == PCAP_ERROR) { throw error{"pcap_list_tstamp_types error\n" + error_string(source)}; } return timestamp_ts; }
/* * Class: disy_jnipcap_Pcap * Method: listTstampTypes * Signature: (JLjava/util/ArrayList;)I */ JNIEXPORT jint JNICALL Java_disy_jnipcap_Pcap_listTstampTypes (JNIEnv *env, jclass jcls, jlong jptr, jobject jtypes) { pcap_t *p = (pcap_t *) jptr; if (p == NULL) return -1; int *carr; int ret = pcap_list_tstamp_types (p, &carr); if (ret >= 0) { int i = 0; for (;i<ret;i++) { jobject ji = NewInteger(env,carr[i]); (*env)->CallBooleanMethod (env, jtypes, mid_ArrayList_add_object, ji); } } pcap_free_tstamp_types(carr); return ret; }