forked from wireshark/wireshark
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Moved some definitions and functions from packet-osi.{c,h} to
epan/osi-utils.{c,h} to bring all of the epan dependencies into epan. svn path=/trunk/; revision=3226
- Loading branch information
Ed Warnicke
committed
Apr 1, 2001
1 parent
dd54ba9
commit 90f7f61
Showing
6 changed files
with
236 additions
and
158 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,172 @@ | ||
/* osi-utils.c | ||
* Routines for ISO/OSI network and transport protocol packet disassembly | ||
* Main entrance point and common functions | ||
* | ||
* $Id: osi-utils.c,v 1.1 2001/04/01 05:48:15 hagbard Exp $ | ||
* Laurent Deniel <deniel@worldnet.fr> | ||
* Ralf Schneider <Ralf.Schneider@t-online.de> | ||
* | ||
* Ethereal - Network traffic analyzer | ||
* By Gerald Combs <gerald@zing.org> | ||
* Copyright 1998 Gerald Combs | ||
* | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version 2 | ||
* of the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
* | ||
*/ | ||
|
||
#ifdef HAVE_CONFIG_H | ||
# include "config.h" | ||
#endif | ||
|
||
#ifdef HAVE_SYS_TYPES_H | ||
# include <sys/types.h> | ||
#endif | ||
|
||
#ifdef NEED_SNPRINTF_H | ||
# include "snprintf.h" | ||
#endif | ||
|
||
#include <stdio.h> | ||
#include <glib.h> | ||
|
||
#include "osi-utils.h" | ||
|
||
gchar *print_nsap_net( const u_char *buffer, int length) | ||
{ | ||
/* to do : NSAP / NET decoding */ | ||
|
||
static gchar str[MAX_NSAP_LEN * 3 + 50]; /* reserve space for nice layout */ | ||
gchar *cur; | ||
|
||
cur = str; | ||
|
||
if ( (length <= 0 ) || ( length > MAX_NSAP_LEN ) ) { | ||
sprintf( str, "<Invalid length of NSAP>"); | ||
return( str ); | ||
} | ||
if ( ( length == RFC1237_NSAP_LEN ) || ( length == RFC1237_NSAP_LEN + 1 ) ) { | ||
cur += sprintf( cur, "%s", print_area( buffer, RFC1237_FULLAREA_LEN ) ); | ||
cur += sprintf( cur, "%s", print_system_id( buffer + RFC1237_FULLAREA_LEN, | ||
RFC1237_SYSTEMID_LEN ) ); | ||
cur += sprintf( cur, "[%02x]", | ||
buffer[ RFC1237_FULLAREA_LEN + RFC1237_SYSTEMID_LEN ] ); | ||
if ( length == RFC1237_NSAP_LEN + 1 ) { | ||
cur += sprintf( cur, "-%02x", buffer[ length -1 ] ); | ||
} | ||
return ( str ); | ||
} | ||
else { /* probably format as standard */ | ||
return( print_area( buffer, length ) ); | ||
} | ||
} /* print_nsap */ | ||
|
||
|
||
gchar *print_system_id( const u_char *buffer, int length ) { | ||
int tmp; | ||
u_char *cur; | ||
static gchar str[MAX_SYSTEMID_LEN * 3 + 5]; /* Don't trust exact matching */ | ||
|
||
if ( ( length <= 0 ) || ( length > MAX_SYSTEMID_LEN ) ) { | ||
sprintf( str, "<Invalid length of SYSTEM ID>"); | ||
return( str ); | ||
} | ||
|
||
cur = str; | ||
if ( ( 6 == length ) || ( 7 == length ) ) { /* Special case, print as MAC */ | ||
cur += sprintf(str, "[%02x:%02x:%02x_%02x:%02x:%02x]", buffer[0], buffer[1], | ||
buffer[2], buffer[3], buffer[4], buffer[5] ); | ||
if ( 7 == length ) { | ||
sprintf( cur, "-%02x", buffer[6] ); | ||
} | ||
} | ||
else { | ||
tmp = 0; | ||
while ( tmp < length / 4 ) { /* 16 / 4 == 4 > four Octets left to print */ | ||
cur += sprintf( str, "%02x%02x%02x%02x.", buffer[tmp++], buffer[tmp++], | ||
buffer[tmp++], buffer[tmp++] ); | ||
} | ||
if ( 1 == tmp ) { /* Special case for Designated IS */ | ||
sprintf( --cur, "-%02x", buffer[tmp] ); | ||
} | ||
else { | ||
for ( ; tmp < length; ) { /* print the rest without dot */ | ||
cur += sprintf( cur, "%02x", buffer[tmp++] ); | ||
} | ||
} | ||
} | ||
return( str ); | ||
} | ||
|
||
gchar *print_area(const u_char *buffer, int length) | ||
{ | ||
/* to do : all real area decoding now: NET is assumed if id len is 1 more byte | ||
* and take away all these stupid resource consuming local statics | ||
*/ | ||
|
||
static gchar str[MAX_AREA_LEN * 3 + 20]; /* reserve space for nice layout */ | ||
gchar *cur; | ||
u_int tmp = 0; | ||
|
||
cur = str; | ||
|
||
if (length <= 0 || length > MAX_AREA_LEN) { | ||
sprintf( str, "<Invalid length of AREA>"); | ||
return( str ); | ||
} | ||
|
||
if ( ( ( NSAP_IDI_ISODCC == *buffer ) | ||
|| ( NSAP_IDI_GOSIP2 == *buffer ) | ||
) | ||
&& | ||
( ( RFC1237_FULLAREA_LEN == length ) | ||
|| ( RFC1237_FULLAREA_LEN + 1 == length ) | ||
) | ||
) { /* AFI is good and length is long enough */ | ||
|
||
if ( length > RFC1237_FULLAREA_LEN + 1 ) { /* Special Case Designated IS */ | ||
sprintf( str, "<Invalid length of AREA for DCC / GOSIP AFI>"); | ||
return( str ); | ||
} | ||
|
||
cur += sprintf( cur, "[%02x|%02x:%02x][%02x|%02x:%02x:%02x|%02x:%02x]", | ||
buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], | ||
buffer[5], buffer[6], buffer[7], buffer[8] ); | ||
cur += sprintf( cur, "[%02x:%02x|%02x:%02x]", | ||
buffer[9], buffer[10], buffer[11], buffer[12] ); | ||
if ( RFC1237_FULLAREA_LEN + 1 == length ) { | ||
sprintf( cur, "-[%02x]", buffer[20] ); | ||
} | ||
return str; | ||
} | ||
else { /* print standard format */ | ||
if ( 4 < length ) { | ||
while ( tmp < length / 4 ) { /* 16/4==4 four Octets left to print */ | ||
cur += sprintf( str, "%02x%02x%02x%02x.", buffer[tmp++], buffer[tmp++], | ||
buffer[tmp++], buffer[tmp++] ); | ||
} | ||
if ( 1 == tmp ) { /* Special case for Designated IS */ | ||
sprintf( --cur, "-%02x", buffer[tmp] ); | ||
} | ||
else { | ||
for ( ; tmp < length; ) { /* print the rest without dot */ | ||
cur += sprintf( cur, "%02x", buffer[tmp++] ); | ||
} | ||
} | ||
} | ||
return( str ); | ||
} | ||
} /* print_area */ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/* packet-osi.h | ||
* | ||
* $Id: osi-utils.h,v 1.1 2001/04/01 05:48:15 hagbard Exp $ | ||
* | ||
* Ethereal - Network traffic analyzer | ||
* By Gerald Combs <gerald@zing.org> | ||
* Copyright 1998 Gerald Combs | ||
* | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version 2 | ||
* of the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
*/ | ||
|
||
#ifndef __OSI_UTILS_H__ | ||
#define __OSI_UTILS_H__ | ||
|
||
/* OSI Global defines, common for all OSI protocols */ | ||
|
||
#define MAX_NSAP_LEN 30 | ||
#define MAX_SYSTEMID_LEN 15 | ||
#define MAX_AREA_LEN 30 | ||
|
||
#define RFC1237_NSAP_LEN 20 | ||
#define RFC1237_FULLAREA_LEN 13 | ||
#define RFC1237_SYSTEMID_LEN 6 | ||
#define RFC1237_SELECTOR_LEN 1 | ||
|
||
#define RFC1237_IDI_LEN 2 | ||
#define RFC1237_AFI_LEN 1 | ||
#define RFC1237_DFI_LEN 1 | ||
#define RFC1237_ORG_LEN 3 | ||
#define RFC1237_AA_LEN 3 | ||
#define RFC1237_RSVD_LEN 2 | ||
#define RFC1237_RD_LEN 2 | ||
#define RFC1237_AREA_LEN 3 | ||
|
||
#define NSAP_IDI_ISODCC 0x39 | ||
#define NSAP_IDI_GOSIP2 0x47 | ||
|
||
gchar* print_nsap_net ( const u_char *, int ); | ||
gchar* print_area ( const u_char *, int ); | ||
gchar* print_system_id( const u_char *, int ); | ||
|
||
|
||
#endif /* __OSI_UTILS_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.