Home | History | Annotate | Line # | Download | only in common
get.c revision 1.1
      1 /*
      2  * Copyright (c) 1993-95 Mats O Jansson.  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      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.
     12  * 3. All advertising materials mentioning features or use of this software
     13  *    must display the following acknowledgement:
     14  *	This product includes software developed by Mats O Jansson.
     15  * 4. The name of the author may not be used to endorse or promote products
     16  *    derived from this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #ifndef LINT
     31 static char rcsid[] = "$Id: get.c,v 1.1 1997/03/16 22:23:36 cjs Exp $";
     32 #endif
     33 
     34 #include <sys/types.h>
     35 #include "common/mopdef.h"
     36 
     37 u_char
     38 mopGetChar(pkt, index)
     39 	register u_char *pkt;
     40 	register int    *index;
     41 {
     42         u_char ret;
     43 
     44 	ret = pkt[*index];
     45 	*index = *index + 1;
     46 	return(ret);
     47 }
     48 
     49 u_short
     50 mopGetShort(pkt, index)
     51 	register u_char *pkt;
     52 	register int    *index;
     53 {
     54         u_short ret;
     55 
     56 	ret = pkt[*index] + pkt[*index+1]*256;
     57 	*index = *index + 2;
     58 	return(ret);
     59 }
     60 
     61 u_long
     62 mopGetLong(pkt, index)
     63 	register u_char *pkt;
     64 	register int    *index;
     65 {
     66         u_long ret;
     67 
     68 	ret = pkt[*index] +
     69 	      pkt[*index+1]*0x100 +
     70 	      pkt[*index+2]*0x10000 +
     71 	      pkt[*index+3]*0x1000000;
     72 	*index = *index + 4;
     73 	return(ret);
     74 }
     75 
     76 void
     77 mopGetMulti(pkt, index, dest, size)
     78 	register u_char *pkt,*dest;
     79 	register int    *index,size;
     80 {
     81 	int i;
     82 
     83 	for (i = 0; i < size; i++) {
     84 	  dest[i] = pkt[*index+i];
     85 	}
     86 	*index = *index + size;
     87 
     88 }
     89 
     90 int
     91 mopGetTrans(pkt, trans)
     92 	u_char	*pkt;
     93 	int	 trans;
     94 {
     95 	u_short	*ptype;
     96 
     97 	if (trans == 0) {
     98 		ptype = (u_short *)(pkt+12);
     99 		if (ntohs(*ptype) < 1600) {
    100 			trans = TRANS_8023;
    101 		} else {
    102 			trans = TRANS_ETHER;
    103 		}
    104 	}
    105 	return(trans);
    106 }
    107 
    108 void
    109 mopGetHeader(pkt, index, dst, src, proto, len, trans)
    110 	u_char	*pkt, **dst, **src;
    111 	int	*index, *len, trans;
    112 	u_short	*proto;
    113 {
    114 	*dst = pkt;
    115 	*src = pkt + 6;
    116 	*index = *index + 12;
    117 
    118 	switch(trans) {
    119 	case TRANS_ETHER:
    120 		*proto = (u_short)(pkt[*index]*256 + pkt[*index+1]);
    121 		*index = *index + 2;
    122 		*len   = (int)(pkt[*index+1]*256 + pkt[*index]);
    123 		*index = *index + 2;
    124 		break;
    125 	case TRANS_8023:
    126 		*len   = (int)(pkt[*index]*256 + pkt[*index+1]);
    127 		*index = *index + 8;
    128 		*proto = (u_short)(pkt[*index]*256 + pkt[*index+1]);
    129 		*index = *index + 2;
    130 		break;
    131 	}
    132 }
    133 
    134 u_short
    135 mopGetLength(pkt, trans)
    136 	u_char	*pkt;
    137 	int	 trans;
    138 {
    139 	switch(trans) {
    140 	case TRANS_ETHER:
    141 		return(pkt[15]*256 + pkt[14]);
    142 		break;
    143 	case TRANS_8023:
    144 		return(pkt[12]*256 + pkt[13]);
    145 		break;
    146 	}
    147 	return(0);
    148 }
    149