2 * Copyright (c) 1997, 2000 Hellmuth Michaelis. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 *---------------------------------------------------------------------------
27 * layer3_subr.c - subroutines for IE decoding
28 * -------------------------------------------
30 * $Id: layer3_subr.c,v 1.8 2000/02/21 15:17:17 hm Exp $
32 * $FreeBSD: src/usr.sbin/i4b/isdndecode/layer3_subr.c,v 1.6.2.2 2001/08/01 17:45:05 obrien Exp $
33 * $DragonFly: src/usr.sbin/i4b/isdndecode/layer3_subr.c,v 1.3 2007/05/13 18:33:59 swildner Exp $
35 * last edit-date: [Mon Feb 21 15:45:16 2000]
37 *---------------------------------------------------------------------------*/
41 /*---------------------------------------------------------------------------*
43 *---------------------------------------------------------------------------*/
45 f_null(char *pbuf
, unsigned char *buf
, int off
)
50 /*---------------------------------------------------------------------------*
52 *---------------------------------------------------------------------------*/
54 f_cstat(char *pbuf
, unsigned char *buf
, int off
)
63 sprintf((pbuf
+strlen(pbuf
)), "Std=");
64 switch((buf
[i
] & 0x60) >> 5)
67 strcpy(buffer
, "CCITT");
70 strcpy(buffer
, "ISO/IEC");
73 strcpy(buffer
, "National");
76 strcpy(buffer
, "Special");
79 sprintf((pbuf
+strlen(pbuf
)), ", State=");
81 switch((buf
[i
] & 0x3f))
84 strcpy(buffer
, "Null");
87 strcpy(buffer
, "Call initiated");
90 strcpy(buffer
, "Overlap sending");
93 strcpy(buffer
, "Outgoing call proceeding");
96 strcpy(buffer
, "Call delivered");
99 strcpy(buffer
, "Call present");
102 strcpy(buffer
, "Call received");
105 strcpy(buffer
, "Connect request");
108 strcpy(buffer
, "Incoming call proceeding");
111 strcpy(buffer
, "Active");
114 strcpy(buffer
, "Disconnect request");
117 strcpy(buffer
, "Disconnect indication");
120 strcpy(buffer
, "Suspend request");
123 strcpy(buffer
, "Resume request");
126 strcpy(buffer
, "Release request");
129 strcpy(buffer
, "Call abort");
132 strcpy(buffer
, "Overlap receiving");
135 strcpy(buffer
, "Restart request");
138 strcpy(buffer
, "Restart");
141 strcpy(buffer
, "ERROR: undefined/reserved");
144 sprintf((pbuf
+strlen(pbuf
)), "]");
149 /*---------------------------------------------------------------------------*
151 *---------------------------------------------------------------------------*/
153 f_chid(char *pbuf
, unsigned char *buf
, int off
)
163 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
165 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x40, "Interface Id present = %s", buf
[i
] & 0x40 ? "Yes" : "No");
167 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x20, "Interface Type = %s", buf
[i
] & 0x20 ? "Other (PRI)" : "BRI");
169 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x10, "Spare");
171 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x08, "Channel = %s", buf
[i
] & 0x08 ? "exclusive" : "preferred");
173 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x04, "Channel is%s the D-Channel", buf
[i
] & 0x04 ? "" : " not");
175 switch(buf
[i
] & 0x03)
178 strcpy(buffer
, "no channel");
181 strcpy(buffer
, "B-1");
184 strcpy(buffer
, "B-2");
187 strcpy(buffer
, "any channel");
190 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x03, "Channel = %s", buffer
);
196 /*---------------------------------------------------------------------------*
198 *---------------------------------------------------------------------------*/
200 f_fac(char *pbuf
, unsigned char *buf
, int off
)
202 return(q932_facility(pbuf
, buf
));
205 /*---------------------------------------------------------------------------*
207 *---------------------------------------------------------------------------*/
209 f_progi(char *pbuf
, unsigned char *buf
, int off
)
218 sprintf((pbuf
+strlen(pbuf
)), "Std=");
219 switch((buf
[i
] & 0x60) >> 5)
222 strcpy(buffer
, "CCITT");
225 strcpy(buffer
, "ISO/IEC");
228 strcpy(buffer
, "National");
231 strcpy(buffer
, "Local");
234 sprintf((pbuf
+strlen(pbuf
)), ", Loc=");
236 switch((buf
[i
] & 0x0f))
239 strcpy(buffer
, "User");
242 strcpy(buffer
, "Private network serving local user");
245 strcpy(buffer
, "Public network serving local user");
248 strcpy(buffer
, "Transit network");
251 strcpy(buffer
, "Public network serving remote user");
254 strcpy(buffer
, "Private network serving remote user");
257 strcpy(buffer
, "Network beyond interworking point");
260 strcpy(buffer
, "ERROR: undefined/reserved");
266 sprintf((pbuf
+strlen(pbuf
)), "\n Description");
268 switch((buf
[i
] & 0x7f))
271 strcpy(buffer
, "Call is not end-to-end ISDN");
274 strcpy(buffer
, "Destination address is non-ISDN");
277 strcpy(buffer
, "Origination address is non-ISDN");
280 strcpy(buffer
, "Call has returned to the ISDN");
283 strcpy(buffer
, "Interworking occurred, Service change");
286 strcpy(buffer
, "In-band info or appropriate pattern now available");
289 strcpy(buffer
, "ERROR: undefined/reserved");
292 sprintf((pbuf
+strlen(pbuf
)), "]");
298 /*---------------------------------------------------------------------------*
300 *---------------------------------------------------------------------------*/
302 f_displ(char *pbuf
, unsigned char *buf
, int off
)
311 for(j
= 0; j
< len
; j
++)
313 sprintf((pbuf
+strlen(pbuf
)),"%c", buf
[j
+i
]);
315 sprintf((pbuf
+strlen(pbuf
)),"]");
321 /*---------------------------------------------------------------------------*
323 *---------------------------------------------------------------------------*/
325 f_date(char *pbuf
, unsigned char *buf
, int off
)
335 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "Year = %02d", buf
[i
]);
338 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "Month = %02d", buf
[i
]);
341 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "Day = %02d", buf
[i
]);
347 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "Hour = %02d", buf
[i
]);
353 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "Minute = %02d", buf
[i
]);
359 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "Second = %02d", buf
[i
]);
367 /*---------------------------------------------------------------------------*
368 * decode and print the cause
369 *---------------------------------------------------------------------------*/
371 f_cause(char *pbuf
, unsigned char *buf
, int off
)
379 i
++; /* index -> length */
383 i
++; /* coding/location */
388 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
390 switch((ls
& 0x60) >> 5)
393 strcpy(buffer
, "CCITT");
396 strcpy(buffer
, "ISO/IEC");
399 strcpy(buffer
, "National");
402 strcpy(buffer
, "Local");
405 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Coding Standard = %s", buffer
);
407 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x10, "Spare");
412 strcpy(buffer
, "user");
415 strcpy(buffer
, "private network serving local user");
418 strcpy(buffer
, "public network serving local user");
421 strcpy(buffer
, "transit network");
424 strcpy(buffer
, "public network serving remote user");
427 strcpy(buffer
, "private network serving remote user");
430 strcpy(buffer
, "international network");
433 strcpy(buffer
, "network beyond interworking point");
436 sprintf(buffer
, "reserved (0x%02x)", ls
& 0x0f);
439 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x0f, "Location = %s", buffer
);
446 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
448 switch(buf
[i
] & 0x7f)
451 strcpy(buffer
, "Q.931");
454 strcpy(buffer
, "X.21");
457 strcpy(buffer
, "X.25");
460 strcpy(buffer
, "Q.1031/Q.1051");
463 strcpy(buffer
, "Reserved");
466 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x7f, "Recommendation = %s", buffer
);
471 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
473 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x7f, "Cause = %s", print_cause_q850(buf
[i
] & 0x7f));
478 for(j
= 0; j
< len
; j
++)
479 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
+j
, buf
[i
+j
], 0xff, "Diagnostics = %02d %s", buf
[i
+j
], buf
[i
+j
]);
486 /*---------------------------------------------------------------------------*
487 * decode and print the bearer capability
488 *---------------------------------------------------------------------------*/
490 f_bc(char *pbuf
, unsigned char *buf
, int off
)
497 i
++; /* index -> length */
502 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
504 switch((buf
[i
] & 0x60) >> 5)
507 strcpy(buffer
, "CCITT");
510 strcpy(buffer
, "ISO/IEC");
513 strcpy(buffer
, "National");
516 strcpy(buffer
, "NSI Std");
519 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Coding standard = %s", buffer
);
521 switch(buf
[i
] & 0x1f)
524 strcpy(buffer
, "speech");
527 strcpy(buffer
, "unrestricted digital information");
530 strcpy(buffer
, "restricted digital information");
533 strcpy(buffer
, "3.1 kHz audio");
536 strcpy(buffer
, "unrestricted digital information with tones");
539 strcpy(buffer
, "video");
542 sprintf(buffer
, "reserved (0x%02x)", buf
[i
] & 0x0f);
545 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x1f, "Capability = %s", buffer
);
550 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
552 switch((buf
[i
] & 0x60) >> 5)
555 strcpy(buffer
, "circuit");
558 strcpy(buffer
, "packet");
561 sprintf((pbuf
+strlen(pbuf
)), "reserved (0x%02x)", ((buf
[i
] & 0x60) >> 5));
564 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Mode = %s", buffer
);
566 switch(buf
[i
] & 0x1f)
569 strcpy(buffer
, "packet mode");
572 strcpy(buffer
, "64 kbit/s");
575 strcpy(buffer
, "2 x 64 kbit/s");
578 strcpy(buffer
, "384 kbit/s");
581 strcpy(buffer
, "1536 kbit/s");
584 strcpy(buffer
, "1920 kbit/s");
587 strcpy(buffer
, "Multirate");
591 sprintf((pbuf
+strlen(pbuf
)), "reserved (0x%02x)", buf
[i
] & 0x0f);
594 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x1f, "Rate = %s", buffer
);
604 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
605 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Rate multiplier = %d", buf
[i
] & 0x7f);
613 switch(buf
[i
] & 0x1f)
616 strcpy(buffer
, "V.110/X.30");
619 strcpy(buffer
, "G.711 u-Law");
622 strcpy(buffer
, "G.711 a-Law");
625 strcpy(buffer
, "G.721 ADPCM/I.460");
628 strcpy(buffer
, "H.221/H.242");
631 strcpy(buffer
, "non-CCITT rate adaptation");
634 strcpy(buffer
, "V.120");
637 strcpy(buffer
, "X.31");
640 sprintf((pbuf
+strlen(pbuf
)), "reserved (0x%02x)", buf
[i
] & 0x1f);
643 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x1f, "Layer 1 Protocol = %s", buffer
);
651 /* work to do ahead !!! */
653 if(!(buf
[i
-1] & 0x80))
655 sprintf((pbuf
+strlen(pbuf
)), "\n user rate=0x%02x ", buf
[i
] & 0x1f);
658 sprintf((pbuf
+strlen(pbuf
)), "(async,");
660 sprintf((pbuf
+strlen(pbuf
)), "(sync,");
663 sprintf((pbuf
+strlen(pbuf
)), "in-band neg. possible)");
665 sprintf((pbuf
+strlen(pbuf
)), "in-band neg not possible)");
674 if(!(buf
[i
-1] & 0x80))
676 sprintf((pbuf
+strlen(pbuf
)), "\n clk/flow=0x%02x", buf
[i
] & 0x1f);
678 sprintf((pbuf
+strlen(pbuf
)), "\n intermediate rate=");
680 switch((buf
[i
] & 0x60) >> 5)
683 sprintf((pbuf
+strlen(pbuf
)), "not used");
686 sprintf((pbuf
+strlen(pbuf
)), "8 kbit/s");
689 sprintf((pbuf
+strlen(pbuf
)), "16 kbit/s");
692 sprintf((pbuf
+strlen(pbuf
)), "32 kbit/s");
702 if(!(buf
[i
-1] & 0x80))
704 sprintf((pbuf
+strlen(pbuf
)), "\n hdr/mfrm/etc.=0x%02x", buf
[i
]);
712 if(!(buf
[i
-1] & 0x80))
714 sprintf((pbuf
+strlen(pbuf
)), "\n stop/data/parity=0x%02x", buf
[i
]);
722 if(!(buf
[i
-1] & 0x80))
724 sprintf((pbuf
+strlen(pbuf
)), "\n modemtype=0x%02x", buf
[i
]);
732 switch(buf
[i
] & 0x7f)
735 sprintf((pbuf
+strlen(pbuf
)), "\n layer2=Q.921/I.441");
738 sprintf((pbuf
+strlen(pbuf
)), "\n layer2=X.25 link");
741 sprintf((pbuf
+strlen(pbuf
)), "\n layer2=0x%02x",(buf
[i
] & 0x7f));
750 switch(buf
[i
] & 0x7f)
753 sprintf((pbuf
+strlen(pbuf
)), "\n layer3=Q.921/I.441");
756 sprintf((pbuf
+strlen(pbuf
)), "\n layer3=X.25 packet");
759 sprintf((pbuf
+strlen(pbuf
)), "\n layer3=0x%02x",(buf
[i
] & 0x7f));
770 /*---------------------------------------------------------------------------*
771 * decode and print the ISDN (telephone) number
772 *---------------------------------------------------------------------------*/
774 f_cnu(char *pbuf
, unsigned char *buf
, int off
)
783 i
++; /* index -> length */
786 i
++; /* index -> type/plan */
789 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
791 switch((tp
& 0x70) >> 4)
794 strcpy(buffer
, "Unknown");
797 strcpy(buffer
, "International number");
800 strcpy(buffer
, "National number");
803 strcpy(buffer
, "Network specific number");
806 strcpy(buffer
, "Subscriber number");
809 strcpy(buffer
, "Abbreviated number");
812 sprintf(buffer
, "Reserved (%d), ", ((tp
& 0x70) >> 4));
815 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Type = %s", buffer
);
820 strcpy(buffer
, "Unknown");
823 strcpy(buffer
, "ISDN (E.164)");
826 strcpy(buffer
, "Data (X.121)");
829 strcpy(buffer
, "Telex (F.69)");
832 strcpy(buffer
, "National");
835 strcpy(buffer
, "Private");
838 sprintf(buffer
, "Reserved (%d)", (tp
& 0x0f));
841 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x0f, "Plan = %s", buffer
);
848 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
850 switch((buf
[i
] & 0x60) >> 5)
853 strcpy(buffer
, "allowed");
856 strcpy(buffer
, "restricted");
859 strcpy(buffer
, "number not available");
862 strcpy(buffer
, "reserved");
865 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Presentation = %s", buffer
);
867 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x1c, "Spare");
872 strcpy(buffer
, "user provided, not screened");
875 strcpy(buffer
, "user provided, verified & passed");
878 strcpy(buffer
, "user provided, verified & failed");
881 strcpy(buffer
, "network provided");
884 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x03, "Screening = %s", buffer
);
889 for(j
= 0; j
< len
; j
++)
891 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
+j
, buf
[i
+j
], 0xff, "Number digit = %c", buf
[i
+j
]);
899 /*---------------------------------------------------------------------------*
900 * decode and print HL comatibility
901 *---------------------------------------------------------------------------*/
903 f_hlc(char *pbuf
, unsigned char *buf
, int off
)
913 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
915 switch((buf
[i
] >> 5) & 0x03)
917 case 0: strcpy(buffer
, "CCITT");
919 case 1: strcpy(buffer
, "ISO/IEC");
921 case 2: strcpy(buffer
, "National");
923 case 3: strcpy(buffer
, "Network");
925 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x60, "Coding standard = %s", buffer
);
927 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x1c, "Interpretation = %s", ((buf
[i
] >> 2) & 0x07) == 0x04 ? "first" : "reserved");
929 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x03, "Presentation = %s", ((buf
[i
]) & 0x03) == 0x01 ? "High layer protocol profile" : "reserved");
934 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
936 switch(buf
[i
] & 0x7f)
939 strcpy(buffer
, "Telephony");
942 strcpy(buffer
, "Fax Group 2/3 (F.182)");
945 strcpy(buffer
, "Fax Group 4 I (F.184)");
948 strcpy(buffer
, "Teletex (F.230) or Fax Group 4 II/III (F.184)");
951 strcpy(buffer
, "Teletex (F.220)");
954 strcpy(buffer
, "Teletex (F.200)");
957 strcpy(buffer
, "Videotex (F.300/T.102)");
960 strcpy(buffer
, "Videotex (F.300/T.101)");
963 strcpy(buffer
, "Telex (F.60)");
966 strcpy(buffer
, "MHS (X.400)");
969 strcpy(buffer
, "OSI (X.200)");
972 strcpy(buffer
, "Maintenance");
975 strcpy(buffer
, "Management");
978 strcpy(buffer
, "Audio visual (F.721)");
981 sprintf(buffer
, "Reserved (0x%02x)", buf
[i
] & 0x7f);
984 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x7f, "Characteristics = %s", buffer
);
993 extension(3, pbuf
+strlen(pbuf
), off
+i
, buf
[i
], 0x80);
995 switch(buf
[i
] & 0x7f)
998 strcpy(buffer
, "Telephony");
1001 strcpy(buffer
, "Fax Group 2/3 (F.182)");
1004 strcpy(buffer
, "Fax Group 4 I (F.184)");
1007 strcpy(buffer
, "Teletex (F.230) or Fax Group 4 II/III (F.184)");
1010 strcpy(buffer
, "Teletex (F.220)");
1013 strcpy(buffer
, "Teletex (F.200)");
1016 strcpy(buffer
, "Videotex (F.300/T.102)");
1019 strcpy(buffer
, "Videotex (F.300/T.101)");
1022 strcpy(buffer
, "Telex (F.60)");
1025 strcpy(buffer
, "MHS (X.400)");
1028 strcpy(buffer
, "OSI (X.200)");
1031 strcpy(buffer
, "Maintenance");
1034 strcpy(buffer
, "Management");
1037 strcpy(buffer
, "Audio visual (F.721)");
1040 sprintf(buffer
, "Reserved (0x%02x)", buf
[i
] & 0x7f);
1044 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0x7f, "Ext. characteristics = %s", buffer
);
1049 /*---------------------------------------------------------------------------*
1051 *---------------------------------------------------------------------------*/
1053 f_uu(char *pbuf
, unsigned char *buf
, int off
)
1061 i
++; /* index -> length */
1064 i
++; /* index -> PD */
1070 strcpy(buffer
, "user-specific");
1073 strcpy(buffer
, "OSI high layer");
1076 strcpy(buffer
, "X.244");
1079 strcpy(buffer
, "reserved for sys mgmt");
1082 strcpy(buffer
, "IA5 characters");
1085 strcpy(buffer
, "X.208/X.209");
1088 strcpy(buffer
, "V.120");
1091 strcpy(buffer
, "Q.931/I.451");
1094 if(pd
>= 0x10 && pd
<= 0x3f)
1095 sprintf(buffer
, "reserved incl X.31 (0x%2x)", pd
);
1096 else if (pd
>= 0x40 && pd
<= 0x4f)
1097 sprintf(buffer
, "national use (0x%2x)", pd
);
1098 else if (pd
>= 0x50 && pd
<= 0xfe)
1099 sprintf(buffer
, "reserved incl X.31 (0x%2x)", pd
);
1101 sprintf(buffer
, "reserved (0x%2x)", pd
);
1104 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
, buf
[i
], 0xff, "protocol = %s", buffer
);
1109 for(j
= 0; j
< len
; j
++)
1111 if(isprint(buf
[i
+j
]))
1112 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
+j
, buf
[i
+j
], 0xff, "user information = %c", buf
[i
+j
]);
1114 sprintline(3, (pbuf
+strlen(pbuf
)), off
+i
+j
, buf
[i
+j
], 0xff, "user information = 0x%2x", buf
[i
+j
]);