int main(int argc, char * argv[]) { if (argc == 1) { show_header(std::cout); help("", std::cout, " "); return 0; } // if requesting help if (!std::strncmp(argv[1], "help", 4)) { if (argc == 2) { show_header(std::cout); help("", std::cout, " "); } else{ std::stringstream s; const std::size_t found = help(argv[2], s, " "); std::cout << found << " matches for \"" << argv[2] << "\""; if (found) { std::cout << ":\n" << s.str() << std::flush; } else{ std::cout << std::endl; } } return 0; } // reverse the mapping for commands std::map <std::string, std::vector <module::Module>::size_type> mapping; for(std::vector <module::Module>::size_type i = 0; i < module::ordered.size(); i++) { mapping[module::ordered[i].get_name()] = i; } // find module std::map <std::string, std::vector <module::Module>::size_type>::iterator it = mapping.find(argv[1]); // if module not found, try suggestions if (it == mapping.end()) { std::cerr << "Error: Function \"" << argv[1] << "\" not found." << std::endl; std::stringstream s; const std::size_t found = help(argv[1], s, " "); if (found) { std::cout << found << " matches:\n" << s.str() << std::flush; } return -1; } // run module return module::ordered.at(it -> second)(argc - 2, argv + 2); }
void tm_frame_rep::full_screen_mode (bool on, bool edit) { if (on && !edit) { show_header (false); show_footer (false); } else { show_header (true); show_footer (true); } set_full_screen (concrete_window () -> win, on); get_current_editor () -> full_screen_mode (on && !edit); full_screen = on; full_screen_edit = on && edit; }
void gtk_source_completion_model_set_show_headers (GtkSourceCompletionModel *model, gboolean show_headers) { GList *l; g_return_if_fail (GTK_SOURCE_IS_COMPLETION_MODEL (model)); if (model->priv->show_headers == show_headers) { return; } model->priv->show_headers = show_headers; for (l = model->priv->providers; l != NULL; l = l->next) { if (show_headers) { show_header (model, l); } else { hide_header (model, l); } } }
void interpret_icmp_mip_ext(uchar_t *p, int len) { show_space(); show_header("ICMP: ", " MIP Advertisement Extensions ", len); show_space(); interpret_extensions(p, len, ADV); }
static void play_file(const char *fn) { ACMStream *acm; int err, res, buflen; ao_sample_format fmt; ao_device *dev; char *buf; unsigned int total_bytes, bytes_done = 0; err = acm_open_file(&acm, fn, cf_force_chans); if (err < 0) { fprintf(stderr, "%s: %s\n", fn, acm_strerror(err)); return; } show_header(fn, acm); fmt.bits = 16; fmt.rate = acm_rate(acm); fmt.channels = acm_channels(acm); fmt.byte_format = AO_FMT_LITTLE; dev = open_audio(&fmt); buflen = 4*1024; buf = malloc(buflen); total_bytes = acm_pcm_total(acm) * acm_channels(acm) * ACM_WORD; while (bytes_done < total_bytes) { res = acm_read_loop(acm, buf, buflen/ACM_WORD, 0,2,1); if (res == 0) break; if (res > 0) { bytes_done += res; res = ao_play(dev, buf, res); } else { fprintf(stderr, "%s: %s\n", fn, acm_strerror(res)); break; } } memset(buf, 0, buflen); if (bytes_done < total_bytes) fprintf(stderr, "%s: adding filler_samples: %d\n", fn, total_bytes - bytes_done); while (bytes_done < total_bytes) { int bs; if (bytes_done + buflen > total_bytes) { bs = total_bytes - bytes_done; } else { bs = buflen; } res = ao_play(dev, buf, bs); if (res != bs) break; bytes_done += res; } acm_close(acm); free(buf); }
/* ARGSUSED */ int interpret_esp(int flags, uint8_t *hdr, int iplen, int fraglen) { /* LINTED: alignment */ esph_t *esph = (esph_t *)hdr; esph_t *aligned_esph; esph_t storage; /* In case hdr isn't aligned. */ char *line; if (fraglen < sizeof (esph_t)) return (fraglen); /* incomplete header */ if (!IS_P2ALIGNED(hdr, 4)) { aligned_esph = &storage; bcopy(hdr, aligned_esph, sizeof (esph_t)); } else { aligned_esph = esph; } if (flags & F_SUM) { line = (char *)get_sum_line(); /* * sprintf() is safe because line guarantees us 80 columns, * and SPI and replay certainly won't exceed that. */ (void) sprintf(line, "ESP SPI=0x%x Replay=%u", ntohl(aligned_esph->esph_spi), ntohl(aligned_esph->esph_replay)); line += strlen(line); } if (flags & F_DTAIL) { show_header("ESP: ", "Encapsulating Security Payload", sizeof (esph_t)); show_space(); /* * sprintf() is safe because get_line guarantees us 80 columns, * and SPI and replay certainly won't exceed that. */ (void) sprintf(get_line((char *)&esph->esph_spi - dlc_header, 4), "SPI = 0x%x", ntohl(aligned_esph->esph_spi)); (void) sprintf(get_line((char *)&esph->esph_replay - dlc_header, 4), "Replay = %u", ntohl(aligned_esph->esph_replay)); (void) sprintf(get_line((char *)(esph + 1) - dlc_header, 4), " ....ENCRYPTED DATA...."); } return (sizeof (esph_t)); }
static void show_info(const char *fn) { int err; ACMStream *acm; err = acm_open_file(&acm, fn, cf_force_chans); if (err < 0) { printf("%s: %s\n", fn, acm_strerror(err)); return; } show_header(fn, acm); acm_close(acm); }
int interpret_pppoe(int flags, poep_t *poep, int len) { uint8_t code = poep->poep_code; uint8_t *payload; if (len < sizeof (poep_t)) return (len); payload = (uint8_t *)poep + sizeof (poep_t); if (flags & F_SUM) { (void) sprintf(get_sum_line(), "PPPoE %s", pppoe_codetoname(code, B_FALSE)); } else { /* flags & F_DTAIL */ show_header("PPPoE: ", "PPP Over Ethernet", len); show_space(); (void) sprintf(get_line(0, 0), "Version = %d", POE_VERS(poep->poep_version_type)); (void) sprintf(get_line(0, 0), "Type = %d", POE_TYPE(poep->poep_version_type)); (void) sprintf(get_line(0, 0), "Code = %d (%s)", code, pppoe_codetoname(code, B_TRUE)); (void) sprintf(get_line(0, 0), "Session Id = %d", ntohs(poep->poep_session_id)); (void) sprintf(get_line(0, 0), "Length = %d bytes", ntohs(poep->poep_length)); show_space(); len -= sizeof (poep_t); len = MIN(len, ntohs(poep->poep_length)); if (poep->poep_code != 0 && poep->poep_length > 0) { interpret_tags(payload, len); } } if (poep->poep_code == 0) { return (interpret_ppp(flags, payload, len)); } return (len); }
static gboolean clear_blobs (GdaConnection *cnc, GError **error) { GdaStatement *stmt; gboolean retval; #define SQL_DELETE "DELETE FROM blobs" show_header ("Clear blobs"); stmt = gda_sql_parser_parse_string (parser, SQL_DELETE, NULL, error); if (!stmt) return FALSE; retval = exec_statement (cnc, stmt, NULL, error); g_object_unref (stmt); return retval; }
static gboolean update_blob (GdaConnection *cnc, gint id, const gchar *data, glong binary_length, GError **error) { GdaStatement *stmt; GdaSet *plist; GdaHolder *param; GValue *value; gchar *str; gboolean retval; const gchar* SQL_UPDATE = "UPDATE blobs set name = ##/*name:'name' type:gchararray*/, data = ##/*name:'theblob' type:'GdaBlob'*/ WHERE id= ##/*name:'id' type:gint*/"; show_header ("Update a blob"); stmt = gda_sql_parser_parse_string (parser, SQL_UPDATE, NULL, error); if (!stmt) return FALSE; if (!gda_statement_get_parameters (stmt, &plist, NULL)) return FALSE; /* blob id */ param = gda_set_get_holder (plist, "id"); str = g_strdup_printf ("%d", id); if (! gda_holder_set_value_str (param, NULL, str, error)) return FALSE; g_free (str); /* blob name */ param = gda_set_get_holder (plist, "name"); str = g_strdup_printf ("BLOB_%d", id); if (! gda_holder_set_value_str (param, NULL, str, error)) return FALSE; g_free (str); /* blob data */ param = gda_set_get_holder (plist, "theblob"); value = gda_value_new_blob ((guchar*) data, binary_length); if (! gda_holder_set_value (param, value, error)) return FALSE; gda_value_free (value); gda_connection_clear_events_list (cnc); retval = exec_statement (cnc, stmt, plist, error); g_object_unref (stmt); g_object_unref (plist); return retval; }
/* * interpret_tags() prints PPPoE Discovery Stage TAGs in detail. */ static void interpret_tags(uint8_t *payload, uint16_t length) { uint8_t *tagptr = payload; uint16_t tag_length; uint16_t tag_type; uint8_t *tag_value; taginfo_t *tinfo; while (length >= POET_HDRLEN) { tag_type = POET_GET_TYPE(tagptr); tag_length = POET_GET_LENG(tagptr); tinfo = pppoe_gettaginfo(tag_type); show_header("PPPoE: ", tinfo->tag_name, tag_length + POET_HDRLEN); (void) sprintf(get_line(0, 0), "Tag Type = %d", tag_type); (void) sprintf(get_line(0, 0), "Tag Length = %d bytes", tag_length); length -= POET_HDRLEN; if (tag_length > length) { (void) sprintf(get_line(0, 0), "Warning: Truncated Packet"); show_space(); break; } /* * unknown tags or tags which should always have 0 length * are not interpreted any further. */ tag_value = POET_DATA(tagptr); if (tag_length != 0 && tinfo->interpret_tagvalue != NULL) tinfo->interpret_tagvalue(tag_value, tag_length); show_space(); length -= tag_length; tagptr = POET_NEXT(tagptr); } }
static void show(char *data, const char *mib) { size_t reclen, seclen; if (mib != NULL) printf("<!-- MIB: %s -->\n", mib); printf("<record>\n"); reclen = show_header((void*)data) - sizeof(struct mca_record_header); data += sizeof(struct mca_record_header); while (reclen > sizeof(struct mca_section_header)) { seclen = show_section((void*)data); reclen -= seclen; data += seclen; } printf("</record>\n"); }
void interpret_nbp(int flags, struct nbp_hdr *nbp, int len) { uint8_t *data; int nbp_cnt = nbp->nbp_fun_cnt & 0xf; /* lower four bits */ int nbp_op = (nbp->nbp_fun_cnt >> 4) & 0xf; /* upper four bits */ data = (uint8_t *)(nbp + 1); if (flags & F_SUM) { if (len < sizeof (struct nbp_hdr)) { (void) snprintf(get_sum_line(), MAXLINE, "NBP (short packet)"); return; } (void) snprintf(get_sum_line(), MAXLINE, "NBP F=%s CNT=%d ID=%d", nbp_short[nbp_op], nbp_cnt, nbp->nbp_id); } if (flags & F_DTAIL) { show_header("NBP: ", "NBP Header", len); show_space(); if (len < sizeof (struct nbp_hdr)) { (void) snprintf(get_line(0, 0), get_line_remain(), "NBP (short packet)"); return; } (void) snprintf(get_line(0, 0), get_line_remain(), "Length = %d", len); (void) snprintf(get_line(0, 0), get_line_remain(), "Func = %d (%s)", nbp_op, nbp_short[nbp_op]); (void) snprintf(get_line(0, 0), get_line_remain(), "Tuple count = %d", nbp_cnt); (void) snprintf(get_line(0, 0), get_line_remain(), "Id = %d", nbp->nbp_id); show_nbp_tuples(data, nbp_cnt, ((uint8_t *)nbp) + len); } }
static void nest_options(const uint8_t *data, uint_t olen, char *prefix, char *title) { char *str, *oldnest, *oldprefix; if (olen <= 0) return; oldprefix = prot_prefix; oldnest = prot_nest_prefix; str = malloc(strlen(prot_nest_prefix) + strlen(prot_prefix) + 1); if (str == NULL) { prot_nest_prefix = prot_prefix; } else { (void) sprintf(str, "%s%s", prot_nest_prefix, prot_prefix); prot_nest_prefix = str; } show_header(prefix, title, 0); show_options(data, olen); free(str); prot_prefix = oldprefix; prot_nest_prefix = oldnest; }
void interpret_aecho(int flags, struct ddp_hdr *ddp, int len) { char *data; data = (char *)ddp + DDPHDR_SIZE; if (flags & F_SUM) { if (len < DDPHDR_SIZE + 1) { (void) snprintf(get_sum_line(), MAXLINE, "AECHO (short packet)"); return; } (void) snprintf(get_sum_line(), MAXLINE, "AECHO F=%s LEN=%d", *data == AEP_REQ ? "Request" : "Reply", len); } if (flags & F_DTAIL) { if (len < DDPHDR_SIZE + 1) { (void) snprintf(get_line(0, 0), get_line_remain(), "AECHO (short packet)"); return; } show_header("AECHO: ", "AECHO Header", len); show_space(); (void) snprintf(get_line(0, 0), get_line_remain(), "Func = %d (%s)", data[0], data[0] == AEP_REQ ? "Request" : "Reply"); (void) snprintf(get_line(0, 0), get_line_remain(), "Length = %d", len); } }
static uint_t interpret_ipnet(int flags, char *header, int elen, int origlen) { dl_ipnetinfo_t dl; size_t len = elen - sizeof (dl_ipnetinfo_t); char *off = (char *)header + sizeof (dl_ipnetinfo_t); int blen = MAX(origlen, 8252); char szone[MAX_UINT64_STR]; char dzone[MAX_UINT64_STR]; (void) memcpy(&dl, header, sizeof (dl)); if (data != NULL && datalen != 0 && datalen < blen) { free(data); data = NULL; datalen = 0; } if (data == NULL) { data = (char *)malloc(blen); if (!data) pr_err("Warning: malloc failure"); datalen = blen; } if (dl.dli_zsrc == ALL_ZONES) sprintf(szone, "Unknown"); else sprintf(szone, "%lu", BE_32(dl.dli_zsrc)); if (dl.dli_zdst == ALL_ZONES) sprintf(dzone, "Unknown"); else sprintf(dzone, "%lu", BE_32(dl.dli_zdst)); if (flags & F_SUM) { (void) snprintf(get_sum_line(), MAXLINE, "IPNET src zone %s dst zone %s", szone, dzone); } if (flags & F_DTAIL) { show_header("IPNET: ", "IPNET Header", elen); show_space(); (void) sprintf(get_line(0, 0), "Packet %d arrived at %d:%02d:%d.%05d", pi_frame, pi_time_hour, pi_time_min, pi_time_sec, pi_time_usec / 10); (void) sprintf(get_line(0, 0), "Packet size = %d bytes", elen); (void) snprintf(get_line(0, 0), get_line_remain(), "dli_version = %d", dl.dli_version); (void) snprintf(get_line(0, 0), get_line_remain(), "dli_family = %d", dl.dli_family); (void) snprintf(get_line(0, 2), get_line_remain(), "dli_zsrc = %s", szone); (void) snprintf(get_line(0, 2), get_line_remain(), "dli_zdst = %s", dzone); show_space(); } memcpy(data, off, len); switch (dl.dli_family) { case AF_INET: (void) interpret_ip(flags, (struct ip *)data, len); break; case AF_INET6: (void) interpret_ipv6(flags, (ip6_t *)data, len); break; default: break; } return (0); }
uint_t interpret_tr(int flags, caddr_t e, int elen, int origlen) { struct tr_header *mh; struct tr_ri *rh; uchar_t fc; struct llc_snap_hdr *snaphdr; char *off; int maclen, len; boolean_t data_copied = B_FALSE; extern char *dst_name, *src_name; int ethertype; int is_llc = 0, is_snap = 0, source_routing = 0; int blen = MAX(origlen, 17800); if (data != NULL && datalen != 0 && datalen < blen) { free(data); data = NULL; datalen = 0; } if (!data) { data = (char *)malloc(blen); if (!data) pr_err("Warning: malloc failure"); datalen = blen; } if (origlen < ACFCDASA_LEN) { if (flags & F_SUM) { (void) sprintf(get_sum_line(), "RUNT (short packet - %d bytes)", origlen); } if (flags & F_DTAIL) show_header("RUNT: ", "Short packet", origlen); return (elen); } if (elen < ACFCDASA_LEN) return (elen); mh = (struct tr_header *)e; rh = (struct tr_ri *)&mh->ri; fc = mh->fc; if (is_llc = tr_machdr_len(e, &maclen, &source_routing)) { snaphdr = (struct llc_snap_hdr *)(e + maclen); if (snaphdr->d_lsap == LSAP_SNAP && snaphdr->s_lsap == LSAP_SNAP && snaphdr->control == CNTL_LLC_UI) { is_snap = 1; } } if (memcmp(&mh->dhost, ðer_broadcast, sizeof (struct ether_addr)) == 0) dst_name = "(broadcast)"; else if (memcmp(&mh->dhost, &tokenbroadcastaddr2, sizeof (struct ether_addr)) == 0) dst_name = "(mac broadcast)"; else if (mh->dhost.ether_addr_octet[0] & TR_FN_ADDR) dst_name = "(functional)"; if (is_snap) ethertype = ntohs(snaphdr->type); else { src_name = print_etherinfo(&mh->shost); dst_name = print_etherinfo(&mh->dhost); } /* * The 14 byte ether header screws up alignment * of the rest of the packet for 32 bit aligned * architectures like SPARC. Alas, we have to copy * the rest of the packet in order to align it. */ if (is_llc) { if (is_snap) { len = elen - (maclen + LLC_SNAP_HDR_LEN); off = (char *)(e + maclen + LLC_SNAP_HDR_LEN); } else { len = elen - (maclen + LLC_HDR1_LEN); off = (char *)(e + maclen + LLC_HDR1_LEN); } } else { len = elen - maclen; off = (char *)(e + maclen); } if (len > 0 && (off + len <= (char *)e + elen)) { (void) memcpy(data, off, len); data_copied = B_TRUE; } if (flags & F_SUM) { if (source_routing) sprintf(get_sum_line(), print_sr(rh)); if (is_llc) { if (is_snap) { (void) sprintf(get_sum_line(), "TR LLC w/SNAP " "Type=%04X (%s), size=%d bytes", ethertype, print_ethertype(ethertype), origlen); } else { (void) sprintf(get_sum_line(), "TR LLC, but no " "SNAP encoding, size = %d bytes", origlen); } } else { (void) sprintf(get_sum_line(), "TR MAC FC=%02X (%s), size = %d bytes", fc, print_fc(fc), origlen); } } if (flags & F_DTAIL) { show_header("TR: ", "TR Header", elen); show_space(); (void) sprintf(get_line(0, 0), "Packet %d arrived at %d:%02d:%d.%05d", pi_frame, pi_time_hour, pi_time_min, pi_time_sec, pi_time_usec / 10); (void) sprintf(get_line(0, 0), "Packet size = %d bytes", elen); (void) sprintf(get_line(0, 1), "Frame Control = %02x (%s)", fc, print_fc(fc)); (void) sprintf(get_line(2, 6), "Destination = %s, %s", printether(&mh->dhost), print_etherinfo(&mh->dhost)); (void) sprintf(get_line(8, 6), "Source = %s, %s", printether(&mh->shost), print_etherinfo(&mh->shost)); if (source_routing) sprintf(get_line(ACFCDASA_LEN, rh->len), print_sr(rh)); if (is_llc) { (void) sprintf(get_line(maclen, 1), "Dest Service Access Point = %02x", snaphdr->d_lsap); (void) sprintf(get_line(maclen+1, 1), "Source Service Access Point = %02x", snaphdr->s_lsap); (void) sprintf(get_line(maclen+2, 1), "Control = %02x", snaphdr->control); if (is_snap) { (void) sprintf(get_line(maclen+3, 3), "SNAP Protocol Id = %02x%02x%02x", snaphdr->org[0], snaphdr->org[1], snaphdr->org[2]); } } if (is_snap) { (void) sprintf(get_line(maclen+6, 2), "SNAP Type = %04X (%s)", ethertype, print_ethertype(ethertype)); } show_space(); } /* go to the next protocol layer */ if (is_snap && data_copied) { switch (ethertype) { case ETHERTYPE_IP: (void) interpret_ip(flags, (struct ip *)data, len); break; /* Just in case it is decided to add this type */ case ETHERTYPE_IPV6: (void) interpret_ipv6(flags, (ip6_t *)data, len); break; case ETHERTYPE_ARP: case ETHERTYPE_REVARP: interpret_arp(flags, (struct arphdr *)data, len); break; case ETHERTYPE_AARP: /* AppleTalk */ interpret_aarp(flags, data, len); break; case ETHERTYPE_AT: interpret_at(flags, (struct ddp_hdr *)data, len); break; default: break; } } return (elen); }
uint_t interpret_ether(int flags, char *header, int elen, int origlen) { struct ether_header *e = (struct ether_header *)header; uchar_t *off, *ieeestart; int len; int ieee8023 = 0; extern char *dst_name; int ethertype; struct ether_vlan_extinfo *evx = NULL; int blen = MAX(origlen, ETHERMTU); boolean_t trillpkt = B_FALSE; uint16_t tci = 0; if (data != NULL && datalen != 0 && datalen < blen) { free(data); data = NULL; datalen = 0; } if (!data) { data = (char *)malloc(blen); if (!data) pr_err("Warning: malloc failure"); datalen = blen; } inner_pkt: if (origlen < 14) { if (flags & F_SUM) { (void) sprintf(get_sum_line(), "RUNT (short packet - %d bytes)", origlen); } if (flags & F_DTAIL) show_header("RUNT: ", "Short packet", origlen); return (elen); } if (elen < 14) return (elen); if (memcmp(&e->ether_dhost, ðer_broadcast, sizeof (struct ether_addr)) == 0) dst_name = "(broadcast)"; else if (e->ether_dhost.ether_addr_octet[0] & 1) dst_name = "(multicast)"; ethertype = ntohs(e->ether_type); /* * The 14 byte ether header screws up alignment * of the rest of the packet for 32 bit aligned * architectures like SPARC. Alas, we have to copy * the rest of the packet in order to align it. */ len = elen - sizeof (struct ether_header); off = (uchar_t *)(e + 1); if (ethertype == ETHERTYPE_VLAN) { if (origlen < sizeof (struct ether_vlan_header)) { if (flags & F_SUM) { (void) sprintf(get_sum_line(), "RUNT (short VLAN packet - %d bytes)", origlen); } if (flags & F_DTAIL) { show_header("RUNT: ", "Short VLAN packet", origlen); } return (elen); } if (len < sizeof (struct ether_vlan_extinfo)) return (elen); evx = (struct ether_vlan_extinfo *)off; off += sizeof (struct ether_vlan_extinfo); len -= sizeof (struct ether_vlan_extinfo); ethertype = ntohs(evx->ether_type); tci = ntohs(evx->ether_tci); } if (ethertype <= 1514) { /* * Fake out the IEEE 802.3 packets. * Should be DSAP=0xAA, SSAP=0xAA, control=0x03 * then three padding bytes of zero (OUI), * followed by a normal ethernet-type packet. */ ieee8023 = ethertype; ieeestart = off; if (off[0] == 0xAA && off[1] == 0xAA) { ethertype = ntohs(*(ushort_t *)(off + 6)); off += 8; len -= 8; } else { ethertype = 0; off += 3; len -= 3; } } if (flags & F_SUM) { /* * Set the flag that says don't display VLAN information. * If it needs to change, that will be done later if the * packet is VLAN tagged and if snoop is in its default * summary mode. */ set_vlan_id(0); if (evx == NULL) { if (ethertype == 0 && ieee8023 > 0) { (void) sprintf(get_sum_line(), "ETHER 802.3 SSAP %02X DSAP %02X, " "size=%d bytes", ieeestart[0], ieeestart[1], origlen); } else { (void) sprintf(get_sum_line(), "ETHER Type=%04X (%s), size=%d bytes", ethertype, print_ethertype(ethertype), origlen); } } else { if (ethertype == 0 && ieee8023 > 0) { (void) sprintf(get_sum_line(), "ETHER 802.3 SSAP %02X DSAP %02X, " "VLAN ID=%hu, size=%d bytes", ieeestart[0], ieeestart[1], VLAN_ID(tci), origlen); } else { (void) sprintf(get_sum_line(), "ETHER Type=%04X (%s), VLAN ID=%hu, " "size=%d bytes", ethertype, print_ethertype(ethertype), VLAN_ID(tci), origlen); } if (!(flags & F_ALLSUM)) set_vlan_id(VLAN_ID(tci)); } } if (flags & F_DTAIL) { show_header("ETHER: ", "Ether Header", elen); show_space(); if (!trillpkt) { (void) sprintf(get_line(0, 0), "Packet %d arrived at %d:%02d:%d.%05d", pi_frame, pi_time_hour, pi_time_min, pi_time_sec, pi_time_usec / 10); (void) sprintf(get_line(0, 0), "Packet size = %d bytes", elen, elen); } (void) sprintf(get_line(0, 6), "Destination = %s, %s", printether(&e->ether_dhost), print_etherinfo(&e->ether_dhost)); (void) sprintf(get_line(6, 6), "Source = %s, %s", printether(&e->ether_shost), print_etherinfo(&e->ether_shost)); if (evx != NULL) { (void) sprintf(get_line(0, 0), "VLAN ID = %hu", VLAN_ID(tci)); (void) sprintf(get_line(0, 0), "VLAN Priority = %hu", VLAN_PRI(tci)); } if (ieee8023 > 0) { (void) sprintf(get_line(12, 2), "IEEE 802.3 length = %d bytes", ieee8023); /* Print LLC only for non-TCP/IP packets */ if (ethertype == 0) { (void) snprintf(get_line(0, 0), get_line_remain(), "SSAP = %02X, DSAP = %02X, CTRL = %02X", ieeestart[0], ieeestart[1], ieeestart[2]); } } if (ethertype != 0 || ieee8023 == 0) (void) sprintf(get_line(12, 2), "Ethertype = %04X (%s)", ethertype, print_ethertype(ethertype)); show_space(); } /* * We cannot trust the length field in the header to be correct. * But we should continue to process the packet. Then user can * notice something funny in the header. * Go to the next protocol layer only if data have been * copied. */ if (len > 0 && (off + len <= (uchar_t *)e + elen)) { (void) memmove(data, off, len); if (!trillpkt && ethertype == ETHERTYPE_TRILL) { ethertype = interpret_trill(flags, &e, data, &len); /* Decode inner Ethernet frame */ if (ethertype != 0) { evx = NULL; trillpkt = B_TRUE; (void) memmove(data, e, len); e = (struct ether_header *)data; origlen = len; elen = len; goto inner_pkt; } } switch (ethertype) { case ETHERTYPE_IP: (void) interpret_ip(flags, (struct ip *)data, len); break; /* Just in case it is decided to add this type */ case ETHERTYPE_IPV6: (void) interpret_ipv6(flags, (ip6_t *)data, len); break; case ETHERTYPE_ARP: case ETHERTYPE_REVARP: interpret_arp(flags, (struct arphdr *)data, len); break; case ETHERTYPE_PPPOED: case ETHERTYPE_PPPOES: (void) interpret_pppoe(flags, (poep_t *)data, len); break; case ETHERTYPE_AARP: /* AppleTalk */ interpret_aarp(flags, data, len); break; case ETHERTYPE_AT: interpret_at(flags, (struct ddp_hdr *)data, len); break; case 0: if (ieee8023 == 0) break; switch (ieeestart[0]) { case 0xFE: interpret_isis(flags, data, len, memcmp(&e->ether_dhost, &all_isis_rbridges, sizeof (struct ether_addr)) == 0); break; case 0x42: interpret_bpdu(flags, data, len); break; } break; } } return (elen); }
static uint_t interpret_ib(int flags, char *header, int elen, int origlen) { struct ipoib_header *hdr = (struct ipoib_header *)header; char *off; int len; unsigned short ethertype; int blen = MAX(origlen, 4096); if (data != NULL && datalen != 0 && datalen < blen) { free(data); data = NULL; datalen = 0; } if (data == NULL) { data = malloc(blen); if (data == NULL) pr_err("Warning: malloc failure"); datalen = blen; } if (origlen < IPOIB_HDRSIZE) { if (flags & F_SUM) (void) snprintf(get_sum_line(), MAXLINE, "RUNT (short packet - %d bytes)", origlen); if (flags & F_DTAIL) show_header("RUNT: ", "Short packet", origlen); return (elen); } if (elen < IPOIB_HDRSIZE) return (elen); /* * It is not possible to understand just by looking * at the header whether this was a broad/multi cast * packet; thus dst_name is not updated. */ ethertype = ntohs(hdr->ipoib_type); len = elen - IPOIB_HDRSIZE; off = (char *)(hdr + 1); (void) memcpy(data, off, len); if (flags & F_SUM) { (void) snprintf(get_sum_line(), MAXLINE, "IPIB Type=%04X (%s), size = %d bytes", ethertype, print_ethertype(ethertype), origlen); } if (flags & F_DTAIL) { show_header("IPIB: ", "IPIB Header", elen); show_space(); (void) snprintf(get_line(0, 0), get_line_remain(), "Packet %d arrived at %d:%02d:%d.%02d", pi_frame, pi_time_hour, pi_time_min, pi_time_sec, pi_time_usec / 10000); (void) snprintf(get_line(0, 0), get_line_remain(), "Packet size = %d bytes", elen, elen); (void) snprintf(get_line(0, 2), get_line_remain(), "Ethertype = %04X (%s)", ethertype, print_ethertype(ethertype)); show_space(); } /* Go to the next protocol layer */ switch (ethertype) { case ETHERTYPE_IP: (void) interpret_ip(flags, (struct ip *)data, len); break; case ETHERTYPE_IPV6: (void) interpret_ipv6(flags, (ip6_t *)data, len); break; case ETHERTYPE_ARP: case ETHERTYPE_REVARP: interpret_arp(flags, (struct arphdr *)data, len); break; } return (elen); }
int interpret_rip6(int flags, struct rip6 *rip6, int fraglen) { char *p; struct netinfo6 *n; int len, count; struct in6_addr *dst; int notdefault = 0; char dststr[INET6_ADDRSTRLEN]; if (flags & F_SUM) { switch (rip6->rip6_cmd) { case RIPCMD6_REQUEST: p = "C"; break; case RIPCMD6_RESPONSE: p = "R"; break; default: p = "?"; break; } switch (rip6->rip6_cmd) { case RIPCMD6_REQUEST: case RIPCMD6_RESPONSE: len = fraglen - 4; count = 0; for (n = rip6->rip6_nets; len >= sizeof (struct netinfo6); n++) { count++; len -= sizeof (struct netinfo6); } (void) sprintf(get_sum_line(), "RIPng %s (%d destinations)", p, count); break; default: (void) sprintf(get_sum_line(), "RIPng %s", p); break; } } if (flags & F_DTAIL) { show_header("RIPng: ", "Routing Information Protocol for IPv6", fraglen); show_space(); (void) sprintf(get_line((char *)(uintptr_t)rip6->rip6_cmd - dlc_header, 1), "Opcode = %d (%s)", rip6->rip6_cmd, show_cmd6(rip6->rip6_cmd)); (void) sprintf(get_line((char *)(uintptr_t)rip6->rip6_vers - dlc_header, 1), "Version = %d", rip6->rip6_vers); switch (rip6->rip6_cmd) { case RIPCMD6_REQUEST: case RIPCMD6_RESPONSE: show_space(); (void) sprintf(get_line(0, 0), "Address" " Prefix Metric"); len = fraglen - 4; for (n = rip6->rip6_nets; len >= sizeof (struct netinfo6); n++) { if (rip6->rip6_vers > 0) { n->rip6_metric = n->rip6_metric; } dst = &n->rip6_prefix; notdefault = bcmp((caddr_t *)dst, (caddr_t *)&all_zeroes_addr, sizeof (*dst)); (void) inet_ntop(AF_INET6, (char *)dst, dststr, INET6_ADDRSTRLEN); (void) sprintf(get_line((char *)n - dlc_header, sizeof (struct netinfo6)), "%-30s %-10d %-5d %s", notdefault ? dststr : " (default)", n->rip6_prefix_length, n->rip6_metric, n->rip6_metric == 16 ? " (not reachable)":""); len -= sizeof (struct netinfo); } break; } } return (fraglen); }
uint_t interpret_fddi(int flags, caddr_t e, int elen, int origlen) { struct fddi_header fhdr, *f = &fhdr; char *off; int len; boolean_t data_copied = B_FALSE; extern char *dst_name, *src_name; int ethertype; int is_llc = 0, is_smt = 0, is_snap = 0; int blen = MAX(origlen, 4500); if (data != NULL && datalen != 0 && datalen < blen) { free(data); data = NULL; datalen = 0; } if (!data) { data = (char *)malloc(blen); if (!data) pr_err("Warning: malloc failure"); datalen = blen; } if (origlen < 13) { if (flags & F_SUM) { (void) sprintf(get_sum_line(), "RUNT (short packet - %d bytes)", origlen); } if (flags & F_DTAIL) show_header("RUNT: ", "Short packet", origlen); return (elen); } if (elen < 13) return (elen); (void) memcpy(&f->fc, e, sizeof (f->fc)); addr_copy_swap(&f->dhost, (struct ether_addr *)(e+1)); addr_copy_swap(&f->shost, (struct ether_addr *)(e+7)); if ((f->fc&0x50) == 0x50) { is_llc = 1; (void) memcpy(&f->dsap, e+13, sizeof (f->dsap)); (void) memcpy(&f->ssap, e+14, sizeof (f->ssap)); (void) memcpy(&f->ctl, e+15, sizeof (f->ctl)); if (f->dsap == 0xaa && f->ssap == 0xaa) { is_snap = 1; (void) memcpy(&f->proto_id, e+16, sizeof (f->proto_id)); (void) memcpy(&f->type, e+19, sizeof (f->type)); } } else { if ((f->fc&0x41) == 0x41 || (f->fc&0x4f) == 0x4f) { is_smt = 1; } } if (memcmp(&f->dhost, ðer_broadcast, sizeof (struct ether_addr)) == 0) dst_name = "(broadcast)"; else if (f->dhost.ether_addr_octet[0] & 0x01) dst_name = "(multicast)"; if (is_snap) ethertype = ntohs(f->type); else { src_name = print_etherinfo(&f->shost); dst_name = print_etherinfo(&f->dhost); } /* * The 14 byte ether header screws up alignment * of the rest of the packet for 32 bit aligned * architectures like SPARC. Alas, we have to copy * the rest of the packet in order to align it. */ if (is_llc) { if (is_snap) { len = elen - 21; off = (char *)(e + 21); } else { len = elen - 16; off = (char *)(e + 16); } } else { len = elen - 13; off = (char *)(e + 13); } if (len > 0 && (off + len <= (char *)e + elen)) { (void) memcpy(data, off, len); data_copied = B_TRUE; } if (flags & F_SUM) { if (is_llc) { if (is_snap) { (void) sprintf(get_sum_line(), "FDDI LLC Type=%04X (%s), size = %d bytes", ethertype, print_ethertype(ethertype), origlen); } else { (void) sprintf(get_sum_line(), "LLC, but no " "SNAP encoding, size = %d bytes", origlen); } } else if (is_smt) { (void) sprintf(get_sum_line(), "SMT Type=%02X (%s), " "Class = %02X (%s), size = %d bytes", *(uchar_t *)(data+1), print_smttype(*(data+1)), *data, print_smtclass(*data), origlen); } else { (void) sprintf(get_sum_line(), "FC=%02X (%s), size = %d bytes", f->fc, print_fc(f->fc), origlen); } } if (flags & F_DTAIL) { show_header("FDDI: ", "FDDI Header", elen); show_space(); (void) sprintf(get_line(0, 0), "Packet %d arrived at %d:%02d:%d.%05d", pi_frame, pi_time_hour, pi_time_min, pi_time_sec, pi_time_usec / 10); (void) sprintf(get_line(0, 0), "Packet size = %d bytes", elen, elen); (void) sprintf(get_line(0, 6), "Destination = %s, %s", printether(&f->dhost), print_etherinfo(&f->dhost)); (void) sprintf(get_line(6, 6), "Source = %s, %s", printether(&f->shost), print_etherinfo(&f->shost)); if (is_llc) { (void) sprintf(get_line(12, 2), "Frame Control = %02x (%s)", f->fc, print_fc(f->fc)); (void) sprintf(get_line(12, 2), "Dest Service Access Point = %02x", f->dsap); (void) sprintf(get_line(12, 2), "Source Service Access Point = %02x", f->ssap); (void) sprintf(get_line(12, 2), "Control = %02x", f->ctl); if (is_snap) { (void) sprintf(get_line(12, 2), "Protocol Id = %02x%02x%02x", f->proto_id[0], f->proto_id[1], f->proto_id[2]); } } else if (is_smt) { (void) sprintf(get_line(12, 2), "Frame Control = %02x (%s)", f->fc, print_fc(f->fc)); (void) sprintf(get_line(12, 2), "Class = %02x (%s)", (uchar_t)*data, print_smtclass(*data)); (void) sprintf(get_line(12, 2), "Type = %02x (%s)", *(uchar_t *)(data+1), print_smttype(*(data+1))); } else { (void) sprintf(get_line(12, 2), "FC=%02X (%s), size = %d bytes", f->fc, print_fc(f->fc), origlen); } if (is_snap) { (void) sprintf(get_line(12, 2), "LLC Type = %04X (%s)", ethertype, print_ethertype(ethertype)); } show_space(); } /* go to the next protocol layer */ if (is_llc && is_snap && f->ctl == 0x03 && data_copied) { switch (ethertype) { case ETHERTYPE_IP: (void) interpret_ip(flags, (struct ip *)data, len); break; /* Just in case it is decided to add this type */ case ETHERTYPE_IPV6: (void) interpret_ipv6(flags, (ip6_t *)data, len); break; case ETHERTYPE_ARP: case ETHERTYPE_REVARP: interpret_arp(flags, (struct arphdr *)data, len); break; default: break; } } return (elen); }
static int v1_header(int flags, struct slpv1_hdr *slp, int fraglen) { extern int src_port, dst_port, curr_proto; char *prototag = (curr_proto == IPPROTO_TCP? "/tcp" : ""); if (flags & F_SUM) { char portflag = ' '; if (msglength < sizeof (*slp)) { sprintf(msgbuf, "SLP V1 [incomplete header]"); return (0); } if (slp->vers != 1) { if (curr_proto == IPPROTO_TCP) sprintf(msgbuf, "SLP [TCP Continuation]"); else sprintf(msgbuf, "SLP [unknown version %d]", slp->vers); return (0); } if (src_port != 427 && dst_port != 427) portflag = '-'; sprintf(msgbuf, "SLP V1%c%s [%d%s] ", portflag, slpv1_func(slp->function, B_TRUE), ntohs(slp->xid), prototag); msgend = msgbuf + strlen(msgbuf); msglength -= sizeof (*slp); p += sizeof (*slp); } else if (flags & F_DTAIL) { show_header("SLP: ", "Service Location Protocol (v1)", fraglen); show_space(); if (msglength < sizeof (*slp)) { sprintf(get_line(0, 0), "==> Incomplete SLP header"); return (0); } sprintf(get_line(0, 0), "Version = %d", slp->vers); if (slp->vers != 1) { if (curr_proto == IPPROTO_TCP) sprintf(get_line(0, 0), "==> TCP continuation"); else sprintf(get_line(0, 0), "==> Unexpected version number"); return (0); } sprintf(get_line(0, 0), "Function = %d, %s", slp->function, slpv1_func(slp->function, B_FALSE)); sprintf(get_line(0, 0), "Message length = %u", ntohs(slp->length)); /* flags */ sprintf(get_line(0, 0), "Flags = 0x%02x", slp->flags); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V1_OVERFLOW, "overflow", "no overflow")); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V1_MONOLINGUAL, "monolingual", "not monolingual")); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V1_URL_AUTH, "url authentication", "no url authentication")); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V1_ATTR_AUTH, "attribute authentication", "no attribute authentication")); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V1_FRESH_REG, "fresh registration", "no fresh registration")); /* check reserved flags that must be zero */ if ((slp->flags & 7) != 0) { sprintf(get_line(0, 0), " .... .xxx = %d (reserved flags nonzero)", slp->flags & 7); } /* end of flags */ sprintf(get_line(0, 0), "Dialect = %u", slp->dialect); sprintf(get_line(0, 0), "Language = 0x%02x%02x, %c%c", slp->language[0], slp->language[1], slp->language[0], slp->language[1]); v1_charset = ntohs(slp->charset); sprintf(get_line(0, 0), "Character encoding = %u, %s", v1_charset, slpv1_charset(v1_charset)); sprintf(get_line(0, 0), "XID = %u", ntohs(slp->xid)); /* set msglength to remaining length of SLP message */ msglength -= sizeof (*slp); p += sizeof (*slp); } return (1); }
/*ARGSUSED*/ void interpret_igmp(int flags, char *data, int iplen, int ilen) { const char *pt; char *line; struct igmp *igmp = (struct igmp *)data; char addrstr[INET_ADDRSTRLEN]; if (ilen < IGMP_MINLEN) { /* incomplete header */ line = get_sum_line(); (void) snprintf(line, MAXLINE, "Malformed IGMP packet"); return; } switch (igmp->igmp_type) { case IGMP_MEMBERSHIP_QUERY: if (ilen == IGMP_MINLEN) { if (igmp->igmp_code == 0) pt = "v1 membership query"; else pt = "v2 membership query"; } else if (ilen >= IGMP_V3_QUERY_MINLEN) { pt = "v3 membership query"; } else { pt = "Unknown membership query"; } break; case IGMP_V1_MEMBERSHIP_REPORT: pt = "v1 membership report"; break; case IGMP_V2_MEMBERSHIP_REPORT: pt = "v2 membership report"; break; case IGMP_V3_MEMBERSHIP_REPORT: pt = "v3 membership report"; break; case IGMP_V2_LEAVE_GROUP: pt = "v2 leave group"; break; default: pt = "Unknown"; break; } if (flags & F_SUM) { line = get_sum_line(); (void) snprintf(line, MAXLINE, "IGMP %s", pt); } if (flags & F_DTAIL) { show_header("IGMP: ", "IGMP Header", ilen); show_space(); (void) snprintf(get_line(0, 0), get_line_remain(), "Type = %d (%s)", igmp->igmp_type, pt); (void) snprintf(get_line(0, 0), get_line_remain(), "Max Response Time = %d", igmp->igmp_code); (void) snprintf(get_line(0, 0), get_line_remain(), "Checksum = %x", ntohs(igmp->igmp_cksum)); if (igmp->igmp_type == IGMP_MEMBERSHIP_QUERY && ilen >= IGMP_V3_QUERY_MINLEN) { interpret_igmpv3qry(igmp, ilen); } else if (igmp->igmp_type == IGMP_V3_MEMBERSHIP_REPORT) { interpret_igmpv3rpt(igmp, ilen); } else { (void) snprintf(get_line(0, 0), get_line_remain(), "Group = %s", inet_ntop(AF_INET, &igmp->igmp_group.s_addr, addrstr, INET_ADDRSTRLEN)); } show_space(); } }
void interpret_mip_cntrlmsg(int flags, uchar_t *msg, int fraglen) { char *pt, *pc = NULL; char *line; regreq_t rreq[1]; regrep_t rrep[1]; int regext_size; uchar_t *regext_data; struct in_addr addr_temp; /* First byte of the message should be the type */ switch (*msg) { case REG_TYPE_REQ: if (fraglen < sizeof (regreq_t)) return; pt = (flags & F_DTAIL ? "registration request ":"reg rqst "); (void) memcpy(rreq, msg, sizeof (*rreq)); regext_size = fraglen - sizeof (regreq_t); regext_data = msg + sizeof (*rreq); break; case REG_TYPE_REP: if (fraglen < sizeof (regrep_t)) return; pt = (flags & F_DTAIL ? "registration reply ":"reg reply "); (void) memcpy(rrep, msg, sizeof (*rrep)); regext_size = fraglen - sizeof (regrep_t); regext_data = msg + sizeof (*rrep); switch (rrep->code) { case REPLY_CODE_ACK: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL)) ? "OK" : "OK code 0"; break; case REPLY_CODE_ACK_NO_SIMULTANEOUS: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "OK simultaneous bindings" : "OK code 1"; break; case REPLY_CODE_FA_NACK_UNSPECIFIED: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: unspecified":"FA denial: code 64"; break; case REPLY_CODE_FA_NACK_PROHIBITED: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: prohibited":"FA denial: code 65"; break; case REPLY_CODE_FA_NACK_RESOURCES: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: no resources":"FA denial: code 66"; break; case REPLY_CODE_FA_NACK_MN_AUTH: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: MN auth failed":"FA denial: code 67"; break; case REPLY_CODE_FA_NACK_HA_AUTH: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: HA auth failed": "FA denial: code 68"; break; case REPLY_CODE_FA_NACK_LIFETIME: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: lifetime":"FA denial: code 69"; break; case REPLY_CODE_FA_NACK_BAD_REQUEST: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: bad request": "FA: code 70"; break; case REPLY_CODE_FA_NACK_BAD_REPLY: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: bad Reply":"FA denial: code 71"; break; case REPLY_CODE_FA_NACK_ENCAP_UNAVAILABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: encapsulation":"FA denial: code 72"; break; case REPLY_CODE_FA_NACK_VJ_UNAVAILABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: VJ compression":"FA denial: code 73"; break; case REPLY_CODE_FA_NACK_BIDIR_TUNNEL_UNAVAILABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: reverse tunnel unavailable": "FA denial: code 74"; break; case REPLY_CODE_FA_NACK_BIDIR_TUNNEL_NO_TBIT: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: reverse tunnel: missing T-bit": "FA denial: code 75"; break; case REPLY_CODE_FA_NACK_BIDIR_TUNNEL_TOO_DISTANT: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: reverse tunnel: too distant": "FA denial: code 76"; break; case REPLY_CODE_FA_NACK_ICMP_HA_NET_UNREACHABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: home network unreachable": "FA denial: code 80"; break; case REPLY_CODE_FA_NACK_ICMP_HA_HOST_UNREACHABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: HA host unreachable": "FA denial: code 81"; break; case REPLY_CODE_FA_NACK_ICMP_HA_PORT_UNREACHABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: HA port unreachable": "FA denial: code 82"; break; case REPLY_CODE_FA_NACK_ICMP_HA_UNREACHABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: HA unreachable":"FA denial: code 88"; break; case REPLY_CODE_FA_NACK_UNIQUE_HOMEADDR_REQD: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: Unique Home Addr Required": "FA denial: code 96"; break; case REPLY_CODE_FA_NACK_MISSING_NAI: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: Missing NAI": "FA denial: code 97"; break; case REPLY_CODE_FA_NACK_MISSING_HOME_AGENT: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: Missing Home Agent": "FA denial: code 98"; break; case REPLY_CODE_FA_NACK_UNKNOWN_CHALLENGE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: Unknown Challenge": "FA denial: code 104"; break; case REPLY_CODE_FA_NACK_MISSING_CHALLENGE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: Missing Challenge": "FA denial: code 105"; break; case REPLY_CODE_FA_NACK_MISSING_MN_FA: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "FA denial: Missing Mobile-Foreign Key Extension": "FA denial: code 106"; break; case REPLY_CODE_HA_NACK_UNSPECIFIED: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: unspecified":"HA denial: code 128"; break; case REPLY_CODE_HA_NACK_PROHIBITED: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: prohibited":"HA denial: code 129"; break; case REPLY_CODE_HA_NACK_RESOURCES: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: no resources":"HA denial: code 130"; break; case REPLY_CODE_HA_NACK_MN_AUTH: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: MN auth failed":"HA denial: code 131"; break; case REPLY_CODE_HA_NACK_FA_AUTH: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: FA auth failed":"HA denial: code 132"; break; case REPLY_CODE_HA_NACK_ID_MISMATCH: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: ID mismatch":"HA denial: code 133"; break; case REPLY_CODE_HA_NACK_BAD_REQUEST: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: bad request":"HA denial: code 134"; break; case REPLY_CODE_HA_NACK_TOO_MANY_BINDINGS: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: too many bindings": "HA denial: code 135"; break; case REPLY_CODE_HA_NACK_BAD_HA_ADDRESS: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: bad HA address":"HA denial: code 136"; break; case REPLY_CODE_HA_NACK_BIDIR_TUNNEL_UNAVAILABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: no reverse tunnel": "HA denial: code 137"; break; case REPLY_CODE_HA_NACK_BIDIR_TUNNEL_NO_TBIT: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: reverse tunnel: no T-bit": "HA denial: code 138"; break; case REPLY_CODE_HA_NACK_BIDIR_ENCAP_UNAVAILABLE: pc = ((flags & F_ALLSUM) || (flags & F_DTAIL))? "HA denial: encapsulation unavailable": "HA denial: code 139"; break; default: pc = "?"; break; } break; default : break; } if (flags & F_SUM) { line = get_sum_line(); if (pc != NULL) (void) sprintf(line, "Mobile IP %s(%s)", pt, pc); else (void) sprintf(line, "Mobile IP %s", pt); } if (flags & F_DTAIL) { show_header("MIP: ", "Mobile IP Header", fraglen); show_space(); if (*msg == REG_TYPE_REQ) { (void) sprintf(get_line((char *)&rreq - dlc_header, 1), "Registration header type = %s", pt); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), "%d... .... = %s simultaneous bindings ", (rreq->Simultaneous_registration == 1)? 1 : 0, (rreq->Simultaneous_registration == 1)? "":"no"); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), ".%d.. .... = %s broadcast datagrams ", (rreq->Broadcasts_desired == 1) ? 1 : 0, (rreq->Broadcasts_desired == 1) ? "":"no"); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), "..%d. .... = %s decapsulation by MN", (rreq->Decapsulation_done_locally == 1) ? 1 : 0, (rreq->Decapsulation_done_locally == 1) ? "" : "no"); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), "...%d .... = %s minimum encapsulation ", (rreq->Minimal_encap_desired == 1) ? 1 : 0, (rreq->Minimal_encap_desired == 1) ? "" : "no"); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), ".... %d... = %s GRE encapsulation ", (rreq->GRE_encap_desired == 1) ? 1 : 0, (rreq->GRE_encap_desired == 1) ? "" : "no"); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), ".... .%d.. = %s VJ hdr Compression ", (rreq->VJ_compression_desired == 1) ? 1 : 0, (rreq->VJ_compression_desired == 1) ? "" : "no"); (void) sprintf(get_line( (char *)(((uchar_t *)&rreq) + 1) - dlc_header, 1), ".... ..%d. = %s reverse tunnel", (rreq->BiDirectional_Tunnel_desired == 1) ? 1 : 0, (rreq->BiDirectional_Tunnel_desired == 1) ? "" : "no"); if (ntohs(rreq->lifetime) == 0xffff) { (void) sprintf(get_line( (char *)&rreq->lifetime - dlc_header, 1), "Life Time = 0xFFFF (infinity)"); } else if (ntohs(rreq->lifetime) == 0) { (void) sprintf(get_line( (char *)&rreq->lifetime - dlc_header, 1), "Life Time = 0 " "(request for de-registration)"); } else { (void) sprintf(get_line( (char *)&rreq->lifetime - dlc_header, 1), "Life time = %d seconds", ntohs(rreq->lifetime)); } addr_temp.s_addr = rreq->home_addr; (void) sprintf(get_line( (char *)&rreq->home_addr - dlc_header, 1), "Home address = %s, %s", inet_ntoa(addr_temp), addrtoname(AF_INET, &addr_temp)); addr_temp.s_addr = rreq->home_agent_addr; (void) sprintf(get_line( (char *)&rreq->home_agent_addr - dlc_header, 1), "Home Agent address = %s, %s", inet_ntoa(addr_temp), addrtoname(AF_INET, &addr_temp)); addr_temp.s_addr = rreq->care_of_addr; (void) sprintf(get_line( (char *)&rreq->care_of_addr - dlc_header, 1), "Care of address = %s, %s", inet_ntoa(addr_temp), addrtoname(AF_INET, &addr_temp)); (void) sprintf(get_line( (char *)&rreq->identification - dlc_header, 1), "Identification = 0x%x-%x", ntohl(rreq->identification.high_bits), ntohl(rreq->identification.low_bits)); } else if (*msg == REG_TYPE_REP) { (void) sprintf( get_line((char *)&rrep->type - dlc_header, 1), "Registration header type = %d (%s)", (int)rrep->type, pt); (void) sprintf(get_line((char *)&rrep - dlc_header, 1), "Code = %d %s", (int)rrep->code, pc); if (ntohs(rrep->lifetime) == 0xffff) { (void) sprintf(get_line( (char *)&rrep->lifetime - dlc_header, 1), "Life time = 0xFFFF (infinity)"); } else if (ntohs(rrep->lifetime) == 0) { (void) sprintf(get_line( (char *)&rrep->lifetime - dlc_header, 1), ((rrep->code == REPLY_CODE_ACK) || (rrep->code == REPLY_CODE_ACK_NO_SIMULTANEOUS))? "Life time = 0 (de-registeration success)" : "Life time = 0 (de-registration failed)"); } else { (void) sprintf(get_line( (char *)&rrep->lifetime - dlc_header, 1), "Life time = %d seconds", ntohs(rrep->lifetime)); } addr_temp.s_addr = rrep->home_addr; (void) sprintf( get_line((char *)&rrep->home_addr - dlc_header, 1), "Home address = %s, %s", inet_ntoa(addr_temp), addrtoname(AF_INET, &addr_temp)); addr_temp.s_addr = rrep->home_agent_addr; (void) sprintf(get_line( (char *)&rrep->home_agent_addr - dlc_header, 1), "Home Agent address = %s, %s", inet_ntoa(addr_temp), addrtoname(AF_INET, &addr_temp)); (void) sprintf(get_line( (char *)&rrep->identification - dlc_header, 1), "Identification = 0x%x-%x", ntohl(rrep->identification.high_bits), ntohl(rrep->identification.low_bits)); } fraglen = interpret_extensions(regext_data, regext_size, REG); } }
static int v2_header(int flags, struct slpv2_hdr *slp, int *totallen, int fraglen) { extern int curr_proto, dst_port; char *prototag = (curr_proto == IPPROTO_TCP ? "/tcp" : ""); if ((slp->flags & V2_OVERFLOW) == V2_OVERFLOW) overflow = B_TRUE; /* summary mode header parsing */ if (flags & F_SUM) { /* make sure we have at least a header */ if (msglength < sizeof (*slp)) { sprintf(get_sum_line(), "SLP V2 [Incomplete Header]"); return (0); } sprintf(msgbuf, "SLP V2 %s [%d%s] ", slpv2_func(slp->function, B_TRUE), ntohs(slp->xid), prototag); /* skip to end of header */ msgend = msgbuf + strlen(msgbuf); msglength -= sizeof (*slp); p += sizeof (*slp); /* skip language tag */ SKIPFIELD(FIELD_DEFAULT); } else if (flags & F_DTAIL) { char *lang; int len; /* detailed mode header parsing */ show_header("SLP: ", "Service Location Protocol (v2)", fraglen); show_space(); if (msglength < sizeof (*slp)) { sprintf(get_line(0, 0), "==> Incomplete SLP header"); return (0); } sprintf(get_line(0, 0), "Version = %d", slp->vers); sprintf(get_line(0, 0), "Function = %d, %s", slp->function, slpv2_func(slp->function, B_FALSE)); get_int24(&(slp->l1)); *totallen = netval; sprintf(get_line(0, 0), "Message length = %u", *totallen); /* check for TCP continuation */ if (curr_proto == IPPROTO_TCP && *totallen > msglength && !tcp_continuation) { tcp_continuation = B_TRUE; reg_tcp_cont((char *)slp, *totallen, msglength, dst_port); } if (!tcp_continuation && *totallen != msglength) { sprintf(get_line(0, 0), " (Stated and on-the-wire lengths differ)"); } /* flags */ sprintf(get_line(0, 0), "Flags = 0x%02x", slp->flags); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V2_OVERFLOW, "overflow", "no overflow")); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V2_FRESH, "fresh registration", "no fresh registration")); sprintf(get_line(0, 0), " %s", getflag(slp->flags, V2_MCAST, "request multicast / broadcast", "unicast")); /* check reserved flags that must be zero */ if ((slp->flags & 7) != 0) { sprintf(get_line(0, 0), " .... .xxx = %d (reserved flags nonzero)", slp->flags & 7); } /* end of flags */ /* language tag */ p = (char *)slp + sizeof (*slp); msglength -= sizeof (*slp); GETSHORT(len); if (len > msglength) { sprintf(get_line(0, 0), "Language Tag Length = %u [CORRUPT MESSAGE]", len); return (0); } lang = get_line(0, 0); strcpy(lang, "Language Tag = "); strncat(lang, p, len); sprintf(get_line(0, 0), "XID = %u", ntohs(slp->xid)); /* set msglength to remaining length of SLP message */ p += len; msglength -= len; } return (1); }
int main(int argc,char ** argv) { int i; char * temp; build_defaults(); bootstrap_HMMer2(); strip_out_standard_options(&argc,argv,show_help,show_version); if( (temp = strip_out_assigned_argument(&argc,argv,"gap")) != NULL ) gap_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"g")) != NULL ) gap_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"ext")) != NULL ) ext_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"e")) != NULL ) ext_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"matrix")) != NULL ) matrix_file = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"m")) != NULL ) matrix_file = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"s")) != NULL ) qstart_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"t")) != NULL ) qend_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"aln")) != NULL ) aln_number_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"codon")) != NULL ) codon_file = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"alg")) != NULL ) alg_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"aalg")) != NULL ) aln_alg_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"cut")) != NULL ) search_cutoff_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"ecut")) != NULL ) evalue_search_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"subs")) != NULL ) subs_string = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"indel")) != NULL ) indel_string = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"init")) != NULL ) startend_string = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"alln")) != NULL ) allN_string = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"null")) != NULL ) null_string = temp; if( (strip_out_boolean_argument(&argc,argv,"dnas")) == TRUE ) use_single_dna = TRUE; if( (strip_out_boolean_argument(&argc,argv,"dnadb")) == TRUE ) use_single_dna = FALSE; if( (strip_out_boolean_argument(&argc,argv,"tfor")) == TRUE ) do_forward_only = TRUE; if( (strip_out_boolean_argument(&argc,argv,"flati")) == TRUE ) flat_insert = TRUE; if( (strip_out_boolean_argument(&argc,argv,"hmmer")) == TRUE ) use_tsm = TRUE; if( (strip_out_boolean_argument(&argc,argv,"pfam2")) == TRUE ) use_pfam1 = TRUE; if( (strip_out_boolean_argument(&argc,argv,"pfam")) == TRUE ) use_pfam2 = TRUE; if( (strip_out_boolean_argument(&argc,argv,"protein")) == TRUE ) use_single_pro = TRUE; if( (strip_out_boolean_argument(&argc,argv,"prodb")) == TRUE ) use_db_pro = TRUE; if( (temp = strip_out_assigned_argument(&argc,argv,"hname")) != NULL ) hmm_name = temp; if( (strip_out_boolean_argument(&argc,argv,"nohis")) != FALSE ) show_histogram = FALSE; if( (strip_out_boolean_argument(&argc,argv,"pretty")) != FALSE ) show_pretty = TRUE; if( (strip_out_boolean_argument(&argc,argv,"pep")) != FALSE ) show_pep = TRUE; if( (strip_out_boolean_argument(&argc,argv,"mul")) != FALSE ) make_anchored_aln = TRUE; if( (strip_out_boolean_argument(&argc,argv,"para")) != FALSE ) show_para = TRUE; if( (strip_out_boolean_argument(&argc,argv,"sum")) != FALSE ) show_match_sum = TRUE; if( (strip_out_boolean_argument(&argc,argv,"alb")) != FALSE ) show_AlnBlock = TRUE; if( (strip_out_boolean_argument(&argc,argv,"pal")) != FALSE ) show_PackAln = TRUE; if( (temp = strip_out_assigned_argument(&argc,argv,"divide")) != NULL ) divide_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"block")) != NULL ) main_block_str = temp; if( (temp = strip_out_assigned_argument(&argc,argv,"report")) != NULL ) report_str = temp; dbsi = new_DBSearchImpl_from_argv(&argc,argv); dpri = new_DPRunImpl_from_argv(&argc,argv); strip_out_remaining_options_with_warning(&argc,argv); if( argc != 3 ) { warn("Wrong number of arguments (expect 2)!\n"); if( argc > 1 ){ warn("Arg line looked like (after option processing)"); for(i=1;i<argc;i++) { fprintf(stderr," %s\n",argv[i]); } } show_short_help(); } if( show_pretty == FALSE && show_AlnBlock == FALSE && show_PackAln == FALSE && show_pep == FALSE ) { show_pretty = TRUE; show_para = TRUE; } if( use_db_pro == FALSE && use_single_pro == FALSE && use_tsm == FALSE && use_pfam1 == FALSE && use_pfam2 == FALSE ) { use_single_pro = TRUE; } if( use_single_pro == TRUE || use_tsm == TRUE ) { if( use_single_dna == TRUE ) fatal("one on one search. Shouldn't you use pcwise?"); search_mode = PC_SEARCH_S2DB; } else { if( use_single_dna == TRUE ) search_mode = PC_SEARCH_DB2S; else search_mode = PC_SEARCH_DB2DB; } if( evalue_search_str != NULL && search_mode != PC_SEARCH_S2DB ) { fatal("Trying to set a evalue cutoff on a non evalue based search. you can only use evalues in a protein HMM vs DNA database search (sorry!)"); } if( make_anchored_aln == TRUE && search_mode != PC_SEARCH_S2DB ) { fatal("Trying to make an anchored alignment and not in single search mode"); } if( make_anchored_aln == TRUE) { do_complete_analysis = TRUE; } /* pick up remaining args and do it */ dna_seq_file = argv[2]; protein_file = argv[1]; if( build_objects() == FALSE) fatal("Could not build objects!"); if( build_db_objects() == FALSE) fatal("Could not build database-ready objects!"); show_header(stdout); if( search_db() == FALSE) warn("Could not search database"); show_output(); free_objects(); return 0; }
int interpret_ah(int flags, uint8_t *hdr, int iplen, int fraglen) { /* LINTED: alignment */ ah_t *ah = (ah_t *)hdr; ah_t *aligned_ah; ah_t storage; /* In case hdr isn't aligned. */ char *line, *buff; uint_t ahlen, auth_data_len; uint8_t *auth_data, *data; int new_iplen; uint8_t proto; if (fraglen < sizeof (ah_t)) return (fraglen); /* incomplete header */ if (!IS_P2ALIGNED(hdr, 4)) { aligned_ah = (ah_t *)&storage; bcopy(hdr, &storage, sizeof (ah_t)); } else { aligned_ah = ah; } /* * "+ 8" is for the "constant" part that's not included in the AH * length. * * The AH RFC specifies the length field in "length in 4-byte units, * not counting the first 8 bytes". So if an AH is 24 bytes long, * the length field will contain "4". (4 * 4 + 8 == 24). */ ahlen = (aligned_ah->ah_length << 2) + 8; fraglen -= ahlen; if (fraglen < 0) return (fraglen + ahlen); /* incomplete header */ auth_data_len = ahlen - sizeof (ah_t); auth_data = (uint8_t *)(ah + 1); data = auth_data + auth_data_len; if (flags & F_SUM) { line = (char *)get_sum_line(); (void) sprintf(line, "AH SPI=0x%x Replay=%u", ntohl(aligned_ah->ah_spi), ntohl(aligned_ah->ah_replay)); line += strlen(line); } if (flags & F_DTAIL) { show_header("AH: ", "Authentication Header", ahlen); show_space(); (void) sprintf(get_line((char *)&ah->ah_nexthdr - dlc_header, 1), "Next header = %d (%s)", aligned_ah->ah_nexthdr, getproto(aligned_ah->ah_nexthdr)); (void) sprintf(get_line((char *)&ah->ah_length - dlc_header, 1), "AH length = %d (%d bytes)", aligned_ah->ah_length, ahlen); (void) sprintf(get_line((char *)&ah->ah_reserved - dlc_header, 2), "<Reserved field = 0x%x>", ntohs(aligned_ah->ah_reserved)); (void) sprintf(get_line((char *)&ah->ah_spi - dlc_header, 4), "SPI = 0x%x", ntohl(aligned_ah->ah_spi)); (void) sprintf(get_line((char *)&ah->ah_replay - dlc_header, 4), "Replay = %u", ntohl(aligned_ah->ah_replay)); /* * 2 for two hex digits per auth_data byte. */ buff = malloc(auth_data_len * 2); if (buff != NULL) { int i; for (i = 0; i < auth_data_len; i++) sprintf(buff + i * 2, "%02x", auth_data[i]); } (void) sprintf(get_line((char *)auth_data - dlc_header, auth_data_len), "ICV = %s", (buff == NULL) ? "<out of memory>" : buff); /* malloc(3c) says I can call free even if buff == NULL */ free(buff); show_space(); } new_iplen = iplen - ahlen; proto = aligned_ah->ah_nexthdr; /* * Print IPv6 Extension Headers, or skip them in the summary case. */ if (proto == IPPROTO_HOPOPTS || proto == IPPROTO_DSTOPTS || proto == IPPROTO_ROUTING || proto == IPPROTO_FRAGMENT) { (void) print_ipv6_extensions(flags, &data, &proto, &iplen, &fraglen); } if (fraglen > 0) switch (proto) { case IPPROTO_ENCAP: /* LINTED: alignment */ (void) interpret_ip(flags, (struct ip *)data, new_iplen); break; case IPPROTO_IPV6: (void) interpret_ipv6(flags, (ip6_t *)data, new_iplen); break; case IPPROTO_ICMP: (void) interpret_icmp(flags, /* LINTED: alignment */ (struct icmp *)data, new_iplen, fraglen); break; case IPPROTO_ICMPV6: /* LINTED: alignment */ (void) interpret_icmpv6(flags, (icmp6_t *)data, new_iplen, fraglen); break; case IPPROTO_TCP: (void) interpret_tcp(flags, (struct tcphdr *)data, new_iplen, fraglen); break; case IPPROTO_ESP: (void) interpret_esp(flags, data, new_iplen, fraglen); break; case IPPROTO_AH: (void) interpret_ah(flags, data, new_iplen, fraglen); break; case IPPROTO_UDP: (void) interpret_udp(flags, (struct udphdr *)data, new_iplen, fraglen); break; /* default case is to not print anything else */ } return (ahlen); }
void do_normalmode(struct block * buf) { int bs = get_bufsize(buf); struct ent * e; switch (buf->value) { // Movement commands case 'j': case OKEY_DOWN: currow = forw_row(1)->row; unselect_ranges(); update(TRUE); break; case 'k': case OKEY_UP: currow = back_row(1)->row; unselect_ranges(); update(TRUE); break; case 'h': case OKEY_LEFT: curcol = back_col(1)->col; unselect_ranges(); update(TRUE); break; case 'l': case OKEY_RIGHT: curcol = forw_col(1)->col; unselect_ranges(); update(TRUE); break; case '0': case OKEY_HOME: curcol = left_limit()->col; unselect_ranges(); update(TRUE); break; case '$': case OKEY_END: curcol = right_limit()->col; unselect_ranges(); update(TRUE); break; case '^': currow = goto_top()->row; unselect_ranges(); update(TRUE); break; case '#': currow = goto_bottom()->row; unselect_ranges(); update(TRUE); break; // Tick case '\'': if (bs != 2) break; unselect_ranges(); e = tick(buf->pnext->value); if (row_hidden[e->row]) { scerror("Cell row is hidden"); break; } if (col_hidden[e->col]) { scerror("Cell column is hidden"); break; } currow = e->row; curcol = e->col; update(TRUE); break; // CTRL j case ctl('j'): { int p, c = curcol, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); c = sr->tlcol; cf = sr->brcol; } auto_justify(c, cf, DEFWIDTH); // auto justificado de columnas update(TRUE); break; } // CTRL d case ctl('d'): // set date format using current locate D_FMT format { #ifdef USELOCALE #include <locale.h> #include <langinfo.h> char * loc = NULL; char * f = NULL; loc = setlocale(LC_TIME, ""); if (loc != NULL) { f = nl_langinfo(D_FMT); } else { scerror("No locale set. Nothing changed"); } int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (any_locked_cells(r, c, rf, cf)) { scerror("Locked cells encountered. Nothing changed"); return; } dateformat(lookat(r, c), lookat(rf, cf), f); update(TRUE); break; #else scinfo("Build made without USELOCALE enabled"); #endif } // CTRL f case ctl('f'): case OKEY_PGDOWN: { int n = LINES - RESROW - 1; if (atoi(get_conf_value("half_page_scroll"))) n = n / 2; struct ent * e = forw_row(n); currow = e->row; unselect_ranges(); scroll_down(n); update(TRUE); break; } // CTRL b case ctl('b'): case OKEY_PGUP: { int n = LINES - RESROW - 1; if (atoi(get_conf_value("half_page_scroll"))) n = n / 2; currow = back_row(n)->row; unselect_ranges(); scroll_up(n); update(TRUE); break; } case 'w': e = go_forward(); currow = e->row; curcol = e->col; unselect_ranges(); update(TRUE); break; case 'b': e = go_backward(); currow = e->row; curcol = e->col; unselect_ranges(); update(TRUE); break; case '/': { char cadena[] = ":int goto "; int i; for (i=0; i<strlen(cadena); i++) { flush_buf(buf); addto_buf(buf, cadena[i]); exec_single_cmd(buf); } break; } case 'H': currow = vert_top()->row; unselect_ranges(); update(TRUE); break; case 'M': currow = vert_middle()->row; unselect_ranges(); update(TRUE); break; case 'L': currow = vert_bottom()->row; unselect_ranges(); update(TRUE); break; case 'G': // goto end e = go_end(); currow = e->row; curcol = e->col; unselect_ranges(); update(TRUE); break; // GOTO goto case ctl('a'): e = go_home(); curcol = e->col; currow = e->row; unselect_ranges(); update(TRUE); break; case 'g': if (buf->pnext->value == '0') { // g0 curcol = go_bol()->col; } else if (buf->pnext->value == '$') { // g$ curcol = go_eol()->col; } else if (buf->pnext->value == 'g') { // gg e = go_home(); curcol = e->col; currow = e->row; } else if (buf->pnext->value == 'G') { // gG e = go_end(); currow = e->row; curcol = e->col; } else if (buf->pnext->value == 'M') { // gM curcol = horiz_middle()->col; } else { // gA4 (goto cell) (void) sprintf(interp_line, "goto %s", parse_cell_name(1, buf)); send_to_interp(interp_line); } unselect_ranges(); update(TRUE); break; // repeat last command case '.': copybuffer(lastcmd_buffer, buf); // nose graba en lastcmd_buffer!! cmd_multiplier = 1; exec_mult(buf, COMPLETECMDTIMEOUT); break; // enter command mode case ':': clr_header(input_win, 0); chg_mode(':'); #ifdef HISTORY_FILE add(commandline_history, ""); #endif print_mode(input_win); wrefresh(input_win); handle_cursor(); inputline_pos = 0; break; // enter visual mode case 'v': chg_mode('v'); handle_cursor(); clr_header(input_win, 0); print_mode(input_win); wrefresh(input_win); start_visualmode(currow, curcol, currow, curcol); break; // INPUT COMMANDS case '=': case '\\': case '<': case '>': if (locked_cell(currow, curcol)) return; insert_edit_submode = buf->value; chg_mode(insert_edit_submode); clr_header(input_win, 0); print_mode(input_win); wrefresh(input_win); inputline_pos = 0; break; // EDITION COMMANDS // edit cell (v) case 'e': if (locked_cell(currow, curcol)) return; clr_header(input_win, 0); inputline_pos = 0; if (start_edit_mode(buf, 'v')) show_header(input_win); break; // edit cell (s) case 'E': if (locked_cell(currow, curcol)) return; clr_header(input_win, 0); inputline_pos = 0; if (start_edit_mode(buf, 's')) show_header(input_win); else { scinfo("No string value to edit"); chg_mode('.'); show_celldetails(input_win); print_mode(input_win); wrefresh(input_win); } break; // del current cell or range case 'x': del_selected_cells(); update(TRUE); break; // format col case 'f': if (bs != 2) return; formatcol(buf->pnext->value); break; // mark cell or range case 'm': if (bs != 2) break; int p = is_range_selected(); if (p != -1) { // mark range struct srange * sr = get_range_by_pos(p); set_range_mark(buf->pnext->value, sr); } else // mark cell set_cell_mark(buf->pnext->value, currow, curcol); modflg++; break; // copy case 'c': { if (bs != 2) break; struct mark * m = get_mark(buf->pnext->value); if ( m == NULL) return; // if m represents a range if ( m->row == -1 && m->col == -1) { srange * r = m->rng; yank_area(r->tlrow, r->tlcol, r->brrow, r->brcol, 'a', cmd_multiplier); if (paste_yanked_ents(0, 'c') == -1) { scerror("Locked cells encountered. Nothing changed"); break; } // if m represents just one cell } else { struct ent * p = *ATBL(tbl, get_mark(buf->pnext->value)->row, get_mark(buf->pnext->value)->col); struct ent * n; int c1; #ifdef UNDO create_undo_action(); #endif for (c1 = curcol; cmd_multiplier-- && c1 < maxcols; c1++) { if ((n = * ATBL(tbl, currow, c1))) { if (n->flags & is_locked) continue; if (! p) { clearent(n); continue; } } else { if (! p) break; n = lookat(currow, c1); } #ifdef UNDO copy_to_undostruct(currow, c1, currow, c1, 'd'); #endif copyent(n, p, currow - get_mark(buf->pnext->value)->row, c1 - get_mark(buf->pnext->value)->col, 0, 0, maxrow, maxcol, 0); n->row += currow - get_mark(buf->pnext->value)->row; n->col += c1 - get_mark(buf->pnext->value)->col; n->flags |= is_changed; #ifdef UNDO copy_to_undostruct(currow, c1, currow, c1, 'a'); #endif } #ifdef UNDO end_undo_action(); #endif } if (atoi(get_conf_value("autocalc"))) EvalAll(); update(TRUE); break; } // repeat last goto command case 'n': go_last(); update(TRUE); break; // range lock / unlock / valueize case 'r': { int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (buf->pnext->value == 'l') { lock_cells(lookat(r, c), lookat(rf, cf)); } else if (buf->pnext->value == 'u') { unlock_cells(lookat(r, c), lookat(rf, cf)); } else if (buf->pnext->value == 'v') { valueize_area(r, c, rf, cf); } update(TRUE); break; } // create range with two marks case 'R': if (bs == 3) { create_range(buf->pnext->value, buf->pnext->pnext->value, NULL, NULL); update(TRUE); } break; // Zr Zc - Zap col or row - Show col or row - Sr Sc case 'Z': case 'S': { int rs, r = currow, c = curcol, arg = cmd_multiplier; struct srange * sr; if ( (rs = is_range_selected()) != -1) { sr = get_range_by_pos(rs); cmd_multiplier = 1; r = sr->tlrow; c = sr->tlcol; arg = buf->pnext->value == 'r' ? sr->brrow - sr->tlrow + 1 : sr->brcol - sr->tlcol + 1; } if (buf->value == 'Z' && buf->pnext->value == 'r') { hide_row(r, arg); } else if (buf->value == 'Z' && buf->pnext->value == 'c') { hide_col(c, arg); } else if (buf->value == 'S' && buf->pnext->value == 'r') { show_row(r, arg); } else if (buf->value == 'S' && buf->pnext->value == 'c') { show_col(c, arg); } cmd_multiplier = 0; update(TRUE); break; } // shift range or cell case 's': { int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if ( any_locked_cells(r, c, rf, cf) && (buf->pnext->value == 'h' || buf->pnext->value == 'k') ) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); #endif int ic = cmd_multiplier + 1; switch (buf->pnext->value) { case 'j': fix_marks( (rf - r + 1) * cmd_multiplier, 0, r, maxrow, c, cf); #ifdef UNDO save_undo_range_shift(cmd_multiplier, 0, r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf); #endif while (ic--) shift_range(ic, 0, r, c, rf, cf); break; case 'k': fix_marks( -(rf - r + 1) * cmd_multiplier, 0, r, maxrow, c, cf); yank_area(r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf, 'a', cmd_multiplier); // keep ents in yanklist for sk #ifdef UNDO copy_to_undostruct(r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf, 'd'); save_undo_range_shift(-cmd_multiplier, 0, r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf); #endif while (ic--) shift_range(-ic, 0, r, c, rf, cf); #ifdef UNDO copy_to_undostruct(r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf, 'a'); #endif break; case 'h': fix_marks(0, -(cf - c + 1) * cmd_multiplier, r, rf, c, maxcol); yank_area(r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1), 'a', cmd_multiplier); // keep ents in yanklist for sk #ifdef UNDO copy_to_undostruct(r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1), 'd'); save_undo_range_shift(0, -cmd_multiplier, r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1)); #endif while (ic--) shift_range(0, -ic, r, c, rf, cf); #ifdef UNDO copy_to_undostruct(r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1), 'a'); #endif break; case 'l': fix_marks(0, (cf - c + 1) * cmd_multiplier, r, rf, c, maxcol); #ifdef UNDO save_undo_range_shift(0, cmd_multiplier, r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1)); #endif while (ic--) shift_range(0, ic, r, c, rf, cf); break; } #ifdef UNDO end_undo_action(); #endif cmd_multiplier = 0; unselect_ranges(); update(TRUE); break; } // delete row or column, or selected cell or range case 'd': { if (bs != 2) return; int ic = cmd_multiplier; // orig if (buf->pnext->value == 'r') { if (any_locked_cells(currow, 0, currow + cmd_multiplier, maxcol)) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); copy_to_undostruct(currow, 0, currow + ic - 1, maxcol, 'd'); save_undo_range_shift(-ic, 0, currow, 0, currow - 1 + ic, maxcol); #endif fix_marks(-ic, 0, currow + ic - 1, maxrow, 0, maxcol); yank_area(currow, 0, currow - 1 + cmd_multiplier, maxcol, 'r', ic); while (ic--) deleterow(); #ifdef UNDO copy_to_undostruct(currow, 0, currow - 1 + cmd_multiplier, maxcol, 'a'); end_undo_action(); #endif if (cmd_multiplier > 0) cmd_multiplier = 0; } else if (buf->pnext->value == 'c') { if (any_locked_cells(0, curcol, maxrow, curcol + cmd_multiplier)) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); copy_to_undostruct(0, curcol, maxrow, curcol - 1 + ic, 'd'); save_undo_range_shift(0, -ic, 0, curcol, maxrow, curcol - 1 + ic); #endif fix_marks(0, -ic, 0, maxrow, curcol - 1 + ic, maxcol); yank_area(0, curcol, maxrow, curcol + cmd_multiplier - 1, 'c', ic); while (ic--) deletecol(); #ifdef UNDO copy_to_undostruct(0, curcol, maxrow, curcol + cmd_multiplier - 1, 'a'); end_undo_action(); #endif if (cmd_multiplier > 0) cmd_multiplier = 0; } else if (buf->pnext->value == 'd') { del_selected_cells(); } update(TRUE); break; } // insert row or column case 'i': { if (bs != 2) return; #ifdef UNDO create_undo_action(); #endif if (buf->pnext->value == 'r') { #ifdef UNDO save_undo_range_shift(1, 0, currow, 0, currow, maxcol); #endif fix_marks(1, 0, currow, maxrow, 0, maxcol); insert_row(0); } else if (buf->pnext->value == 'c') { #ifdef UNDO save_undo_range_shift(0, 1, 0, curcol, maxrow, curcol); #endif fix_marks(0, 1, 0, maxrow, curcol, maxcol); insert_col(0); } #ifdef UNDO end_undo_action(); #endif update(TRUE); break; } case 'y': // yank row if ( bs == 2 && buf->pnext->value == 'r') { yank_area(currow, 0, currow + cmd_multiplier - 1, maxcol, 'r', cmd_multiplier); if (cmd_multiplier > 0) cmd_multiplier = 0; // yank col } else if ( bs == 2 && buf->pnext->value == 'c') { yank_area(0, curcol, maxrow, curcol + cmd_multiplier - 1, 'c', cmd_multiplier); if (cmd_multiplier > 0) cmd_multiplier = 0; // yank cell } else if ( bs == 2 && buf->pnext->value == 'y' && is_range_selected() == -1) { yank_area(currow, curcol, currow, curcol, 'e', cmd_multiplier); // yank range } else if ( bs == 1 && is_range_selected() != -1) { srange * r = get_selected_range(); yank_area(r->tlrow, r->tlcol, r->brrow, r->brcol, 'a', cmd_multiplier); } break; // paste cell below or left case 'p': if (paste_yanked_ents(0, 'a') == -1) { scerror("Locked cells encountered. Nothing changed"); break; } update(TRUE); break; case 'P': case 'T': if (bs != 2) break; if (buf->pnext->value == 'v' || buf->pnext->value == 'f' || buf->pnext->value == 'c') { int res = buf->value == 'P' ? paste_yanked_ents(0, buf->pnext->value) : paste_yanked_ents(1, buf->pnext->value); // paste cell above or right if (res == -1) { scerror("Locked cells encountered. Nothing changed"); break; } update(TRUE); } break; // paste cell above or right case 't': if (paste_yanked_ents(1, 'a') == -1) { scerror("Locked cells encountered. Nothing changed"); break; } update(TRUE); break; // select inner range - Vir case 'V': if (buf->value == 'V' && bs == 3 && buf->pnext->value == 'i' && buf->pnext->pnext->value == 'r') { int tlrow = currow; int brrow = currow; int tlcol = curcol; int brcol = curcol; int * tlr = &tlrow; int * brr = &brrow; int * tlc = &tlcol; int * brc = &brcol; select_inner_range(tlr, tlc, brr, brc); start_visualmode(*tlr, *tlc, *brr, *brc); } break; // autojus case 'a': if ( bs != 2 ) break; if (buf->pnext->value == 'a') { int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (any_locked_cells(r, c, rf, cf)) { scerror("Locked cells encountered. Nothing changed"); return; } char cline [BUFFERSIZE]; sprintf(cline, "autojus %s:", coltoa(c)); sprintf(cline + strlen(cline), "%s", coltoa(cf)); send_to_interp(cline); update(TRUE); } break; // scroll case 'z': if ( bs != 2 ) break; int scroll = 0; switch (buf->pnext->value) { case 'l': scroll_right(1); //unselect_ranges(); break; case 'h': scroll_left(1); //unselect_ranges(); break; case 'H': scroll = calc_offscr_sc_cols(); if (atoi(get_conf_value("half_page_scroll"))) scroll /= 2; scroll_left(scroll); //unselect_ranges(); break; case 'L': scroll = calc_offscr_sc_cols(); if (atoi(get_conf_value("half_page_scroll"))) scroll /= 2; scroll_right(scroll); //unselect_ranges(); break; case 'm': ; int i = 0, c = 0, ancho = rescol; offscr_sc_cols = 0; for (i = 0; i < curcol; i++) { for (c = i; c < curcol; c++) { if (!col_hidden[c]) ancho += fwidth[c]; if (ancho >= (COLS - rescol)/ 2) { ancho = rescol; break; } } if (c == curcol) break; } offscr_sc_cols = i; break; case 'z': case '.': case 't': case 'b': if (buf->pnext->value == 'z' || buf->pnext->value == '.') scroll = currow - offscr_sc_rows + LINES - RESROW - 2 - (LINES - RESROW - 2)/2; // zz else if (buf->pnext->value == 't') scroll = currow - offscr_sc_rows + 1; else if (buf->pnext->value == 'b') scroll = currow - offscr_sc_rows - LINES + RESROW + 2; if (scroll > 0) scroll_down(scroll); // else if (scroll > offscr_sc_rows) // scroll_up(-scroll); else if (scroll < 0) scroll_up(-scroll); // else if (offscr_sc_rows > 0) // scroll_up(offscr_sc_rows); break; } update(TRUE); break; // scroll up a line case ctl('y'): scroll_up(1); update(TRUE); break; // scroll down a line case ctl('e'): scroll_down(1); update(TRUE); break; // undo case 'u': #ifdef UNDO do_undo(); // sync_refs(); EvalAll(); update(TRUE); break; #else scerror("Build was done without UNDO support"); #endif // redo case ctl('r'): #ifdef UNDO do_redo(); // sync_refs(); EvalAll(); update(TRUE); break; #else scerror("Build was done without UNDO support"); #endif case '{': // left align case '}': // right align case '|': // center align { int p, r = currow, c = curcol, rf = currow, cf = curcol; struct srange * sr; if ( (p = is_range_selected()) != -1) { sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (any_locked_cells(r, c, rf, cf)) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); #endif if (buf->value == '{') sprintf(interp_line, "leftjustify %s", v_name(r, c)); else if (buf->value == '}') sprintf(interp_line, "rightjustify %s", v_name(r, c)); else if (buf->value == '|') sprintf(interp_line, "center %s", v_name(r, c)); if (p != -1) sprintf(interp_line + strlen(interp_line), ":%s", v_name(rf, cf)); #ifdef UNDO copy_to_undostruct(r, c, rf, cf, 'd'); #endif send_to_interp(interp_line); #ifdef UNDO copy_to_undostruct(r, c, rf, cf, 'a'); end_undo_action(); #endif cmd_multiplier = 0; update(TRUE); break; } case ctl('l'): /* endwin(); start_screen(); clearok(stdscr, TRUE); update(TRUE); flushinp(); show_header(input_win); show_celldetails(input_win); wrefresh(input_win); update(TRUE); */ winchg(); break; case '@': EvalAll(); update(TRUE); break; // increase or decrease numeric value of cell or range case '-': case '+': { int r, c, tlrow = currow, tlcol = curcol, brrow = currow, brcol = curcol; if ( is_range_selected() != -1 ) { struct srange * sr = get_selected_range(); tlrow = sr->tlrow; tlcol = sr->tlcol; brrow = sr->brrow; brcol = sr->brcol; } if (any_locked_cells(tlrow, tlcol, brrow, brcol)) { scerror("Locked cells encountered. Nothing changed"); return; } if (atoi(get_conf_value("numeric")) == 1) goto numeric; struct ent * p; #ifdef UNDO create_undo_action(); #endif int arg = cmd_multiplier; int mf = modflg; // keep original modflg for (r = tlrow; r <= brrow; r++) { for (c = tlcol; c <= brcol; c++) { p = *ATBL(tbl, r, c); if ( ! p ) { continue; } else if (p->expr && !(p->flags & is_strexpr)) { //scerror("Can't increment / decrement a formula"); continue; } else if (p->flags & is_valid) { #ifdef UNDO copy_to_undostruct(r, c, r, c, 'd'); #endif p->v += buf->value == '+' ? (double) arg : - 1 * (double) arg; #ifdef UNDO copy_to_undostruct(r, c, r, c, 'a'); #endif if (mf == modflg) modflg++; // increase just one time } } } #ifdef UNDO end_undo_action(); #endif if (atoi(get_conf_value("autocalc"))) EvalAll(); cmd_multiplier = 0; update(TRUE); } break; // input of numbers default: numeric: if ( (isdigit(buf->value) || buf->value == '-' || buf->value == '+') && atoi(get_conf_value("numeric")) ) { insert_edit_submode='='; chg_mode(insert_edit_submode); inputline_pos = 0; ins_in_line(buf->value); show_header(input_win); } } return; }
/* * This is called by snoop_netbios.c. * This is the external entry point. */ void interpret_smb(int flags, uchar_t *data, int len) { struct smb *smb; struct decode *decoder; char xtra[MAXLINE]; ushort_t smb_flags2; void (*func)(int, uchar_t *, int, char *, int); if (len < sizeof (struct smb)) return; smb = (struct smb *)data; decoder = &SMBtable[smb->com & 255]; smb_flags2 = get2(smb->flags2); xtra[0] = '\0'; /* * SMB Header description * [X/Open-SMB, Sec. 5.1] */ if (flags & F_DTAIL) { show_header("SMB: ", "SMB Header", len); show_space(); if (smb->flags & SERVER_RESPONSE) show_line("SERVER RESPONSE"); else show_line("CLIENT REQUEST"); if (decoder->name) show_printf("Command code = 0x%x (SMB%s)", smb->com, decoder->name); else show_printf("Command code = 0x%x", smb->com); /* * NT status or error class/code * [X/Open-SMB, Sec. 5.6] */ if (smb_flags2 & FLAGS2_NT_STATUS) { show_printf("NT Status = %x", get4(smb->err)); } else { /* Error classes [X/Open-SMB, Sec. 5.6] */ show_printf("Error class/code = %d/%d", smb->err[0], get2(&smb->err[2])); } show_printf("Flags summary = 0x%.2x", smb->flags); show_printf("Flags2 summary = 0x%.4x", smb_flags2); show_printf("Tree ID (TID) = 0x%.4x", get2(smb->tid)); show_printf("Proc. ID (PID) = 0x%.4x", get2(smb->pid)); show_printf("User ID (UID) = 0x%.4x", get2(smb->uid)); show_printf("Mux. ID (MID) = 0x%.4x", get2(smb->mid)); show_space(); } if ((func = decoder->func) == NULL) func = interpret_default; (*func)(flags, (uchar_t *)data, len, xtra, sizeof (xtra)); if (flags & F_SUM) { char *p; int sz, tl; /* Will advance p and decr. sz */ p = get_sum_line(); sz = MAXLINE; /* Call or Reply */ if (smb->flags & SERVER_RESPONSE) tl = snprintf(p, sz, "SMB R"); else tl = snprintf(p, sz, "SMB C"); p += tl; sz -= tl; /* The name, if known, else the cmd code */ if (decoder->name) { tl = snprintf(p, sz, " Cmd=SMB%s", decoder->name); } else { tl = snprintf(p, sz, " Cmd=0x%02X", smb->com); } p += tl; sz -= tl; /* * The "extra" (cmd-specific summary). * If non-null, has leading blank. */ if (xtra[0] != '\0') { tl = snprintf(p, sz, "%s", xtra); p += tl; sz -= tl; } /* * NT status or error class/code * [X/Open-SMB, Sec. 5.6] * * Only show for response, not call. */ if (smb->flags & SERVER_RESPONSE) { if (smb_flags2 & FLAGS2_NT_STATUS) { uint_t status = get4(smb->err); snprintf(p, sz, " Status=0x%x", status); } else { uchar_t errcl = smb->err[0]; ushort_t code = get2(&smb->err[2]); snprintf(p, sz, " Error=%d/%d", errcl, code); } } } if (flags & F_DTAIL) show_trailer(); }
int interpret_udp(int flags, struct udphdr *udp, int iplen, int fraglen) { char *data; int udplen; int sunrpc; char *pname; char buff [32]; if (fraglen < sizeof (struct udphdr)) return (fraglen); /* incomplete header */ data = (char *)udp + sizeof (struct udphdr); udplen = ntohs((ushort_t)udp->uh_ulen) - sizeof (struct udphdr); fraglen -= sizeof (struct udphdr); if (fraglen > udplen) fraglen = udplen; if (flags & F_SUM) { (void) sprintf(get_sum_line(), "UDP D=%d S=%d LEN=%d", ntohs(udp->uh_dport), ntohs(udp->uh_sport), ntohs((ushort_t)udp->uh_ulen)); } sunrpc = !reservedport(IPPROTO_UDP, ntohs(udp->uh_dport)) && !reservedport(IPPROTO_UDP, ntohs(udp->uh_sport)) && valid_rpc(data, udplen); if (flags & F_DTAIL) { show_header("UDP: ", "UDP Header", udplen); show_space(); (void) sprintf(get_line((char *)(uintptr_t)udp->uh_sport - dlc_header, 1), "Source port = %d", ntohs(udp->uh_sport)); if (sunrpc) { pname = "(Sun RPC)"; } else { pname = getportname(IPPROTO_UDP, ntohs(udp->uh_dport)); if (pname == NULL) { pname = ""; } else { (void) sprintf(buff, "(%s)", pname); pname = buff; } } (void) sprintf(get_line((char *)(uintptr_t)udp->uh_dport - dlc_header, 1), "Destination port = %d %s", ntohs(udp->uh_dport), pname); (void) sprintf(get_line((char *)(uintptr_t)udp->uh_ulen - dlc_header, 1), "Length = %d %s", ntohs((ushort_t)udp->uh_ulen), udplen > fraglen ? "(Not all data contained in this fragment)" : ""); (void) sprintf(get_line((char *)(uintptr_t)udp->uh_sum - dlc_header, 1), "Checksum = %04X %s", ntohs(udp->uh_sum), udp->uh_sum == 0 ? "(no checksum)" : ""); show_space(); } /* go to the next protocol layer */ if (!interpret_reserved(flags, IPPROTO_UDP, ntohs(udp->uh_sport), ntohs(udp->uh_dport), data, fraglen)) { if (fraglen > 0 && sunrpc) interpret_rpc(flags, data, fraglen, IPPROTO_UDP); } return (fraglen); }