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