extern char *read_infile(char *);
extern char *copy_argv(char **);
-extern void safeputchar(int);
-extern void safeputs(const char *, int);
-
extern const char *isonsap_string(const u_char *, register u_int);
extern const char *protoid_string(const u_char *);
extern const char *ipxsap_string(u_short);
#define ND_ISGRAPH(c) ((c) > 0x20 && (c) <= 0x7E)
#define ND_TOASCII(c) ((c) & 0x7F)
-extern void safeputchar(int);
-extern void safeputs(const char *, int);
+extern void safeputchar(netdissect_options *, const u_char);
+extern void safeputs(netdissect_options *, const u_char *, const u_int);
#ifdef LBL_ALIGN
/*
switch (msg_ptr.cfm_ccm->md_nameformat) {
case CFM_CCM_MD_FORMAT_DNS:
case CFM_CCM_MD_FORMAT_CHAR:
- safeputs((const char *)msg_ptr.cfm_ccm->md_name, msg_ptr.cfm_ccm->md_namelength);
+ safeputs(gndo, msg_ptr.cfm_ccm->md_name, msg_ptr.cfm_ccm->md_namelength);
break;
case CFM_CCM_MD_FORMAT_MAC:
printf("\n\t MA Name: ");
switch (*ma_nameformat) {
case CFM_CCM_MA_FORMAT_CHAR:
- safeputs((const char *)ma_name, *ma_namelength);
+ safeputs(gndo, ma_name, *ma_namelength);
break;
/* FIXME add printers for those MA formats - hexdump for now */
case CFM_CHASSIS_ID_LOCAL:
case CFM_CHASSIS_ID_CHASSIS_COMPONENT:
case CFM_CHASSIS_ID_PORT_COMPONENT:
- safeputs((const char *)tptr+1, chassis_id_length);
+ safeputs(gndo, tptr + 1, chassis_id_length);
break;
default:
while (x-- > 0) {
c = *dp++;
- safeputchar(c);
+ safeputchar(gndo, c);
}
}
#endif
case EAP_TYPE_IDENTITY:
if (len - 5 > 0) {
printf(", Identity: ");
- safeputs((const char *)tptr+5, len-5);
+ safeputs(gndo, tptr + 5, len - 5);
}
break;
case EAP_TYPE_NOTIFICATION:
if (len - 5 > 0) {
printf(", Notification: ");
- safeputs((const char *)tptr+5, len-5);
+ safeputs(gndo, tptr + 5, len - 5);
}
break;
case MFR_CTRL_IE_LINK_ID:
for (idx = 0; idx < ie_len && idx < MFR_ID_STRING_MAXLEN; idx++) {
if (*(tptr+idx) != 0) /* don't print null termination */
- safeputchar(*(tptr+idx));
+ safeputchar(ndo, *(tptr + idx));
else
break;
}
break;
}
while (i-- && cp < ep) {
- safeputchar(*cp);
+ safeputchar(ndo, *cp);
cp++;
}
if (cp + 1 < ep && *cp)
cp++;
ND_PRINT((ndo,", \""));
while (cp < ep) {
- safeputchar(*cp);
+ safeputchar(ndo, *cp);
cp++;
}
ND_PRINT((ndo,"\""));
cp++;
ND_PRINT((ndo,", \""));
while (cp < ep) {
- safeputchar(*cp);
+ safeputchar(ndo, *cp);
cp++;
}
ND_PRINT((ndo,"\""));
int i;
ND_PRINT((ndo," len=%d ", len));
for (i = 0; i < len; i++)
- safeputchar(data[i]);
+ safeputchar(ndo, data[i]);
len = 0;
break;
}
case LDP_FEC_MARTINI_IFPARM_DESC:
ND_PRINT((ndo, ": "));
for (idx = 2; idx < vc_info_tlv_len; idx++)
- safeputchar(*(tptr+idx));
+ safeputchar(ndo, *(tptr + idx));
break;
case LDP_FEC_MARTINI_IFPARM_VCCV:
return hexdump;
}
printf("\n\t vlan name: ");
- safeputs((const char *)tptr+7, sublen);
+ safeputs(gndo, tptr + 7, sublen);
break;
case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY:
if (tlv_len < 5) {
return hexdump;
}
printf("\n\t protocol identity: ");
- safeputs((const char *)tptr+5, sublen);
+ safeputs(gndo, tptr + 5, sublen);
break;
case LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION:
if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION_LENGTH){
*(tptr+6));
/* Country code */
- safeputs((const char *)(tptr+7), 2);
+ safeputs(gndo, tptr + 7, 2);
lci_len = lci_len-3;
tptr = tptr + 9;
return hexdump;
}
- safeputs((const char *)tptr, ca_len);
+ safeputs(gndo, tptr, ca_len);
tptr += ca_len;
lci_len -= ca_len;
}
case LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN:
printf("\n\t ECS ELIN id ");
- safeputs((const char *)tptr+5, tlv_len-5);
+ safeputs(gndo, tptr + 5, tlv_len - 5);
break;
default:
case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID:
printf("\n\t %s ",
tok2str(lldp_tia_inventory_values, "unknown", subtype));
- safeputs((const char *)tptr+4, tlv_len-4);
+ safeputs(gndo, tptr + 4, tlv_len - 4);
break;
default:
}
if (oid_len) {
printf("\n\t OID length %u", oid_len);
- safeputs((const char *)tptr+1, oid_len);
+ safeputs(gndo, tptr + 1, oid_len);
}
}
case LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE:
case LLDP_CHASSIS_INTF_ALIAS_SUBTYPE:
case LLDP_CHASSIS_PORT_COMP_SUBTYPE:
- safeputs((const char *)tptr+1, tlv_len-1);
+ safeputs(gndo, tptr + 1, tlv_len - 1);
break;
case LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE:
case LLDP_PORT_AGENT_CIRC_ID_SUBTYPE:
case LLDP_PORT_INTF_ALIAS_SUBTYPE:
case LLDP_PORT_PORT_COMP_SUBTYPE:
- safeputs((const char *)tptr+1, tlv_len-1);
+ safeputs(gndo, tptr + 1, tlv_len - 1);
break;
case LLDP_PORT_NETWORK_ADDR_SUBTYPE:
case LLDP_PORT_DESCR_TLV:
if (vflag) {
printf(": ");
- safeputs((const char *)tptr, tlv_len);
+ safeputs(gndo, tptr, tlv_len);
}
break;
* similar to the CDP printer.
*/
printf(": ");
- safeputs((const char *)tptr, tlv_len);
+ safeputs(gndo, tptr, tlv_len);
break;
case LLDP_SYSTEM_DESCR_TLV:
if (vflag) {
printf("\n\t ");
- safeputs((const char *)tptr, tlv_len);
+ safeputs(gndo, tptr, tlv_len);
}
break;
printf(" ");
for (i = 0; i < l; i++)
- safeputchar(*p++);
+ safeputchar(gndo, *p++);
p++; /* skip terminating \0 */
return p - p0;
case OSPF_AUTH_SIMPLE:
printf("\n\tSimple text password: ");
- safeputs((const char *)op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN);
+ safeputs(gndo, op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN);
break;
case OSPF_AUTH_MD5:
printf(", Name ");
for (i = 0; i < name_size; i++) {
TCHECK(*p);
- safeputchar(*p++);
+ safeputchar(gndo, *p++);
}
break;
case CHAP_SUCC:
printf(", Msg ");
for (i = 0; i< msg_size; i++) {
TCHECK(*p);
- safeputchar(*p++);
+ safeputchar(gndo, *p++);
}
break;
}
printf(", Peer ");
for (i = 0; i < peerid_len; i++) {
TCHECK(*p);
- safeputchar(*p++);
+ safeputchar(gndo, *p++);
}
if (length - (p - p0) < 1)
printf(", Name ");
for (i = 0; i < passwd_len; i++) {
TCHECK(*p);
- safeputchar(*p++);
+ safeputchar(gndo, *p++);
}
break;
case PAP_AACK:
printf(", Msg ");
for (i = 0; i< msg_len; i++) {
TCHECK(*p);
- safeputchar(*p++);
+ safeputchar(gndo, *p++);
}
break;
}
return-1;
printf("%s Session Name: ", ident);
for (i = 0; i < namelen; i++)
- safeputchar(*(obj_tptr+4+i));
+ safeputchar(gndo, *(obj_tptr + 4 + i));
printf("%s Setup Priority: %u, Holding Priority: %u, Flags: [%s] (%#x)",
ident,
(int)*obj_tptr,
for (idx = 0; idx < len; idx++) {
TCHECK2(*(pptr+idx), 2);
if (EXTRACT_16BITS(pptr+idx) != 0x0d0a) { /* linefeed ? */
- safeputchar(*(pptr+idx));
+ safeputchar(gndo, *(pptr + idx));
} else {
printf("\n\t");
idx+=1;
/* print the syslog text in verbose mode */
for (; msg_off < len; msg_off++) {
TCHECK2(*(pptr+msg_off), 1);
- safeputchar(*(pptr+msg_off));
+ safeputchar(gndo, *(pptr + msg_off));
}
if (vflag > 1)
putchar(' ');
while (length-- && sp <= snapend) {
c = *sp++;
- safeputchar(c);
+ safeputchar(gndo, c);
}
putchar(']');
}
case VQP_OBJ_VLAN_NAME:
case VQP_OBJ_VTP_DOMAIN:
case VQP_OBJ_ETHERNET_PKT:
- safeputs((const char *)tptr, vqp_obj_len);
+ safeputs(ndo, tptr, vqp_obj_len);
break;
/* those objects have similar semantics - fall through */
case VQP_OBJ_MAC_ADDRESS:
{
int i;
for (i = 0; i < len; i++)
- safeputchar(buf[i]);
+ safeputchar(gndo, buf[i]);
}
static const char *
}
void
-safeputs(const char *s, int maxlen)
+safeputs(netdissect_options *ndo,
+ const u_char *s, const u_int maxlen)
{
- int idx = 0;
+ u_int idx = 0;
while (*s && idx < maxlen) {
- safeputchar(*s);
- idx++;
+ safeputchar(ndo, *s);
+ idx++;
s++;
}
}
void
-safeputchar(int c)
+safeputchar(netdissect_options *ndo,
+ const u_char c)
{
- unsigned char ch;
-
- ch = (unsigned char)(c & 0xff);
- if (ch < 0x80 && ND_ISPRINT(ch))
- printf("%c", ch);
- else
- printf("\\0x%02x", ch);
+ ND_PRINT((ndo, (c < 0x80 && ND_ISPRINT(c)) ? "%c" : "\\0x%02x", c));
}
#ifdef LBL_ALIGN